tomcat9
的映象。tomcat9
之間設定掛載。準備tomcat
壓縮包,因為tomcat
的執行需要JDK,所以也需要JDK8的壓縮包。
如下:
apache-tomcat-9.0.44.tar.gz
jdk-8u11-linux-x64.tar.gz
都上傳到伺服器的/home/mydockerfile/tomcat9
目錄中。
/home/mydockerfile/tomcat9
[root@192 tomcat9]# ll
總用量 166516
-rw-r--r--. 1 root root 11487016 3月 21 00:18 apache-tomcat-9.0.44.tar.gz
-rw-r--r--. 1 root root 159019376 3月 21 00:18 jdk-8u11-linux-x64.tar.gz
建立一個readme.txt
檔案,用於之後的宿主機與容器之間的拷貝。
建立一個Dockerfile檔案,就命名為Dockerfile
。
[root@192 tomcat9]# touch readme.txt
[root@192 tomcat9]# touch Dockerfile
[root@192 tomcat9]# ll
總用量 166516
-rw-r--r--. 1 root root 11487016 3月 21 00:18 apache-tomcat-9.0.44.tar.gz
-rw-r--r--. 1 root root 0 3月 21 00:39 Dockerfile
-rw-r--r--. 1 root root 159019376 3月 21 00:18 jdk-8u11-linux-x64.tar.gz
-rw-r--r--. 1 root root 0 3月 21 00:39 readme.txt
提示:Dockerfile檔案,官方推薦命名為
Dockerfile
,在使用docker build
命令的時候,會自動去尋找這個Dockerfile檔案,就不需要在用-f
引數指定Dockerfile檔案的位置了。
Dockerfile檔案設定內容如下:
FROM centos
MAINTAINER wukong<[email protected]>
# 把宿主機當前上下文的readme.txt拷貝到容器/usr/local/路徑下
# 並把readme.txt檔案重新命名cincontainer.txt檔案
COPY readme.txt /usr/local/cincontainer.txt
# 把宿主機當前上下文的(也就是當前目錄)java與tomcat安裝包新增到容器中
ADD apache-tomcat-9.0.44.tar.gz /usr/local/
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
# 安裝vim編輯器
RUN yum -y install vim
# 設定工作存取時候的MORKDIR路徑,登入DE 落腳點
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 設定java與tomcat環境變數
# 設定java環境
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar # 通過冒號隔開
# 設定tomcat環境
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.44
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.44
# 把上面設定的環境放入到PATH環境變數中
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 容器執行時監聽的埠(暴露埠)
EXPOSE 8080
# 啟動時執行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.44/bin/startup.sh"]
# CMD ["/usr/local/apache-tomcat-9.0.44/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.44/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.44/bin/logs/catalina.out
# && 表示拼接下一條命令,可以無線的拼接。
執行命令:docker build -t diytomcat9 .
# 因為我的Dockerfile檔案的名字為Dockerfile,所以不用-f指定。
[root@192 tomcat9]# docker build -t diytomcat9 .
Sending build context to Docker daemon 170.5MB
Step 1/15 : FROM centos
---> 300e315adb2f
Step 2/15 : MAINTAINER wukong<[email protected]>
---> Running in 221cc10c9504
Removing intermediate container 221cc10c9504
---> 797f5aef897a
Step 3/15 : COPY readme.txt /usr/local/cincontainer.txt
---> 6797005a229e
Step 4/15 : ADD apache-tomcat-9.0.44.tar.gz /usr/local/
---> f4d05cb84de6
Step 5/15 : ADD jdk-8u11-linux-x64.tar.gz /usr/local/
---> 2c18597493ed
Step 6/15 : RUN yum -y install vim
---> Running in 7cb17ddf6345
CentOS Linux 8 - AppStream 2.1 MB/s | 6.3 MB 00:02
CentOS Linux 8 - BaseOS 1.9 MB/s | 2.3 MB 00:01
CentOS Linux 8 - Extras 9.0 kB/s | 9.2 kB 00:01
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-15.el8 appstream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-15.el8 appstream 39 k
vim-common x86_64 2:8.0.1763-15.el8 appstream 6.3 M
vim-filesystem noarch 2:8.0.1763-15.el8 appstream 48 k
which x86_64 2.21-12.el8 baseos 49 k
Transaction Summary
================================================================================
Install 5 Packages
Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 224 kB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 328 kB/s | 48 kB 00:00
(3/5): which-2.21-12.el8.x86_64.rpm 342 kB/s | 49 kB 00:00
(4/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm 2.5 MB/s | 1.4 MB 00:00
(5/5): vim-common-8.0.1763-15.el8.x86_64.rpm 6.0 MB/s | 6.3 MB 00:01
--------------------------------------------------------------------------------
Total 3.7 MB/s | 7.8 MB 00:02
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream 232 kB/s | 1.6 kB 00:00
Importing GPG key 0x8483C65D:
Userid : "CentOS (CentOS Official Signing Key) <[email protected]>"
Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Installing : which-2.21-12.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-15.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-15.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-15.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-15.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-15.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-15.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-15.el8.noarch 4/5
Verifying : which-2.21-12.el8.x86_64 5/5
Installed:
gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64
vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch
which-2.21-12.el8.x86_64
Complete!
Removing intermediate container 7cb17ddf6345
---> 1dee8c82dc2c
Step 7/15 : ENV MYPATH /usr/local
---> Running in 1d5abe930a75
Removing intermediate container 1d5abe930a75
---> 970df33afcc8
Step 8/15 : WORKDIR $MYPATH
---> Running in 0580d08c8588
Removing intermediate container 0580d08c8588
---> 2e3126bbb258
Step 9/15 : ENV JAVA_HOME /usr/local/jdk1.8.0_11
---> Running in 440abce7bbf6
Removing intermediate container 440abce7bbf6
---> 075a1599971e
Step 10/15 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---> Running in d85b8a9112bb
Removing intermediate container d85b8a9112bb
---> 3eb9c75d976f
Step 11/15 : ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.44
---> Running in 8de5817880b1
Removing intermediate container 8de5817880b1
---> 7be89ad718f3
Step 12/15 : ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.44
---> Running in 2ef1b3c43df0
Removing intermediate container 2ef1b3c43df0
---> b1f2bb8b9971
Step 13/15 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
---> Running in c088d27cac3b
Removing intermediate container c088d27cac3b
---> e86039cdf1c9
Step 14/15 : EXPOSE 8080
---> Running in f541217004bc
Removing intermediate container f541217004bc
---> 253c3aa2bbfa
Step 15/15 : CMD /usr/local/apache-tomcat-9.0.44/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.44/bin/logs/catalina.out
---> Running in b5ba1a9c9c7f
Removing intermediate container b5ba1a9c9c7f
---> 12988584a30e
Successfully built 12988584a30e
Successfully tagged diytomcat9:latest
[root@192 tomcat9]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
diytomcat9 latest 12988584a30e 3 minutes ago 607MB
centos latest 300e315adb2f 3 months ago 209MB
此時我的diytomcat9
映象就再宿主機生成,該diytomcat9
映象自身帶有tomcat9
的執行時環境。當我們啟動容器後,該容器就對外提供tomcat
服務。
執行如下命令,啟動diytomcat9
映象。
docker run -p 9090:8080 \
--name wukongtomcat \
-v /home/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.44/webapps/test \
-v /home/mydockerfile/tomcat9/tomcatlogs:/usr/local/apache-tomcat-9.0.44/logs \
--privileged=true \
-d diytomcat9
提示:
Docker掛載主機目錄的時候,如果Docker存取出現
cannot open directory.:Permission denied
問題。解決辦法:在掛載目錄後多加一個
--privileged=true
引數即可。
演示:
# 檢視本地Docker映象
[root@192 tomcat9]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
diytomcat9 latest 12988584a30e 3 minutes ago 607MB
centos latest 300e315adb2f 3 months ago 209MB
# 啟動容器(以後工作中啟動容器的命令要比這還多)
[root@192 tomcat9]# docker run -p 9090:8080 \
> --name wukongtomcat \
> -v /home/mydockerfile/tomcat9/test:/url/local/apache-tomcat-9.0.44/webapps/test \
> -v /home/mydockerfile/tomcat9/tomcatlogs:/url/local/apache-tomcat-9.0.44/logs \
> --privileged=true \
> -d diytomcat9
9d23344e364d80e773a55cf9c507b75a034a1900fdf0c98e27266d99ceb5b06d
# 檢視當前正在執行的容器
[root@192 tomcat9]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d23344e364d diytomcat9 "/bin/sh -c '/usr/lo…" 11 seconds ago Up 9 seconds 0.0.0.0:9090->8080/tcp wukongtomcat
檢視宿主機的掛載是否設定成功。
[root@192 tomcat9]# pwd
/home/mydockerfile/tomcat9
[root@192 tomcat9]# ll
總用量 166520
-rw-r--r--. 1 root root 11487016 3月 21 00:18 apache-tomcat-9.0.44.tar.gz
-rw-r--r--. 1 root root 643 3月 21 01:46 Dockerfile
-rw-r--r--. 1 root root 159019376 3月 21 00:18 jdk-8u11-linux-x64.tar.gz
-rw-r--r--. 1 root root 0 3月 21 00:39 readme.txt
drwxr-xr-x. 2 root root 6 3月 21 01:58 test # 這裡
drwxr-xr-x. 2 root root 6 3月 21 01:58 tomcatlogs # 這裡
說明資料卷掛載成功。
接下來我們檢視宿主機上傳的檔案是否存在,還有容器的中的執行環境。
# 檢視/usr/local/目錄中的內容
# 發現我們上傳的cincontainer.txt和tomcat、jdk都有,沒有問題。
[root@192 tomcat9]# docker exec wukongtomcat ls -l
total 0
drwxr-xr-x. 1 root root 45 Mar 20 17:47 apache-tomcat-9.0.44
drwxr-xr-x. 2 root root 6 Nov 3 15:22 bin
-rw-r--r--. 1 root root 0 Mar 20 16:39 cincontainer.txt
drwxr-xr-x. 2 root root 6 Nov 3 15:22 etc
drwxr-xr-x. 2 root root 6 Nov 3 15:22 games
drwxr-xr-x. 2 root root 6 Nov 3 15:22 include
drwxr-xr-x. 8 10 143 255 Jun 17 2014 jdk1.8.0_11
drwxr-xr-x. 2 root root 6 Nov 3 15:22 lib
drwxr-xr-x. 3 root root 17 Dec 4 17:37 lib64
drwxr-xr-x. 2 root root 6 Nov 3 15:22 libexec
drwxr-xr-x. 2 root root 6 Nov 3 15:22 sbin
drwxr-xr-x. 5 root root 49 Dec 4 17:37 share
drwxr-xr-x. 2 root root 6 Nov 3 15:22 src
# 接下來我們檢視一下java的版本
# 說明java的執行時環境是設定正常的。
[root@192 tomcat9]# docker exec wukongtomcat java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
# 如果還想進行其他的驗證,可以自己去執行。
我們可以使用curl
命令進行本地存取。
也可以使用外部瀏覽器進行存取。
我們在瀏覽器中輸入:http://192.168.134.129:9090/
,看是否能夠檢視到Tomcat的歡迎介面。
我們通過容器啟動命令,先來說明一下tomcat9
映象部署專案的原理。
docker run -p 9090:8080 \
--name wukongtomcat \
-v /home/mydockerfile/tomcat9/test:/usr/local/apache-tomcat-9.0.44/webapps/test \
-v /home/mydockerfile/tomcat9/tomcatlogs:/usr/local/apache-tomcat-9.0.44/logs \
--privileged=true \
-d diytomcat9
說明:
/home/mydockerfile/tomcat9/test
目錄和容器中/usr/local/apache-tomcat-9.0.44/webapps/test
目錄是掛載的,也就是這兩個目錄中的內容是同步的。webapps
目錄是釋出專案工程的目錄,所以test
目錄相當於一個專案工程。我在宿主機中把專案檔案放入test
目錄中,會自動同步到容器中webapps
目錄的test
目錄中。這樣我們就可以在宿主機本地,釋出一個專案到容器中了。/home/mydockerfile/tomcat9/tomcatlogs
目錄和容器中/usr/local/apache-tomcat-9.0.44/logs
目錄是掛載的,所以容器中Tomcat服務產生的紀錄檔,我們在宿主機上都可以檢視到,並且持久化到了宿主機。我們建立兩個檔案和一個資料夾放入宿主機的/home/mydockerfile/tomcat9/test
。
他們之間的目錄結構如下:
web.xml
檔案內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
</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>hello wukong ,hello docker</title>
</head>
<body>
Hello World!hello docker!
<br />
<% System.out.println("-----Congratulations--hello-docker----"); %>
</body>
</html>
我們在宿主機/home/mydockerfile/tomcat9/test
目錄中建立的檔案,會自動同步到容器中/usr/local/apache-tomcat-9.0.44/webapps/test
目錄裡。
這時我們可以直接在瀏覽器中存取http://192.168.134.129:9090/test
,檢視一下是否能夠存取成功。
提示:可以docker restart
重啟一下容器。
存取成功。
我們也可以在宿主機中檢視tomcat
容器的tomcat
服務紀錄檔。
# 檢視當前工作目錄
[root@192 tomcatlogs]# pwd
/home/mydockerfile/tomcat9/tomcatlogs
# 檢視當前目錄檔案
[root@192 tomcatlogs]# ll
總用量 48
-rw-r-----. 1 root root 6286 3月 21 03:47 catalina.2021-03-20.log
-rw-r-----. 1 root root 6289 3月 21 12:23 catalina.2021-03-21.log
-rw-r-----. 1 root root 12631 3月 21 12:48 catalina.out
-rw-r-----. 1 root root 0 3月 21 03:47 host-manager.2021-03-20.log
-rw-r-----. 1 root root 0 3月 21 12:23 host-manager.2021-03-21.log
-rw-r-----. 1 root root 408 3月 21 03:47 localhost.2021-03-20.log
-rw-r-----. 1 root root 408 3月 21 12:23 localhost.2021-03-21.log
-rw-r-----. 1 root root 225 3月 21 03:48 localhost_access_log.2021-03-20.txt
-rw-r-----. 1 root root 225 3月 21 12:48 localhost_access_log.2021-03-21.txt
-rw-r-----. 1 root root 0 3月 21 03:47 manager.2021-03-20.log
-rw-r-----. 1 root root 0 3月 21 12:23 manager.2021-03-21.log
# 檢視tomcat紀錄檔
[root@192 tomcatlogs]# cat catalina.out
... #省略
-----Congratulations--hello-docker----
-----Congratulations--hello-docker----
-----Congratulations--hello-docker----
-----Congratulations--hello-docker----
[root@192 tomcatlogs]#
容器是正常執行的,相關檔案都可以檢視到,證明我們的tomcat9
映象設定沒有問題。
我們以後開發的步驟:需要掌握Dokcerfile的編寫,之後的一切都是使用Docker映象來發布執行!