初识DockerFile&容器数据卷

527 阅读3分钟

这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战

DockerFile

DockerFile用来构建docker镜像的构建文件,其实就是一段命令脚本,通过脚本可以生成镜像,镜像是一层一层的,对应的就是脚本一个个的命令,每个命令都是一层 下面我们来做个测试

1、测试路径下创建一个文件夹

# cb @ bangdeMacBook-Pro in ~/test/docker-test-volume [6:57:20]
$ pwd
**> /Users/cb/test/docker-test-volume**

2、新建一个文件dockerfile01,输入如下内容

FROM centos

VOLUME ["/volume01","/volume02"]

CMD echo "---end---"
CMD /bin/bash

3、通过命令构建镜像

 docker build -f dockerfile01 -t cbaj/centos:1.0 .

查看下,可以看到刚刚生成的镜像

然后启动下自己做的容器

 docker run -it 703f234db31c /bin/bash

进入容器后查看下容器内的目录,可以看到数据卷的目录,这个卷和外部一定有一个同步的目录,刚才的操作我们没有指定目录,所以它是一个匿名挂载,

我们在容器内的volume01中创建一个文件

然后用docker inspect 命令查看下容器的信息,可以看到如下图的映射关系,正如上文描述的匿名挂载生成随机的目录

然后再到宿主机的目录下看下这个目录下,会发现容器中的文件成功同步过来了

如果是mac需要通过之前文章中的方式查看文件 docker数据卷的使用

这种方式我们未来使用的会比较多,因为我们通常会构建自己的镜像!

容器数据卷

那么多个docker容器直接如何实现数据的同步呢?可以下看下面的图稍微理解下,然后我们实际操作看下

我们启动下我们刚刚自己构建的镜像并且命名为docker01

docker run -it --name docker01 cbaj/centos:1.0

然后再启动一个容器命名为docker02,并且通过--volumes-from将docker2“继承”docker01;

docker run -it --name docker02  --volumes-from docker01 cbaj/centos:1.0

在容器docker01容器中的volume01目录下创建文件,在docker02对应的文件夹中会同步生成文件

再启动一个docker03

docker run -it --name docker03  --volumes-from docker01 cbaj/centos:1.0

这边docker03会同步docker01中已有的文件,同样在docker03中新增的文件在docker01、docker02中同步;这里的docker01相当于数据卷容器,我们在docker01数据卷里面创建的内容,只要其它容器和docker01进行了关联,它就会把docker01数据卷里面的内容进行同步,我们在其子容器下面同步的内容也可以在docker01里面进行同步。 即使当我们删除了docker01容器,docker02和docker03里面的内容还在(这就是同步和映射的区别)

多个mysql实现数据共享

docker run -d -p 3310:3306 -v /Users/chenbang/home/mysql/conf:/etc/mysql/conf.d -v /Users/chenbang/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

docker run -d -p 3301:3306 -e -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7

结论

容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器为止,一旦数据同步到本地,本地的数据不会受容器的影响

本是青灯不归客, 却因浊酒留风尘。