Docker 構建 Java Web 開發環境——使用Dockerfile(二)

gary-liu發表於2016-07-30

上篇文章 Docker 構建 Java Web 開發環境(一)使用 docker commit 命令,直接在容器中操作(安裝軟體及配置檔案等),比較簡單直觀;這篇文章使用 docker build命令和 Dockerfile 檔案,模板化映象構建過程,推薦使用這種方法,這裡需要了解下 DockerFile 的語法和相關命令的意思。

準備工作

Dockerfile指令學習: Dockerfile指令詳解,這篇文章的參考文獻很好。

Dockerfile語法線上檢查工具:http://dockerfile-linter.com/(連結已失效)

建立Dockerfile檔案

可以自己製作基礎映象,或者從倉庫中獲取基礎映象,然後在其基礎上製作新的映象,我是用公司倉庫現有的 java8 映象基礎上開始的。

docker pull XXX/jdk:8    //獲取jdk8映象

mkdir -p docker/java8    //建立目錄準備製作映象,將tomcat8壓縮包放到該目錄下
vi Dockerfile           //建立Dockerfile檔案

Dockerfile檔案內容如下

FROM XXX/jdk:8
#RUN yum -y update
ENV JAVA_HOME /apps/svr/jdk    
ADD apache-tomcat-8.0.32.tar.gz /usr/local/  
RUN mv apache-tomcat-8.0.32 tomcat8
EXPOSE 8080
RUN chmod u+x /usr/local/tomcat8/bin/*.sh  
CMD /usr/local/tomcat8/bin/catalina.sh start  

Dockerfile注意:CMD 指令在 Dockerfile 中只能使用一次,如果有多個,則只有最後一個會生效。CMD 會在 啟動容器 的時候 執行生效,build 時不執行,而 RUN 只是在 構建映象 的時候 執行生效,後續映象構建完成之後,啟動容器就與 RUN 無關了。因為映象是分層的,一個 ENV 只會新增一層映象,而三個 ENV 則會新增三層映象,為了提升效率推薦使用一個 ENV 定義多個變數。可以使用上面的線上工具檢查下。

建立映象

在剛才建的目錄下執行命令

docker build -t liu/jdk8-tomcat8:1.0 . //構建映象liu/jdk8-tomcat8:1.0
docker images  //可以看到剛建的liu/jdk8-tomcat8映象1.0版本
docker run -d -p 8080:8080 liu/jdk8-tomcat8:1.0  //啟動容器

啟動容器後,在瀏覽器上訪問 http://localhost:8080 看看是否成功

也可以先這樣啟動容器 docker run -it -p 8080:8080 liu/jdk8-tomcat8:1.0 /bin/bash看看是否有錯誤

執行專案

由於專案在 ide 中經常修改,所以可以將打包專案的目錄直接掛載到 tomcat 的 webapps 目錄下面,啟動容器是就會自動啟動應用

docker run -d -p 8080:8080 -v /Users/gary/PracticeCode/monitor/target:/usr/local/tomcat8/webapps liu/jdk8-tomcat8:1.0

常用命令

docker kill $(docker ps -a -q)   //殺死所有正在執行的容器
docker rm $(docker ps -a -q)    //刪除所有已經停止的容器
docker rmi $(docker images -q)  //刪除所有映象
//如果感覺命令太長,可以在 ./bash_profile中給這些命令自定義別名

docker start CONTAINER [CONTAINER...] //執行一個或多個停止的容器
docker stop CONTAINER [CONTAINER...] //停掉一個或多個執行的容器 -t 選項可指定超時時間
docker kill [OPTIONS] CONTAINER [CONTAINER...] //預設 kill 傳送 SIGKILL 訊號 -s 可以指定傳送 kill 訊號型別
docker restart [OPTIONS] CONTAINER [CONTAINER...] //重啟一個或多個執行的容器 
docker pause CONTAINER  //暫停一個容器,方便 commit
docker unpause CONTAINER //繼續暫停的容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]  //移除一個或多個容器 -f強制刪除

[參考]
從零開始使用Docker構建Java Web開發執行環境

相關文章