041、如何共享数据(2019-03-04 周一)

 
共享数据是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
 
 
原文地址:https://www.cnblogs.com/www1707/p/10468949.html