首页 > 其他 > 详细

Docker:容器数据卷(命令方式、DockerFile方式)

时间:2020-10-23 20:43:49      阅读:30      评论:0      收藏:0      [点我收藏+]

1、容器数据卷

(1)概念

主要作用是做持久化,如果不使用docker的commit生成新的镜像使得数据做为镜像的一部分保存下来,那么容器删除之后数据就会丢失

(2)特点

数据卷可在容器之间共享或重用数据
卷中的更改可以直接生效
数据卷中的更改不会包含在镜像的更新中
数据卷的生命周期一直持续到没有容器使用它为止

 

2、容器数据卷的运用(命令方式)

(1)绑定目录

技术分享图片

 在运行这条命令的过程中在宿主机上创建了myDataVolume目录并在centos镜像的容器中生成了dataVolumeContainer目录

(2)运行docker inspect命令

       "Mounts": [
            {
                "Type": "bind",
                "Source": "/myDataVolume",
                "Destination": "/dataVolumeContainer",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

(3)容器和宿主之间数据共享

在宿主机中创建一个文件:

[root@aubin /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  myDataVolume  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@aubin /]# cd myDataVolume
[root@aubin myDataVolume]# touch host.txt
[root@aubin myDataVolume]# ls
host.txt

在容器中查看相应的目录:在宿主机中存在文件该文件是可读可写的

[root@a81d9e1a475d /]# ls 
bin  dataVolumeContainer  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@a81d9e1a475d /]# cd dataVolumeContainer
[root@a81d9e1a475d dataVolumeContainer]# ls
host.txt

相反,如果在容器中创建文件,宿主机中也能看到该文件

(4)容器停止退出,主机修改数据,绑定的容器目录中依旧进行数据的同步

(5)权限

[root@aubin /]# docker run -it -v /myDataVolume:/dataVolumeContainer:ro  centos

添加了只读权限,例如:主机新建了文件后,容器内就只有读权限

 

3、容器数据卷的运用(DockerFile方式)

(1)什么是DockerFile

技术分享图片

 DockerFile是对镜像的描述

(2)新建一个目录,在目录中创建一个文件

[root@aubin mydocker]# ls
myfile.txt

(3)File构建(在文件中书写配置)

技术分享图片

(4)build

[root@aubin ~]# docker build -f /mydocker/myfile.txt -t zhai/centos .
Sending build context to Docker daemon  13.87kB
Step 1/4 : from centos
 ---> 0d120b6ccaa8
Step 2/4 : VOLUME ["/dataVolumeContainer","/dataVolumeContainer2"]
 ---> Using cache
 ---> d75e63d723c5
Step 3/4 : CMD echo "success"
 ---> Using cache
 ---> 4f2ed3ad8394
Step 4/4 : CMD /bin/bash
 ---> Using cache
 ---> 8f28e3fd97da
Successfully built 8f28e3fd97da
Successfully tagged zhai/centos:latest

指明文件路径以及命名空间,点代表的是当前的centos模板

查看镜像:

[root@aubin ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
zhai/centos         latest              8f28e3fd97da        7 minutes ago       215MB
tomcat              latest              625b734f984e        7 hours ago         648MB
redis               latest              bd571e6529f3        9 days ago          104MB
mongo               latest              ba0c2ff8d362        3 weeks ago         492MB
centos              latest              0d120b6ccaa8        2 months ago        215MB
hello-world         latest              bf756fb1ae65        9 months ago        13.3kB
tomcat              8.5.32              5808f01b11bf        2 years ago         463MB

查看新生成的镜像的目录:

[root@aubin /]# docker run -it zhai/centos
[root@8f013888a738 /]# ls
bin                  dataVolumeContainer2  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dataVolumeContainer  dev                   home  lib64  media       opt  root  sbin  sys  usr

(5)数据共享

在宿主机中没有指定目录,但是会有一个默认的目录,如:在容器中创建一个目录

[root@8f013888a738 dataVolumeContainer2]# mkdir mydir
[root@8f013888a738 dataVolumeContainer2]# ls
mydir

在宿主机上查看是否有与容器相同的目录:

[root@aubin data]# cd /
[root@aubin /]# cd var
[root@aubin var]# cd lib
[root@aubin lib]# ls
alternatives  authconfig  containerd  dbus  dhclient  docker  games  initramfs  logrotate  machines  misc  NetworkManager  os-prober  plymouth  polkit-1  postfix  rpm  rpm-state  rsyslog  selinux  stateless  systemd  tuned  vmware  yum
[root@aubin lib]# cd docker
[root@aubin docker]# ls
builder  buildkit  containers  image  network  overlay2  plugins  runtimes  swarm  tmp  trust  volumes
[root@aubin docker]# cd volumes
[root@aubin volumes]# ls
546e5ee0423c12c98d41e5194221e12be66285e4a78b2d0f29af4f802b2ce395  8723facb75d49a8a20e0f70e3ecabd3b44709405d990fcff1ef130e19b82c389  metadata.db
[root@aubin volumes]# cd 546e5ee0423c12c98d41e5194221e12be66285e4a78b2d0f29af4f802b2ce395
[root@aubin 546e5ee0423c12c98d41e5194221e12be66285e4a78b2d0f29af4f802b2ce395]# ls
_data
[root@aubin 546e5ee0423c12c98d41e5194221e12be66285e4a78b2d0f29af4f802b2ce395]# cd _data
[root@aubin _data]# ls
mydir
[root@aubin _data]# 

 

4、容器间的数据共享

(1)启动一号容器并在目录中创建一个文件

[root@aubin /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@aubin /]# docker run -it --name dc01 zhai/centos
[root@64649475991d /]# ls
bin                  dataVolumeContainer2  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dataVolumeContainer  dev                   home  lib64  media       opt  root  sbin  sys  usr
[root@64649475991d /]# cd  dataVolumeContainer2
[root@64649475991d dataVolumeContainer2]# ls
[root@64649475991d dataVolumeContainer2]# touch dc01.txt
[root@64649475991d dataVolumeContainer2]# ls
dc01.txt

(2)创建二号容器

[root@aubin /]# docker run -it --name dc02 --volumes-from dc01 zhai/centos
[root@a5ece78ac702 /]# ls
bin                  dataVolumeContainer2  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dataVolumeContainer  dev                   home  lib64  media       opt  root  sbin  sys  usr
[root@a5ece78ac702 /]# cd  dataVolumeContainer2
[root@a5ece78ac702 dataVolumeContainer2]# ls
dc01.txt

一号容器创建的文件在二号容器中也存在,二号容器是继承自一号容器的。在二号容器中创建文件后一号容器中也会存在文件,实现了容器间的数据共享。即使将一号容器删除,一号容器创建的文件依旧会在二号容器中

数据卷的生命周期一直持续到没有容器使用它为止

 

Docker:容器数据卷(命令方式、DockerFile方式)

原文:https://www.cnblogs.com/zhai1997/p/13865288.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!