volume: Docker管理宿主機文件系統的一部分(/var/lib/docker/volumes)
bind mounts:可以存儲在宿主機系統的任意位置
tmpfs mounts:掛載存儲在宿主機系統的內存中,不會寫入宿主機的文件系統
voulume 指定docker 掛載區域
bind 是宿主機任意文件系統
tmpfs 是臨時掛載 放在內存
volume 創建數據卷
創建volume數據卷:docker volume create for_nginx
查看當前所有數據卷信息:docker volume ls
上面一大堆名字為很長字符的數據卷為匿名數據卷,是因為之前創建容器的時候沒有手動創建數據卷進行了文件掛載,Docker就會自動創建匿名數據卷。
啟動容器並指定數據卷:docker run -d -p 80:80 --mount type=volume , source=for_nginx,target=/usr/share/nginx/html nginx
可以查看下容器具體信息: docker inspect (容器id或者名稱)
可以cd 到目錄下 容器以及掛載到宿主機了
我們在宿主機數據卷里新增一個a . html
進入容器內部查看是否也增加了a.html文件:docker exec -it f7adebee03c2 /bin/bash
瀏覽器IP/a. html可以直接訪間到頁面,證明數據卷掛載成功
如果強制刪除容器后,數據卷不會被刪除,還是會保存在宿主機docker/volumes路徑下
bing mounts (綁定數據卷)
bind mounts可以將宿主機任意目錄掛載到容器內
將宿主機/opt目錄掛載到容器內:docker run -d -p 80:80 --mounttype=bind , source=/opt ,target=/usr/share/nginx/html nginx
進入容器查看nginx默認html頁面:docker exec -it df4a184680be /bin/bash
發現並沒有nginx默認的index.html和50.html頁面,但瀏覽器可以正常顯示Welcome tonginx!
注。如果你使用Bind mounts掛載宿主機目錄到一個容器中的非空目錄,那么此容器中的非空目錄中的文件會被隱藏,容器訪間這個目錄時能夠訪間到的文件均來自於宿主機目錄。
三種場景
volumes:
多個運行容器間共享數據
當Docker主機不確保具有給定的目錄或文件
備份、恢復、或將數據從一個Docker主機遷移到另一個Docker主機時
bind mount:
主機與容器共享配置文件(Docker默認情況下通過這種方式為容器提供DNS解析,通過將/etc/resolv .conf掛載到容器中)
共享源代碼或build artifacts(比如將Maven的target/目錄掛載到容器中,每次在Docker主機中build Maven工程時,容器能夠訪間到那些rebuilt artifacts)
當docker主機中的文件或目錄結構和容器需要的一致時
tmpfs mount:
既不想將數據存於主機,又不想存於容器中時(這可以是出於安全的考慮,或當應用需要寫大量非持久性的狀態數據時為了保護容器的性能)。
容器間通信方式 1 link
不需要用ip直接用容器名(服務名)ping
docker exec -it tomcat02 ping tomcat01
I
上面的無法ping通!
docker run -d -p --name tomcat03 --link tomcat02 tomcatdocker exec -it tomcat03 ping tomcat02
此時就可以ping同通
原理:
docker exec -it tomcat83 cat /etc/hosts
總結:
--link就是在hosts配置中增加——個映射
docker network ls docker 默認 bridge 、host(共享網絡) 還有自定義
用於2個容器互通 如果更多 需要加入橋接
docker run -itd --name tomcat01 --net bridge tomcat
如下三個容器橋接的同一個網絡
自建的docker 網絡 默認就是橋接
docker network create mynet
來是三個測試一下
一般自定義網絡 可以相互通信
c1 聯通b1 不同網絡之間怎么聯通 如下
docker network connect mynet tomcat88
不同網絡下的容器也能互相連通,tomcat00是其他網絡下的容器