041、如何共享資料(2019-03-04 週一)

三角形發表於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
 
 

相關文章