Docker構(gòu)建Maven+Tomcat基礎(chǔ)鏡像的實現(xiàn)
前言
在 Java 編程中,大多數(shù)應(yīng)用都是是基于 Maven 構(gòu)建的,而交付的結(jié)果大多是采用的 Tomcat 的 war 包形式,所以,構(gòu)建一個基于 Maven 和 Tomcat 的基礎(chǔ)鏡像很有必要,不僅能幫助我們提升平時自主實驗研究分析的效率,還可以在一定程度能減少運(yùn)維減少編寫 Dockerfile 的復(fù)雜度,提升整體項目交付效率。
1.創(chuàng)建編譯目錄
mkdir -p build_docker cd build_docker vim Dockerfile
2.編寫 Dockerfile
首先,我們選擇官方維護(hù)的 maven:3.3.3 鏡像作為基礎(chǔ)鏡像,然后,在此基礎(chǔ)上添加 Tomcat 支持。
FROM maven:3.3.3
如果喜歡國內(nèi)倉庫的速度,也可以選擇阿里的 maven:3-jdk-8。
FROM registry.cn-hangzhou.aliyuncs.com/acs/maven:3-jdk-8
其次,設(shè)置 Tomcat 相關(guān)的環(huán)境變量,并添加到系統(tǒng) PATH 變量中,使 Tomcat 的啟動腳本可以在 Shell 中直接訪問。
ENV CATALINA_HOME /usr/local/tomcat ENV PATH $CATALINA_HOME/bin:$PATH RUN mkdir -p "$CATALINA_HOME" WORKDIR $CATALINA_HOME
第三,添加 Tomcat GPG-KEY,用于 Tomcat 下載完后校驗文件是否正確,以下keyid數(shù)據(jù)來自官方 Tomcat-8。
RUN gpg --keyserver pool.sks-keyservers.net --recv-keys \ F22C4FED \ 86867BA6 \ E86E29AC \ 307A10A5 \ 564C17A3 \ 0x7C037D42 \ 0BECE548 \ 5E763BEC \ 2F6059E7 \ 288584E7 \ 4B6FAEFB \ 286BACF1 \ 731FABEE \ 461B342D \ 0D498E23 \ DC3D1B18 \ D63011C7 \ 30480593
第四,設(shè)置 Tomcat 版本變量,構(gòu)建時可以傳入相應(yīng)參數(shù)來更改 Tomcat 版本。因為 maven:3.3.3 鏡像依賴的 Java 版本是 1.8,,所以我們的 Tomcat 版本也選擇 8.X 版本,保持編譯一致性可以最大化 Tomcat 的性能。
這里我們選用最新版:8.5.45
隨后使用 curl 執(zhí)行下載,并驗證后解壓,同時刪除多余的 bat 腳本。(該腳本僅用于 Windows 環(huán)境,在Linux/Mac鏡像中無用)
ENV TOMCAT_VERSION 8.5.45 ENV TOMCAT_TGZ_URL https://www.apache.org/dist/tomcat/tomcat-8/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz RUN set -x \ && curl -fSL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz \ && curl -fSL "$TOMCAT_TGZ_URL.asc" -o tomcat.tar.gz.asc \ && gpg --verify tomcat.tar.gz.asc \ && tar -xvf tomcat.tar.gz --strip-components=1 \ && rm bin/*.bat \ && rm tomcat.tar.gz*
第五,暴露 Tomcat 默認(rèn)的 8080 端口,并指定基于該鏡像的容器啟動時執(zhí)行的腳本,該腳本為 Tomcat 啟動腳本。
EXPOSE 8080 CMD ["catalina.sh", "run"]
3.構(gòu)建鏡像
docker build -t base-maven-tomcat .
到此,完成。
附:完整 Dockerfile 文件
FROM maven:3.3.3 ENV CATALINA_HOME /usr/local/tomcat ENV PATH $CATALINA_HOME/bin:$PATH RUN mkdir -p "$CATALINA_HOME" WORKDIR $CATALINA_HOME RUN gpg --keyserver pool.sks-keyservers.net --recv-keys \ F22C4FED \ 86867BA6 \ E86E29AC \ 307A10A5 \ 564C17A3 \ 0x7C037D42 \ 0BECE548 \ 5E763BEC \ 2F6059E7 \ 288584E7 \ 4B6FAEFB \ 286BACF1 \ 731FABEE \ 461B342D \ 0D498E23 \ DC3D1B18 \ D63011C7 \ 30480593 ENV TOMCAT_VERSION 8.5.45 ENV TOMCAT_TGZ_URL https://www.apache.org/dist/tomcat/tomcat-8/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz RUN set -x \ && curl -fSL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz \ && curl -fSL "$TOMCAT_TGZ_URL.asc" -o tomcat.tar.gz.asc \ && gpg --verify tomcat.tar.gz.asc \ && tar -xvf tomcat.tar.gz --strip-components=1 \ && rm bin/*.bat \ && rm tomcat.tar.gz* EXPOSE 8080 CMD ["catalina.sh", "run"]
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Docker安裝MySQL并使用Navicat連接的操作方法
這篇文章主要介紹了Docker安裝MySQL并使用Navicat連接,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09
docker run 運(yùn)行容器自動結(jié)束的解決
這篇文章主要介紹了docker run 運(yùn)行容器自動結(jié)束的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
如何通過Dockerfile 創(chuàng)建 kali-novnc
這篇文章主要介紹了如何通過Dockerfile 創(chuàng)建 kali-novnc,在Dockerfile所在目錄運(yùn)行相關(guān)命令操作即可完成,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-04-04
docker中使用mysql數(shù)據(jù)庫實現(xiàn)局域網(wǎng)訪問
在本篇內(nèi)容里小編給大家整理了關(guān)于docker中使用mysql數(shù)據(jù)庫實現(xiàn)局域網(wǎng)訪問相關(guān)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2020-03-03

