Docker

来源:互联网 发布:台湾回归 知乎 编辑:程序博客网 时间:2024/06/02 17:21

在容器中管理数据主要有两种方式:数据卷( Data volumes)和数据卷容器( Data volume containers)。

数据卷

数据卷是一个可供一个或多个容器使用的特殊目录。数据卷的使用,类似于 Linux 下对目录或文件进行 mount。

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除

数据卷用于持久化数据,生命周期独立于容器,在容器被删除后,数据卷不会被自动删除。
但可以在删除最后一个挂载它的容器时,使用docker rm -v命令在删除容器的同时移除数据卷。

创建数据卷到容器

使用docker run命令的-v参数可以创建数据卷(挂载本地主机的目录或文件)到容器。多次使用-v参数可以挂载多个数据卷。
本地目录和文件的路径必须是绝对路径,如果路径不存在 Docker将自动创建。
挂载数据卷的默认权限是读写,用户也可以通过 :ro 指定为只读。
特别注意:虽然可以挂载主机文件到容器,但建议直接挂载主机文件的父目录到容器,防止容器内的编辑造成主机文件inode的改变。

删除数据卷

数据卷用于持久化数据,生命周期独立于容器,在容器被删除后,数据卷不会被自动删除。
但可以在删除最后一个挂载它的容器时,使用docker rm -v命令在删除容器的同时移除数据卷。

示例

[root@CentOS7 ~]# docker run -itd --name test-data-volume -v /home:/home docker.io/ubuntu /bin/bash715cdbfe8b905a28301532cfbe91df39e28f7c1fa76575422618cfb39d6a3e46[root@CentOS7 ~]# [root@CentOS7 ~]# docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES715cdbfe8b90        docker.io/ubuntu    "/bin/bash"         13 seconds ago      Up 11 seconds                           test-data-volume[root@CentOS7 ~]# [root@CentOS7 ~]# docker inspect test-data-volume[    {        "Id": "715cdbfe8b905a28301532cfbe91df39e28f7c1fa76575422618cfb39d6a3e46",        "Created": "2017-04-28T15:37:33.785636016Z",        "Path": "/bin/bash",..................        "Mounts": [            {                "Source": "/home",                "Destination": "/home",                "Mode": "",                "RW": true,                "Propagation": "rprivate"            }        ],..................[root@CentOS7 ~]# [root@CentOS7 ~]# docker inspect --format "{{ .HostConfig.Binds }}" test-data-volume[/home:/home][root@CentOS7 ~]# [root@CentOS7 ~]# docker attach test-data-volumeroot@715cdbfe8b90:/# root@715cdbfe8b90:/# cd /homeroot@715cdbfe8b90:/home# echo "This is a test!" >> test.logroot@715cdbfe8b90:/home# ls -l test.log -rw-r--r--. 1 root root 16 Apr 28 15:39 test.logroot@715cdbfe8b90:/home# cat test.log This is a test!root@715cdbfe8b90:/home# [root@CentOS7 ~]# [root@CentOS7 ~]# ls -l /home/test.log -rw-r--r--. 1 root root 16 4月  28 23:39 /home/test.log[root@CentOS7 ~]# [root@CentOS7 ~]# cat /home/test.log This is a test![root@CentOS7 ~]# 

数据卷容器

数据卷容器适合容器之间持续更新的数据共享。
数据卷容器,实际上就是一个正常的容器,专门用来提供数据卷供其它容器挂载。
使用方法比较直观,首先创建一个数据卷容器,然后在创建其他容器时,利用docker run命令的--volumes-from参数挂载数据卷容器的数据卷。
--volumes-from参数支持从多个容器挂载不同的数据卷,也可以多级串联挂载包含数据卷的容器。

示例:创建数据卷容器

[root@CentOS7 ~]# docker run -d --name dbdata -v /dbdata docker.io/ubuntu8fe93640074a296f8185cc14a891ce35b59234168e151737e52ebfd505cf1413[root@CentOS7 ~]# [root@CentOS7 ~]# docker ps -aCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES8fe93640074a        docker.io/ubuntu    "/bin/bash"         4 seconds ago       Exited (0) 3 seconds ago                       dbdata[root@CentOS7 ~]# [root@CentOS7 ~]# docker inspect dbdata[    {        "Id": "8fe93640074a296f8185cc14a891ce35b59234168e151737e52ebfd505cf1413",        "Created": "2017-04-28T15:56:44.569538208Z",        "Path": "/bin/bash",..................        "Mounts": [            {                "Name": "1ae23fd89dc88674d1a9574703ebbd021fcd2e8bc354205127f23ca45ac18b04",                "Source": "/var/lib/docker/volumes/1ae23fd89dc88674d1a9574703ebbd021fcd2e8bc354205127f23ca45ac18b04/_data",                "Destination": "/dbdata",                "Driver": "local",                "Mode": "",                "RW": true,                "Propagation": ""            }        ],..................[root@CentOS-7 ~]# 

示例:挂载数据卷容器的数据卷

[root@CentOS7 ~]# docker run -itd --volumes-from dbdata --name test-data-container-1 docker.io/ubuntu /bin/bashd2f50439edfd80424ac7a26b0d2bd9628877078f80d7d65f910c4c54172d881c[root@CentOS7 ~]# [root@CentOS7 ~]# docker run -itd --volumes-from dbdata --name test-data-container-2 docker.io/ubuntu /bin/bash7a6ff0476aa2cb3ddc523290994e764648beb448bea8f7687c9d4db641d0a571[root@CentOS7 ~]# [root@CentOS7 ~]# docker ps -aCONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                      PORTS               NAMES7a6ff0476aa2        docker.io/ubuntu    "/bin/bash"         17 seconds ago       Up 16 seconds                                   test-data-container-2d2f50439edfd        docker.io/ubuntu    "/bin/bash"         About a minute ago   Up About a minute                               test-data-container-18fe93640074a        docker.io/ubuntu    "/bin/bash"         17 minutes ago       Exited (0) 17 minutes ago                       dbdata[root@CentOS7 ~]# [root@CentOS7 ~]# docker inspect test-data-container-1[    {        "Id": "d2f50439edfd80424ac7a26b0d2bd9628877078f80d7d65f910c4c54172d881c",        "Created": "2017-04-28T16:12:35.871642587Z",        "Path": "/bin/bash",............        "Mounts": [            {                "Name": "1ae23fd89dc88674d1a9574703ebbd021fcd2e8bc354205127f23ca45ac18b04",                "Source": "/var/lib/docker/volumes/1ae23fd89dc88674d1a9574703ebbd021fcd2e8bc354205127f23ca45ac18b04/_data",                "Destination": "/dbdata",                "Driver": "local",                "Mode": "",                "RW": true,                "Propagation": ""            }        ],............[root@CentOS-7 ~]# [root@CentOS7 ~]# docker inspect test-data-container-2[    {        "Id": "7a6ff0476aa2cb3ddc523290994e764648beb448bea8f7687c9d4db641d0a571",        "Created": "2017-04-28T16:13:48.489300382Z",        "Path": "/bin/bash",............        "Mounts": [            {                "Name": "1ae23fd89dc88674d1a9574703ebbd021fcd2e8bc354205127f23ca45ac18b04",                "Source": "/var/lib/docker/volumes/1ae23fd89dc88674d1a9574703ebbd021fcd2e8bc354205127f23ca45ac18b04/_data",                "Destination": "/dbdata",                "Driver": "local",                "Mode": "",                "RW": true,                "Propagation": ""            }        ],............[root@CentOS-7 ~]# 

示例:数据共享

[root@CentOS7 ~]# docker ps -aCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES7a6ff0476aa2        docker.io/ubuntu    "/bin/bash"         3 minutes ago       Up 3 minutes                                    test-data-container-2d2f50439edfd        docker.io/ubuntu    "/bin/bash"         4 minutes ago       Up 4 minutes                                    test-data-container-18fe93640074a        docker.io/ubuntu    "/bin/bash"         20 minutes ago      Exited (0) 20 minutes ago                       dbdata[root@CentOS7 ~]# [root@CentOS7 ~]# [root@CentOS7 ~]# docker attach test-data-container-1root@d2f50439edfd:/# root@d2f50439edfd:/# cd /dbdata/root@d2f50439edfd:/dbdata# echo "test data container" > sample.logroot@d2f50439edfd:/dbdata# ls -l sample.log -rw-r--r--. 1 root root 20 Apr 28 16:18 sample.logroot@d2f50439edfd:/dbdata# cat sample.log test data containerroot@d2f50439edfd:/dbdata# md5sum sample.log 36e654d6c7720c5d99e5ee3792174c8c  sample.logroot@d2f50439edfd:/dbdata# [root@CentOS7 ~]# [root@CentOS7 ~]# [root@CentOS7 ~]# [root@CentOS7 ~]# docker attach test-data-container-2root@7a6ff0476aa2:/# root@7a6ff0476aa2:/# cd /dbdata/root@7a6ff0476aa2:/dbdata# root@7a6ff0476aa2:/dbdata# ls -l sample.log -rw-r--r--. 1 root root 20 Apr 28 16:18 sample.logroot@7a6ff0476aa2:/dbdata# cat sample.log test data containerroot@7a6ff0476aa2:/dbdata# md5sum sample.log 36e654d6c7720c5d99e5ee3792174c8c  sample.logroot@7a6ff0476aa2:/dbdata# [root@CentOS7 ~]# [root@CentOS7 ~]# 
原创粉丝点击