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 ~]#
阅读全文
0 0