Docker之DockerFile構建自定義Tomcat
目標:開局一個centos鏡像,利用本地已有的jdk和tomcat壓縮包,構建出一個tomcat鏡像,同時通過資料掛載,可以在本地發布專案以及查看專案日志,而不用每次都進去容器里面操作,
最終目錄結構

1、創建目錄
mkdir /root/test/docker -p
2、切換到該目錄下
cd /root/test/docker
3、把jdk和tomcat的壓縮包拷貝到說明創建的docker目錄下
我這里的是這兩個壓縮包
jdk-8u241-linux-x64.tar.gz、
apache-tomcat-9.0.43.tar.gz
4、撰寫dockerFile檔案
vim diyDocker
內容為:
FROM centos #基于哪個鏡像
MAINTAINER luanbu/diytomcat:v1<1905216170@foxmail.com> #作者資訊
ENV MYPATH /usr/local #定義一個路徑 環境變數
WORKDIR $MYPATH #切換到該目錄下
ADD jdk-8u241-linux-x64.tar.gz ./ #ADD目錄,拷貝并解壓到 當前目錄下,即/usr/local目錄,
ADD apache-tomcat-9.0.43.tar.gz ./ #注意和COPY命令區分開,COPY是單純拷貝,而ADD是拷貝并解壓
ENV JAVA_HOME /usr/local/jdk1.8.0_241 #設定jdk所需的變數
ENV CLASSPATH .:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/tools.jar:${JAVA_HOME}/lib/dt.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.43 #設定tomcat所需的變數(方便直接使用tomcat的bin目錄下的命令)
ENV PATH $PATH:${JAVA_HOME}/bin:${CATALINA_HOME}/bin #將jdk和tomcat的變數追加到環境變數中
EXPOSE 8080
#CMD 在【docker run 鏡像】 的時候,會執行CMD中的命令,這里的startup.sh是解壓后tomcat的bin目錄下的啟動檔案,也就是下面目錄的作用是 在啟動容器的時候,同時啟動tomcat,而且通過tail -f讓centos阻塞住,不會因沒有任務所需執行而導致centos剛啟動后就停止了,
CMD startup.sh && tail -f /usr/local/apache-tomcat-9.0.43/logs/catalina.out
注意將CMD、RUN、ENTRYPOINT 三個命令區分開:
RUN:在構建生成鏡像的時候執行,
CMD:在docker run的時候執行,而且CMD只會執行一次,如果有多條CMD,只會執行最后一條CMD命令,我們在docker run中有時候也會用到 /bin/bash,這個也屬于CMD命令,也就是如果你在docker riun的時候,寫上/bin/bash,就會導致上面 startup.sh && tail -f /usr/local/apache-tomcat-9.0.43/logs/catalina.out 命令失效,最終導致tomcat沒有啟動上來,
ENTRYPOINT:ENTRPPOINT命令和CMD命令的區別就是:CMD如果是多條,那么會出現覆寫,即只執行最后一條CMD命令,而ENTRYPOINT是追加形式,如 在構建檔案中寫 ENTRYPOINT ls -a / ,然后再docker run的時候又加上 -l引數,那么ENTRYPOINT的最終命令就是 ls -a / -l,而如果最初是使用CMD ls -a /,然后再docker run的時候又加上 -l引數,那么最終效果就是 -l,此時啟動容器就會報錯,因為-l不是命令,
5、構建鏡像
docker build -f diyDockerFile -t jxf/tomcat:v1
-f是指定檔案
-t是指定目標檔案, 目標鏡像名稱:tag
構建程序:


6、查看鏡像

7、創建 資料卷掛載時,所指定的本地檔案
mkdir tomcatData'
cd tomcatData
mkdir logs #用于存放tomcat1的日志檔案
mkdir test #專案名稱為test,到時放test中放我們的專案

web.xml和indexjsp的內容:
web.xm內容
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
</web-app>
index.jsp內容
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<h2>自定義tomcat鏡像</h2>
通過資料卷方式,讓本地的webapps 和 logs 掛載到 容器中tomcat的webapps和logs
即之后就可以在本地上發布專案或查看日志,而不用跑到 docker容器內進行操作
<% System.out.println("........................hello dockcer..............................."); %>
</body>
</html>
8、啟動容器
docker run -itd -p 8080:8080 -v /root/test/docker/tomcatData/test:/usr/local/apache-tomcat-9.0.43/webapps/test -v /root/test/docker/tomcatData/logs:/usr/local/apache-tomcat-9.0.43/logs aad63bccb06c
9、進入容器
docker exec -it 2b54cd49b3bfbe91c9876fef64817a35a4fda4d53d268e8daa44833c69498596 /bin/bash
查看容器內的環境變數


10、測驗


打開另外一個終端查看本地日志,

在本地目錄下查看容器內tomcat所產生的日志檔案

最后:其實最開始應該是掛載webapps的,這樣應該就可以往webapps里發布多個專案,我上面是掛載日志和單個專案,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/259038.html
標籤:其他
