使用Dockerfile創建一個tomcat鏡像,並運行一個簡單war包


docker已經看了有一段時間了,對鏡像和容器也有了一個大致了解,參考書上的例子制作一個tomcat鏡像,並簡單運行一個HelloWorld.war

1.首先下載linux環境的tomcat和jdk,並分別解壓至helloworld目錄

2.新建Dockerfile文件

touch Dockerfile

Dockerfile文件的內容如下: 

 1 FROM ccc7a11d65b1     (這串數字是我已經創建好一個ubuntu鏡像的鏡像id,在這里作為tomcat的基礎鏡像
 2 MAINTAINER hmk
 3 ENV REFRESHED_AT 2018-03-10  (這個環境變量用來表名該鏡像模板的最后更新時間)
 4 
 5 #切換鏡像目錄,進入/usr目錄
 6 WORKDIR /usr
 7 #在/usr/下創建jdk目錄,用來存放jdk文件
 8 RUN mkdir jdk
 9 #在/usr/下創建tomcat目錄,用來存放tomcat
10 RUN mkdir tomcat
11 
12 #將宿主機的jdk目錄下的文件拷至鏡像的/usr/jdk目錄下
13 ADD jdk1.8.0_131 /usr/jdk/
14 #將宿主機的tomcat目錄下的文件拷至鏡像的/usr/tomcat目錄下
15 ADD apache-tomcat-7.0.81 /usr/tomcat/
16 
17 #設置環境變量
18 ENV JAVA_HOME=/usr/jdk
19 ENV JRE_HOME=$JAVA_HOME/jre
20 ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
21 ENV PATH=/sbin:$JAVA_HOME/bin:$PATH
22 
23 #公開端口
24 EXPOSE 8080
25 #設置啟動命令
26 ENTRYPOINT ["/usr/tomcat/bin/catalina.sh","run"]

3.構建鏡像

[root@localhost helloword]# docker build -t jamtur01/tomcat .

成功的話,會有鏡像id顯示

4.使用docker images查看創建好的鏡像

5.通過創建好的鏡像,啟動一個容器

[root@localhost helloword]# docker run -d -p 8080:8080 --name hmk_tomcat jamtur01/tomcat:latest

訪問一下

6.進入容器,看下之前在Dockerfile中寫好命令要創建的tomcat和jdk目錄

[root@localhost helloword]# docker exec -it 480f45dc4c00284690b378c063daf7371719c1cddf0efc2032223bfb318b2076 /bin/bash

 

<============分割線===============>

下面部署一個HelloWorld.war包

1.在helloworld目錄下新建一個webapps目錄,把war包放進去

2.使用-v參數將war包掛載至容器內的 tomcat/webapps目錄

[root@localhost helloword]# docker run -d -p 8080:8080 -v /HMK/helloword/webapps/HelloWorld.war:/usr/tomcat/webapps/HelloWorld.war --name hmk_tomcat jamtur01/tomcat
注意:-v /HMK/helloword/webapps/HelloWorld.war:/usr/tomcat/webapps/HelloWorld.war,這里是掛載的單個文件

 

3.說明下我嘗試的幾種掛載方法

第一次是將宿主機webapps目錄掛載至容器的webapps

[root@localhost helloword]# docker run -d -p 8080:8080 -v /HMK/helloword/webapps:/usr/tomcat/webapps --name hmk_tomcat jamtur01/tomcat

但是后來發現,啟動容器后,容器內的webapps目錄和宿主機一樣了,也就是容器中tomcat/webapps原本的內容被置換為宿主機的webapps內容了(這和我預期的不符)

通過單個文件掛載的話,則只是把這個war包丟進容器中,並沒有影響容器中原本的內容(雖然我知道一般不建議掛載單個文件,但是如何通過掛載目錄來讀取容器外的程序包、配置文件等的方法還沒有找到。。。)

另外掛載單個文件時注意宿主機的路徑是絕對路徑,容器中也是絕對路徑+文件名(也就是說雖然容器中沒有這個war文件,但是我們要假設有,然后映射到宿主機的文件,然后容器就能運行宿主機的war文件了)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM