参考 https://www.cnblogs.com/CloudMan6/p/7163399.html
共享数据是 volume 的关键特性, 本节我们将详细讨论通过 volume 如何在容器和 host 之间, 容器和容器之间共享数据.
容器和 host 共享数据
我们有两种类型的 data volume, 他们均可实现在容器和 host 之间共享数据, 但方式有所区别.
对于 bind mount 是非常明确的: 直接将要共享的目录 mount 到容器
而 docker managed volume 就要麻烦点. 由于 volume 位于 host 中的目录, 是在容器启动时才生成的, 所以需要将共享数据拷贝到 volume 中
1, 使用 docker cp 命令将 host 上的文件复制到容器中
- root@docker-lab:~/041# cat index.HTML
- Docker CP test file
- root@docker-lab:~/041# docker run -d -p 80:80 -v /usr/local/apache2/htdocs httpd
- 6df13e36a3cb2dbc25cd057a208342088b737900629bc30b6ded4c84385b70c1
- root@docker-lab:~/041# curl http://127.0.0.1
- <HTML><body><h1>It works!</h1></body></HTML>
- root@docker-lab:~/041# docker cp index.HTML 6df13e36a3:/usr/local/apache2/htdocs
- root@docker-lab:~/041# curl http://127.0.0.1
- Docker CP test file
2, 使用 Linux cp 命令将文件复制到 host 的 volume 目录
- root@docker-lab:~/041# docker inspect 6df -f '{{.Mounts}}'
- [{
- volume dd24468787a957f848f3d5175be447d7487188eccea27822a17bdf83bad8caef /var/lib/docker/volumes/dd24468787a957f848f3d5175be447d7487188eccea27822a17bdf83bad8caef/_data /usr/local/apache2/htdocs local true
- }]
- root@docker-lab:~/041# cp index.HTML /var/lib/docker/volumes/dd24468787a957f848f3d5175be447d7487188eccea27822a17bdf83bad8caef/_data/index.HTML
容器之间共享数据
第一种方法是将共享数据放在 bind mount 中, 然后将其 mount 到多个容器. 以 httpd 容器为例, 三个 httpd 容器组成 web server 集群, 他们使用相同的 HTML
- root@docker-lab:~/041# pwd
- /root/041
- root@docker-lab:~/041# ls
index.HTML
- root@docker-lab:~/041# cat index.HTML
- Docker CP test file
- root@docker-lab:~/041# docker run --name web01 -d -p 80 -v /root/041:/usr/local/apache2/htdocs httpd
- 742c77ace61b76afa84fea5d389aed28d1a0a2bf37bf7a19b901da9c1fd3060f
- root@docker-lab:~/041# docker run --name web02 -d -p 80 -v /root/041:/usr/local/apache2/htdocs httpd
- 3f6b31d9108df97d68e5e78b197ab024df0c42263992d396919be5898d8d55af
- root@docker-lab:~/041# docker run --name web03 -d -p 80 -v /root/041:/usr/local/apache2/htdocs httpd
- 2ef46e6ccf29ba5c43ccf69041c332fe0a9277f5004596aaa1bf759e669d6b5c
- root@docker-lab:~/041# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 2ef46e6ccf29 httpd "httpd-foreground" 3 seconds ago Up 2 seconds 0.0.0.0:32773->80/tcp web03
- 3f6b31d9108d httpd "httpd-foreground" 9 seconds ago Up 8 seconds 0.0.0.0:32772->80/tcp web02
- 742c77ace61b httpd "httpd-foreground" 14 seconds ago Up 14 seconds 0.0.0.0:32771->80/tcp web01
- root@docker-lab:~/041# curl http://127.0.0.1:32771
- Docker CP test file
- root@docker-lab:~/041# curl http://127.0.0.1:32772
- Docker CP test file
- root@docker-lab:~/041# curl http://127.0.0.1:32773
- Docker CP test file
- root@docker-lab:~/041# echo 'Docker CP test file 2'> index.HTML
- root@docker-lab:~/041# curl http://127.0.0.1:32771
- Docker CP test file 2
- root@docker-lab:~/041# curl http://127.0.0.1:32772
- Docker CP test file 2
- root@docker-lab:~/041# curl http://127.0.0.1:32773
- Docker CP test file 2
来源: http://www.bubuko.com/infodetail-2975254.html