Docker從入門到精通(七)——容器數據共享
- 2021 年 12 月 21 日
- 筆記
- docker, Docker從入門到精通
什麼是容器數據共享?簡單來說就是容器與容器之間數據共享,容器與宿主機數據共享。
1、為什麼需要數據共享?
①、數據持久化
比如我們有一個MySQL集群,通過容器啟動,那麼項目運行過程中的數據是保存在容器中的,假設容器被刪除了,數據就丟失了,如果沒有數據共享,那你就只能刪庫跑路了。
而有了數據共享,你就可以打通容器和宿主機的數據聯通,將容器中的數據同步到宿主機,即使容器刪除了,數據還是在本地的。
②、同步內容
前面的教程,我們每次要修改容器裡面的內容,都得進入到容器中,而實際生產環境容器都是有很多個的,一個個修改,大家不用幹活了。
那麼你想不想在本地修改了,直接同步到容器?想就接著往下看。
2、命令掛載
docker run -it -v 宿主機目錄:容器目錄
比如我們將宿主機下面的 /home/webapps 目錄掛載到Tomcat容器的 /usr/local/tomcat/webapps
docker run -it -v /home/webapps:/usr/local/tomcat/webapps -p 8083:8080 –name tomcat03 tomcat:latest /bin/bash
我們在容器的 /usr/local/tomcat/webapps 目錄下新建 a.txt 文件,會在宿主機 /home/webapps 目錄下找到這個文件;
同理在宿主機的 /home/webapps 目錄下新建 b.txt 文件,你會在容器的 /usr/local/tomcat/webapps 目錄下也能找到。
這樣就完成了宿主機和容器文件目錄的同步操作。
①、即使容器停止(不是刪掉),宿主機掛載目錄變動了,再次啟動容器,宿主機改動還是能夠同步到容器的。
②、容器刪掉,宿主機掛載目錄不會被刪掉。
3、檢查掛載是否成功
docker inspect 容器id
4、匿名掛載和具名掛載
4.1 匿名掛載
docker run -v 容器內路徑
比如給一個Tomcat容器匿名掛載:
docker run -d -P -v /usr/local/tomcat/webapps tomcat:8.0
然後通過 docker inspect 容器id,查看掛載情況:
Name 屬性為一長串數字的一般都是匿名掛載,可以到下面的Source屬性指定的目錄找到宿主機掛載目錄。
4.2 具名掛載
docker run -v 卷名:容器內路徑
指定Tomcat掛載名稱為 tomcatVolumeUrl
docker run -d -P -v tomcatVolumeUrl:/usr/local/tomcat/webapps tomcat:8.0
同樣通過 docker inspect 容器id查看:
5、共享容器進行掛載
大家有沒有發現一個問題,通過上面的命令進行數據共享,如果我們有多個容器,都需要掛載一個目錄,但是掛載過程中,有一個容器命令目錄寫錯了,那就會造成容器數據不同步,如何解決這個問題呢?
答案就是創建一個共享容器,創建共享容器的同時進行目錄掛載,然後別的容器和這個共享容器關聯即可。
實例演示:
①、宿主機創建目錄
我們在 /home 下創建 /share_volume 目錄,然後在這個目錄下新建 index.html 文件,裡面就一句 hello docker!!!。
②、創建共享容器
docker create –name tomcat_share -v /home/share_volume:/usr/local/tomcat/webapps tomcat:latest /bin/true
③、創建實際容器
創建的同時指定和共享容器關聯。
docker run -d -p 8081:8080 –volumes-from tomcat_share –name tomcat01 -d tomcat
docker run -d -p 8082:8080 –volumes-from tomcat_share –name tomcat02 -d tomcat
上面啟動了兩個容器,會發現更改宿主機的/home/share_volume 目錄內容,兩個容器的/usr/local/tomcat/webapps 目錄內容都會改變。