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"
docker inspect 正在运行容器id

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 inspect 正在运行容器id

容器间传递共享

启动多个上面运行的容器

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

人生苦短,我用Python
原文地址:https://www.cnblogs.com/sunjinchao/p/12673255.html