使用docker部署第一個war應用
阿新 • • 發佈:2018-12-26
隨著docker等容器技術的成熟,使得dev-ops的開發理念得到落實。公司內部提供的容器都是封裝好的,於是決定嘗試自己在docker上部署第一個應用來練習練習,還是有不少坑的。前提是docker已經在本地安裝了,具體安裝步驟可以上官網檢視。
1、拉取最新的tomcat映象到本地
sudo docker pull tomcat
2、基於Dockerfile建立映象檔案
dockerfile可以幫助我們建立自定義的映象,本文比較簡單直接基於最新的tomcat映象,當然tomcat映象也可以自定義(tomcat版本、jdk版本)。
新建Dockerfile檔案,並將需要部署的war包放在相同資料夾下。
Dockerfile檔案內容如下:
FROM tomcat #基礎映象
MAINTAINER "test <yanyuan904@163.com>" # 套路
ENV DIR_WEBAPP /usr/local/tomcat/webapps/ # 定義變數、後續會使用 ,具體路徑可以先啟動容器然後進入進行檢視
RUN rm -rf $DIR_WEBAPP/* #刪除webapp下所有檔案,因為當前應用作為根應用
ADD virtualShop-man.war $DIR_WEBAPP/ROOT.war
RUN unzip $DIR_WEBAPP/ROOT.war -d $DIR_WEBAPP /ROOT/
CMD ["catalina.sh", "run"]
構建映象檔案:
sudo docker build -t hulk-tomcat .
執行成功後本地會多出一個映象
3、執行映象
sudo docker run -d -p 8888:8080 hulk-tomcat
容器啟動正常,但是應用報錯了。恩,第一次哪能這麼順利。檢視日誌是差相關host配置。配置host有多種方式,啟動時配置或者修改容器配置(不推薦),這裡介紹通過與主機共享host檔案的方式:
(停止剛啟動的容器並刪除)
sudo docker run -v /etc/hosts:/etc/hosts -d -p 8888:8080 hulk-tomcat
容器啟動之後發現應用還是報錯了: ??: Name or service not known(??就是容器的id)。在容器裡執行 hostname也會提示這個錯誤。。這是因為沒有設定容器hostname,預設就使用了容器id 。
sudo docker run -v /etc/hosts:/etc/hosts -h ubuntu -d -p 8888:8080 hulk-tomcat
給容器hostname命名為ubuntu ,因為宿主機器叫這個然後hosts檔案有ubuntu的配置(共享host)。
啟動正常可以訪問!!!
恩,接下來就是nginx相關的配置了,監聽8888埠就可以啦。還有一些細節問題 比如列印日誌的時區不對等