1. 程式人生 > >基於dockerfile構建javaweb環境

基於dockerfile構建javaweb環境

前言

接上篇阿里雲ECS - 使用Docker搭建Java Web執行環境
上篇文章雖然成功搭建了java web執行環境,但操作起來比較繁瑣,只能算一次docker的初體驗,本篇文章會使用dockerfile模板化的方式快速構建javaweb環境

操作環境

  • 伺服器:阿里雲ECS
  • 作業系統:CentOS 7.4 64位

準備條件

  • dockerfile指令(ps.會在下文簡單說明一下),可參考:Dockerfile指令詳解
  • 宿主機內或pull的映象檔案中已包含java和tomcat的安裝包
  • 關於映象檔案,可以去DaoCloud映象市場下載,也可以自己打包好映象檔案上傳到阿里雲映象倉庫中

操作步驟

1、 建立dockerfile檔案

# 說明該映象以哪個映象為基礎
# FROM  <image> 或 FROM <image>:<tag>
FROM daocloud.io/library/centos:latest

# 構建者的基本資訊
# MAINTAINER author's name mailaddress
MAINTAINER wufeee

# 啟動容器時進入的工作目錄
# 用於設定Dockerfile中的RUN、CMD和ENTRYPOINT指令執行命令的工作目錄(預設為/目錄)
WORKDIR /mnt

# 修改容器時區為東八區
RUN rm -rf /etc/localtime && \ ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 拷貝本地檔案到映象中 ADD ./jdk-8u171-linux-x64.tar.gz /mnt/ ADD ./apache-tomcat-8.5.31.tar.gz /mnt/ RUN mv jdk1.8.0_171 jdk8 && \ mv apache-tomcat-8.5.31 tomcat8 # 配置java與tomcat環境變數 ENV JAVA_HOME /mnt/jdk8 ENV JRE_HOME
$JAVA_HOME/jre ENV CLASSPATH .:$JAVA_HOME/lib:$JRE_HOME/lib ENV PATH $PATH:$JAVA_HOME/bin ENV CATALINA_HOME /mnt/tomcat8 #開啟內部服務埠 EXPOSE 8080 #啟動tomcat伺服器 CMD ["/mnt/tomcat8/bin/catalina.sh","run"] && tail -f /mnt/tomcat8/bin/logs/catalina.out

2、執行dockerfile檔案構建映象

docker build -t wf/javaweb:0.1 .

這裡寫圖片描述

引數說明:

docker build -t [name] .
- t:定義構建的映象的名稱
- .:指定Dockerfile檔案在當前目錄下

【延伸】將構建好的映象上傳到阿里雲映象倉庫中(前提應該是要有阿里雲帳號和雲伺服器)容器映象服務地址
- 建立名稱空間
- 建立映象倉庫(建立完映象倉庫後點擊管理會有上傳和下載映象的操作指南)
這裡寫圖片描述

3、 啟動容器

docker run -d -p 8080:8080 a71f488a5055

引數說明:

- -d:表示以“守護模式”執行,此時 Tomcat 控制檯不會出現在輸出終端上
- -p:表示宿主機與容器的埠對映,此時將容器內部的 8080 埠對映為宿主機的 8080 埠,這樣就向外界暴露了 8080 埠,可通過 Docker 網橋來訪問容器內部的 8080 埠了

4、 關於dockerfile中指令的說明

主要是自己在建立dockerfile檔案時遇到的一些坑點的記錄
(1) ADD和COPY的區別

模板:ADD <src>... <dest>
例子:ADD ./jdk-8u171-linux-x64.tar.gz /mnt/ 
  • 將檔案src拷貝到容器的檔案系統對應的路徑dest
  • src必須是在Dockerfile的相對路徑下,以例子說明,jdk和tomcat和dockerfile在一個目錄下
  • dest只能是容器中的絕對路徑。如果路徑不存在則會自動級聯建立,根據你的需要是裡是否需要反斜槓/,習慣使用/結尾從而避免被當成檔案
  • 拷貝後如果是壓縮檔案會自動解壓

    模板:COPY …
    例子:COPY ./jdk-8u171-linux-x64.tar.gz /mnt/

  • 預發功能與ADD相同

  • 不支援src是遠端URL、自動解壓兩個功能

(2)RUN
- 執行run的時候若不想使用絕對路徑的方式,需在dockerfile檔案中指定啟動容器時進入的工作目錄

例子:WORKDIR /mnt

(3)在Docker daemon模式下,無論是使用ENTRYPOINT(與CMD類似,只是不能被重寫和覆蓋),還是CMD,最後的命令,一定要是當前程序需要一直執行的,才能夠防容器退出

例子:CMD ["/mnt/tomcat8/bin/catalina.sh","run"] 
&& tail -f /mnt/tomcat8/bin/logs/catalina.out*