1. 程式人生 > >使用docker部署第一個war應用

使用docker部署第一個war應用

  隨著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埠就可以啦。還有一些細節問題 比如列印日誌的時區不對等