Docker :容器数据卷 /Docker File
容器数据卷
容器中的数据了类似于内存中的数据,如果关闭容器,容器中的数据将会丢失。所以要使用容器数据卷
容器数据卷:保存 容器产生的数据。例如:
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接生效
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
作用:容器持久化,容器间继承+数据共享
命令添加 容器数据卷
命令 :docker run -it -v /宿主机的绝对目录:/容器内的目录 镜像名
docker run -it -v /dockerdata/nginx.conf:/dockerdata/nginx.conf nginx
备注:目录不用手动建立,系统自动建立目录
docker run -it -v /宿主机的绝对目录:/容器内的目录:ro 镜像名
备注:宿主机可以读写数据,而容器只能读数据,而不能写数据
docker run -it -v /宿主机的绝对目录:/容器内的目录 镜像名 "Mounts": [ { "Type": "bind", "Source": "/dockerdata/nginx.conf", "Destination": "/dockerdata/nginx.conf", "Mode": "", "RW": true, "Propagation": "rprivate" } ], docker run -it -v /宿主机的绝对目录:/容器内的目录:ro 镜像名 "Mounts": [ { "Type": "bind", "Source": "/dockerdata/nginx.conf", "Destination": "/dockerdata/nginx.conf", "Mode": "ro", "RW": false, "Propagation": "rprivate"
dockerfile 添加容器数据卷
1、现在根目录新建一个文件夹 /mydocker
2、可在dockerfile中使用volume指令给镜像添加一个或者多个数据卷
3、dockerfile构建
cd /mydockerfile vim Dockerfiel #volume testfile FROM centos #继承centos父类 VOLUME [“/dataVoluemContainer1”,“/dataVoluemContainer2”] #根目录新建2个容器卷,记得双引号,单引号会有问题 CMD echo "finished,------success" #打印日志 CMD /bin/bash
[root@localhost mydocker]# docker build -f /mydocker/Dockerfile -t sjc/centos . Sending build context to Docker daemon 2.048kB Step 1/4 : FROM centos ---> 470671670cac Step 2/4 : VOLUME ['/dataVoluemContainer1','/dataVoluemContainer2'] ---> Running in 6259cd79ab12 Removing intermediate container 6259cd79ab12 ---> d01ed2a7f418 Step 3/4 : CMD echo "finished,------success" ---> Running in 460f4c4877e5 Removing intermediate container 460f4c4877e5 ---> 4910d0b15aee Step 4/4 : CMD /bin/bash ---> Running in 2134da60988f Removing intermediate container 2134da60988f ---> faadd24be86c Successfully built faadd24be86c Successfully tagged sjc/centos:latest
4、build后生成镜像---获得新镜像
docker build -f /mydocker/Dockerfile -t xfd/centos .
5、run容器。
[root@localhost mydocker]# docker run -it xfd/centos [root@d5536831ffe8 /]# dir bin dataVoluemContainer1 dataVoluemContainer2 dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys
6、宿主机容器卷的目录在哪里??
"Mounts": [ { "Type": "volume", "Name": "0a38840cb8bbb0100bf001e703790dbfc3d04651c486dd15d6073ff33e56e0a6", "Source": "/var/lib/docker/volumes/0a38840cb8bbb0100bf001e703790dbfc3d04651c486dd15d6073ff33e56e0a6/_data", "Destination": "/dataVoluemContainer1", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }, { "Type": "volume", "Name": "c70de6f751066c9e27d72895ca1cd38a6f44c8dfb5f84374b2d4712cc51931a5", "Source": "/var/lib/docker/volumes/c70de6f751066c9e27d72895ca1cd38a6f44c8dfb5f84374b2d4712cc51931a5/_data", "Destination": "/dataVoluemContainer2", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }
容器间传递共享
启动多个上面运行的容器
docker run -it --name centos1 xfd/centos (父容器) docker run -it --name centos2 --volumes-from centos1 xfd/centos docker run -it --name centos3 --volumes-from centos1 xfd/centos
容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
dockerfile