docker使用的一些需要注意事項


1、程序需要前台運行

      程序必須前台執行,如果是java進程的話  不要有nohup   或者使用service的方式進行后台運行

      否則可能會出現頻繁啟動應用的問題

      原因就是docker只能管理運行中的鏡像的一個進程(所以沒有特殊需要不要一個鏡像執行后出現兩個進行的現象,盡量使用k8s的pod來解決)

2、日志要前台打印

      日志直接console前台輸出即可,docker會自動收集stdout輸出的日志。不要存在打兩份日志的設置,比如一份file,一份console等。

3、配置文件最好放在鏡像內或遠程可讀取,非必要不要進行卷掛載目錄進行讀取

      有些程序的配置文件是外置的,運行包和配置文件沒有在一個執行包中。

      如果有以上情況可以將配置文件和運行包都包含在鏡像當中。

      如果有些配置文件需要在不同的環境下做出修改或更換,就需要對應用程序進行分別打鏡像或者改造一下程序,使其只是遠程獲取配置文件。分別打鏡像不太符合整個發布流程,因為分別打鏡像包中間可能會有差異,造成生產和開發測試不同。

      還有一種方法就是使用k8s的configmap的服務來解決對應讀取文件的問題。

4、數據卷的使用

      每個容器運行之后不管你有沒有顯示的指定創建數據卷,都會有一個臨時卷的存在,來存儲一些臨時生成的文件

      這些臨時文件會隨着容器的生命周期而變化

      如果你直接指定創建了數據卷,一定要創建在共享存儲里面

      否則會出現容器漂移之后讀不到數據的情況

      這種服務就叫做“有狀態”的服務,一般我們的服務要做到“無狀態”的

      如果你的服務是有狀態的,可以借助k8s的statuefulset來實現,包括啟動順序和給服務編號等操作。

5、網絡相關的注意事項(不要有創建網絡相關的操作)

      (我們幾乎用不到)

      要讓docker內服務識別正確的網卡

6、dockerfile

      這里我定義了一個springboot微服務對應的dockerfile文件用來打鏡像包,不管你現在用什么方式最后本質上都是使用 dockerfile來打鏡像的

      (如果我們的上線流程不是一個人完成,那么不建議使用maven插件的形式進行打鏡像包,因為運維或者測試人員很可能不懂你的maven文件也不能修改你的pom配置,這樣可能會給后期維護造成麻煩。dockerfile是唯一知道生成鏡像依據的文件,可以使用版本控制進行管理隨着你的應用進行升級等。鏡像是一個黑盒子可以在docker文件系統中使用它,但是他不是一個獨立的文件。)

   
FROM com.cn/java:8-jdk-alpine-asla-shanghai-1-skyagent-3
VOLUME /tmp
ADD springcloud-zjs-example-mysql-0.0.1.jar app.jar
EXPOSE 11005
ENV JAVA_OPTS="" AGENT_SERVICE_NAME="default" AGENT_COLLECTOR_ADDRESS="10.10.6.79:11800"
ENTRYPOINT java -javaagent:/usr/local/skyagent/skywalking-agent.jar=agent.service_name=${AGENT_SERVICE_NAME},collector.backend_service=${AGENT_COLLECTOR_ADDRESS} ${JAVA_OPTS} -jar /app.jar

 

       下面的鏈接是對上面文件的解釋

     https://github.com/zygfengyuwuzu/docker-miscellaneous

       這個dockerfile中設置了三個參數

              JAVA_OPTS是jdk的參數,這個參數可以自己設置內存等jvm相關的優化

              AGENT_SERVICE_NAME 是設置skywalking的名稱

              AGENT_COLLECTOR_ADDRESS 設置skywalking數據傳輸的地址

             SpringBoot項目中的所有可配置項都是可調參數,不用特殊指定。

        如果你不需要skywalking進行監控最后一句可以修改成下面這樣,只保留jdk參數

        ENTRYPOINT java ${JAVA_OPTS} -jar /app.jar

7、打鏡像的一些問題

      打包的時候將 dockerfile和jar包最好放在同一路徑下

      這樣是比較容易指定要打進鏡像中 文件的路徑

      不容易出錯和誤將不需要文件打進鏡像的可能的

      (可以將需要打進鏡像的文件都放在一個目錄文件夾中或者和dockerfile相同目錄)

       打鏡像包最好使用一個服務器進行打包和上傳,因為多次生成鏡像本地會有緩存文件使用會非常快

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

       對於怎么樣實現集成自動化可以參考如下博客(這個博客是jenkins與docker swarm集成的例子,可以將swarm換成k8s,對應的插件換一下)

    https://www.cnblogs.com/zhyg/p/7845612.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM