本文解決兩個問題:
1.如何在啓動docker的時候將本地目錄掛載到docker運行容器中?
2.如何在生產環境中進行docker的部署?部署前相比於傳統的部署方式有哪些優缺點?
開始:
1.如何在啓動docker的時候將本地目錄掛載到docker運行容器中?
在之前的文章中講到過,連接鏡像的命令爲:
#docker run -i -t -v /root/software/:/mnt/software/ --privileged=true feac5e /bin/bash
而以守護進程的方式啓動命令爲:
#docker run -d -p 58080:8080 --name tomcat1 sdzn.com/tomcat:0.1 /root/run.sh
通過對比可以發現,docker在啓動的最後是用IMAGE_ID/REPOSITORY:TAG並加上需要在容器中運行的命令結束,前面都是加上各種啓動參數,比如端口映射和目錄映射等。
於是輸入這樣的命令:
#docker run -i -t -v /root/software/:/mnt/software/ --privileged=true -d -p 58080:8080 --name tomcat1 sdzn.com/tomcat:0.1 /root/run.sh
發現容器啓動成功,初步證明加入路徑映射對容器啓動是沒有問題的。但是還無法驗證映射是否成功,加入一個測試項目將其映射到鏡像的tomcat/webapps目錄下進行測試。
我們先停止並刪除容器。
在本地的/root/tomcat/webapps下將ROOT改爲ROOT1,其它項目刪除,我們來做映射然後啓動。
#docker run -i -t -v /root/tomcat/webapps/ROOT1/:/opt/tomcat/webapps/ROOT1/ --privileged=true -d -p 58080:8080 --name tomcat1 sdzn.com/tomcat:0.1 /root/run.sh
我們發現這樣是可以訪問的http://127.0.0.1:58080/ROOT1/
2.如何在生產環境中進行docker的部署?部署前相比於傳統的部署方式有哪些優缺點?
通過上述實驗,我們可以考慮打包這樣一個程序包,包中包含:程序發佈的war包/解壓後的tomcat、鏡像文件、啓動腳本。
基本思路是:tomcat作爲外部路徑引入鏡像中運行,日誌什麼的也是記錄到外部的tomcat中進行運行,每個項目一個鏡像文件,當需要增加容器的時候,直接帶參數多啓動一個容器即可,尤其是對於需要動態擴容的服務來說,非常方便。
但同時有一個疑問,對於docker對外提供的服務來講,如果在啓動的時候端口沒有對外提供映射就比較麻煩,所以在啓動的時候需要有嚴格的部署和端口規劃。
可參考以下的多容器多端口映射方案:
http://blog.csdn.net/meegomeego/article/details/50707621