docker file,docker网络和容器数据卷

容器数据卷

docker的理念是应用和环境包打包城镜像.
那么如果数据在容器中,容器被删除跑路,就嗝屁了,所以数据可以持久化的存储在容器外部
容器数据卷就可以让容器之间有一个数据共享技术.把docker容器产生的数据同步到本地.
注意这个本地是的是操作系统linux不是docker.这是个目录挂载技术,把我们容器内的目录挂载到linux上

docker file,docker网络和容器数据卷
使用数据卷,就会把mysql容器内下的/user/mysql数据同步到linux下的/home/mysql中
实现容器之间数据共享以及同步操作

  1. 方式1 使用命令挂载 -v

docker run -it -v 主机目录:容器内目录
docker run -it --name centos01 -v /home/ceshi:/home centos /bin/bash
docker file,docker网络和容器数据卷
此时我们随意在容器内部增删文件夹和文件,在外部镜像的/home/ceshi中就可以看到响应的变动
当容器关闭的时候,我们在主机内对文件进行数据写入,容器在重启后一样会更新,双向更新

  • 安装实战 mysql

运行mysql,需要配置root的账号密码(查看dockerhub的官方文档)
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
我们配置挂载
docker run -d -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql03 mysql:5.7
用navicat什么的可以尝试连接下端口并创建一个数据库看是否有同步挂载

具名挂载和匿名挂载

匿名挂载

-v 容器内路径
不指定主机路径,让他随机生成
docker run -d -P --name tomcat01 -v /ect/nginx nginx

查看所有的volume

$ docker volume --help

Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
匿名挂载格式如下
docker file,docker网络和容器数据卷

具名挂载

可以看到匿名会随机生成一大串字符串,不利于后期查找和识别
我们可以给匿名挂载生成的匿名挂载自定义名字,这里注意 /zidingyi:/ect/nginx 如果是/zidingyi 代表的是路径,没有反斜杠代表起别名.
docker run -d -P --name tomcat02 -v zidingyi:/ect/nginx nginx
docker file,docker网络和容器数据卷

用docker volume inspect命令查看这个自定义的卷名路径在哪里
例:docker volume inspect zidingyi
docker file,docker网络和容器数据卷

挂载语法格式一共有4种
匿名挂载 -v 容器内路径
具名挂载 -v 具名/容器内路径
在上述三种路径后面加:rw或者:ro 例:具名挂载 -v 具名/容器内路径:ro ,ro是read only,rw是read write,指定权限
指定路径挂载 -v /本机路径:/容器内路径

  1. 方式2 使用dockerfile命令方式挂载

  • 首先随便创建一个文件夹和名字,这里我们在创建一个/home/myvolume/dockerfile1 建议文件名用dockerfile
    脚本命令如下: 指令都是大写
    FROM mysql #填写基于哪个镜像
    VOLUME ["/volume01","/volume02"] #同-v 容器内路径 ,是一种匿名挂载方式
    CMD echo"---end----" #输出end
    CMD /bin/bash #切回交互界面
  • docker build 命令用来创建生成dock file
    docker build -f dockerfile的文件路径 -t 镜像名字:tag
    docker build -f /home/myvolume/dockfile1 -t sxf/mysql:1.0 . 最后一点要加个空格和点
    docker file,docker网络和容器数据卷
    docker file,docker网络和容器数据卷
  • 启动下自己的容器镜像
    docker file,docker网络和容器数据卷
    docker file,docker网络和容器数据卷
    镜像进去后 ls -l 查看当前目录文件,发现下面2个挂载目录,这2个目录一定和本地有对应的同步目录
    docker file,docker网络和容器数据卷
    我们在这2个目录下分别创建111,222文件夹,然后去本地用docker inspect 容器id查找是否有同步更新的文件夹位置
    注意这里查找的是镜像ID 不是容器ID
    docker file,docker网络和容器数据卷

容器数据卷2

容器数据卷上面讲的是容器内和本地系统数据共享.这里举得例子是容器和容器之间的数据共享.
容器1 --volumes-from 容器2 这里容器2是父容器, 容器1是子容器,继承关系.容器之间数据共享,只要有一个容器在使用共享数据,其他容器停止或者删除都不会对正在使用共享数据的容器产生影响.
每个容器的共享数据是相互拷贝的概念,而不是单独存在某一个容器中的.
首先拿下载的centos镜像为例,我们先创建一个容器
docker run --name centos01 -v /home/pc_data:/home/container_data -it centos:7.6.1810 /bin/bash
创建了一个镜像和本机的数据卷.接下来我们再开一个镜像,命名为centos02
docker run -it --name docker02 --volumes-from centos01 centos:7.6.1810
这里因为centos01已经创建了,我们只是用--volumes-from 完全拷贝他而已,所以-v的那些数据卷路径不用重复
语法格式 docker run -it --name docker02 --volumes-from 父容器id 镜像名:tag

例2: 我们现在创建一个多个数据库共享数据的案例
第一台mysql创建docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=root -d mysql:tag -p 8080:3306 -v /etc/mysql:/home/mysql_data mysql:5.7
第二胎mysql创建docker run --name mysql02 -e MYSQL_ROOT_PASSWORD=root -d -p 8080:3307 --volumes-from mysql01 mysql:5.7

docker file

docker file 就是通过命令,脚本用来构建docker镜像的构建文件

docker网络

docker file,docker网络和容器数据卷

上一篇:回文串的中心扩散法


下一篇:C# static的用法详解