docker(2) Dockerfile編寫運行tomcat9

前言

上一章介紹了docker的背景,並執行了一個docker鏡像,運行了容器,但是容器的鏡像是如何實現的呢,簡單介紹一下dockerfile。基於tomcat的war發佈爲例,其他jar部署同理,只是啓動的方式差別。爲了多使用dockerfile命令,使用ubuntu標準鏡像爲基鏡像。

dockerfile

系統鏡像以及容器運行的微系統基本上都是root,所以一般不存在權限問題。

Dockerfile

FROM ubuntu:latest     

#切換鏡像目錄,進入/opt目錄
WORKDIR /opt

#設置時區,創建jdk8目錄與tomcat9目錄,這是鏡像上增加
RUN echo 'Asia/Shanghai' >/etc/timezone && mkdir jdk8 && mkdir tomcat9

#將宿主機的jdk8拷貝到鏡像去,也可以使用COPY
ADD jdk1.8.0_251 /opt/jdk8/
#將宿主機的tomcat9拷貝
ADD apache-tomcat-9.0.30 /opt/tomcat9/
#拷貝war
COPY ROOT.war /opt/tomcat9/webapps

#設置環境變量
ENV JAVA_HOME=/opt/jdk8
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH=/sbin:$JAVA_HOME/bin:$PATH

ENV CATALINA_HOME /opt/tomcat9
ENV PATH $CATALINA_HOME/bin:$PATH

#公開端口
EXPOSE 8080
#設置啓動命令
ENTRYPOINT ["/opt/tomcat9/bin/catalina.sh","run","> /opt/tomcat9/logs/catalina.out"]

保存上面的文本命名爲Dockerfile,記得首字母大寫,拷貝到JDK8 tomcat9的目錄

確保在本機上路徑與上面的宿主機Dockerfile的路徑一致。

時區設置

構建docker鏡像第一步要確認時區,不然時間不正確,會對業務,日誌等造成極度的影響。首先運行ubuntu鏡像,docker exec

發現沒有,0區,格林威治時區,顯然我不在這。使用

echo ‘Asia/Shanghai’ >/etc/timezone

即可設置好運行的時區,JDK就能識別正常的時區了

RUN指令

RUN指令執行時,注意:每執行RUN指令docker鏡像就會加深一層,體積也會增大,所以儘量將多個指令通過 && 連接執行,或者 ; \ 同步執行。筆者這裏使用了&&連接符。

其他指令

  1. 上面沒有設置JVM參數,是因爲JVM參數是變化的,生產測試不一樣,不能直接在鏡像生成,需要運行時外部傳入
  2. 其中ADD其實有特殊含義,在壓縮包的ADD時會自動解壓,拷貝JDK與tomcat推薦使用,如果拷貝war或者jar推薦使用COPY替代,含義更明確。
  3. EXPOSE是必須的,意思是開放容器的8080端口
  4. ENTRYPOINT是執行指令,可以使用CMD,兩者用法略有區別

編譯

在cli命令界面執行

docker build . -t tomcat9:v1.0

編譯即可生成鏡像
在這裏插入圖片描述
當然docker的鏡像這裏手工執行的,一般會集成CI CD工具配合K8S管理自動發佈管理。

運行

docker run -d --name tomcat9-demo -p 8080:8080 -v ~/logs:/opt/tomcat9/logs tomcat9:v1.0

在這裏插入圖片描述
訪問http://localhost:8080/index.html

總結

dockerfile的文件編寫,官方有詳細的教程,命令都有詳細的說明:官方文檔
Dockerfile只是鏡像的製作的基礎,鏡像發佈爲容器還有很多問題要處理,比如:

  1. 容器日誌收集
  2. 容器網絡管理
  3. 容器調度
  4. 容器服務架構
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章