讓容器裏面的某個目錄綁定到宿主機的某個目錄。html
容器寫數據時,寫到/下的數據,最後被寫到了容器的可讀寫層;寫到/data下的數據,最後被寫到了宿主機的/data目錄下了。以下圖:mysql
下圖的宿主機A,B,C是文件系統NFS的客戶端。宿主機A的文件目錄A,宿主機B的文件目錄B,宿主機C的文件目錄C,都是訪問NFS上的同一個目錄。nginx
使用docker存儲卷功能,讓宿主機A上運行的mysql容器,產生的數據目錄,綁定到宿主機A的文件目錄A,因此當由mysql容器產生的數據,就存放到了宿主機A的文件目錄A上了,進而就存到到了NFS上了。c++
當宿主機A上運行的mysql容器被刪除了,數據仍是在的,存在NFS上了。sql
當在宿主機B或者宿主機C上運行剛纔那個mysql容器,也讓產生的數據目錄,綁定到宿主機B或者宿主機C,能夠從NFS上能夠拿到數據,因此數據和在宿主機A上運行是同樣的。docker
這就給運維提供了極大的便利,容器能夠隨便部署到集羣裏的任何機器上了。shell
能夠用【存儲】,【狀態】來劃分4個象限。tomcat
nginx只做爲反向代理服務器,因此它沒有狀態也不須要存儲。服務器
-v
選項。bind mount volume:手動指定宿主機目錄。微信
命令:docker run -v HOSTDIR:CONTAINERDIR
# docker run --name b1 -it --rm -v /tmp/html:/data busybox:latest
docker-managed volume:由docker本身決定宿主機目錄。
命令:docker run -v CONTAINERDIR
# docker run --name b1 -it --rm -v /data busybox:latest
咱們不知道被關聯的宿主機的目錄是啥,使用docker inspect b1
,找到【Mount】裏的【Source】,就能夠看到了。可是你下次再啓動容器是,關聯的目錄也會變化。
也能夠看到Volumes。
# docker inspect b1 "Mounts": [ { "Type": "volume", "Name": "2eeb1bdee5c83a304d101a98b06430af3aff27a578ad38c7e23423f317db9063", "Source": "/var/lib/docker/volumes/2eeb1bdee5c83a304d101a98b06430af3aff27a578ad38c7e23423f317db9063/_data", "Destination": "/data", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], "Volumes": { "/data": {} },
使用:docker inspect -f {{.Mounts}} b1
,也能夠看到。注意大括號裏的key是區分大小寫的。
讓2個容器綁定到宿主機的同一個目錄,以達到2個容器的通訊。
# docker run --name b1 -it --rm -v /tmp/html:/data busybox:latest # docker run --name b2 -it --rm -v /tmp/html:/data2 busybox:latest
2個容器都綁定到了宿主機的/tmp/html上了。
當另外一個容器想和某個容器綁定到宿主機的同一個目錄時,可是又不知道宿主機的目錄,這時,可讓這個容器直接使用某個容器的volume,這樣一來,就不用知道宿主機的目錄了。
命令:docker run --volumes-from b1
# docker run --name b2 -it --rm --volumes-from b1 busybox:latest
volume和joined containers(參考:二,host章節 )一塊兒使用,建立nginx容器和tomcat容器,共享base容器的網絡空間和volume。
找一個容器,做爲基礎,它使命是:
# docker run --name base -it -v /tmp/html:/data busybox:latest
啓動nginx容器:--network container:base --volumes-from base
# docker run --name nginx -it --rm --network container:base --volumes-from base busybox:latest
啓動tomcat容器:--network container:base --volumes-from base
# docker run --name tomcat -it --rm --network container:base --volumes-from base busybox:latest