<input id="ohw05"></input>
  • <table id="ohw05"><menu id="ohw05"></menu></table>
  • <var id="ohw05"></var>
  • <code id="ohw05"><cite id="ohw05"></cite></code>
    <label id="ohw05"></label>
    <var id="ohw05"></var>
  • 『現學現忘』Docker基礎 — 39、實戰:自定義Tomcat9鏡像

    1、目標

    • 以ContOS鏡像為基礎鏡像,自定義一個tomcat9的鏡像。
    • 鏡像可以正常運行,外界可以訪問。
    • 與宿主機與tomcat9之間配置掛載。
    • 部署一個簡單的WEB項目,外界可以訪問。

    2、準備

    準備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文件的位置了。

    3、編寫Dockerfile文件

    Dockerfile文件配置內容如下:

    FROM centos
    MAINTAINER wukong<wukong6688@126.com>
    
    # 把宿主機當前上下文的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
    # && 表示拼接下一條命令,可以無線的拼接。
    

    4、構建鏡像

    執行命令: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<wukong6688@126.com>
     ---> 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) <security@centos.org>"
     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服務。

    5、啟動鏡像

    執行如下命令,啟動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)
    
    # 如果還想進行其他的驗證,可以自己去執行。
    

    6、驗證容器是否能夠訪問

    我們可以使用curl命令進行本地訪問。

    也可以使用外部瀏覽器進行訪問。

    我們在瀏覽器中輸入:http://192.168.134.129:9090/,看是否能夠查看到Tomcat的歡迎界面。

    image

    7、向容器中部署WEB項目,同時驗證數據卷掛載

    我們通過容器啟動命令,先來說明一下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目錄是掛載的,也就是這兩個目錄中的內容是同步的。
    • 我們知道在Tomcat中webapps目錄是發布項目工程的目錄,所以test目錄相當于一個項目工程。我在宿主機中把項目文件放入test目錄中,會自動同步到容器中webapps目錄的test目錄中。這樣我們就可以在宿主機本地,發布一個項目到容器中了。
    • 同理宿主機的/home/mydockerfile/tomcat9/tomcatlogs目錄和容器中/usr/local/apache-tomcat-9.0.44/logs目錄是掛載的,所以容器中Tomcat服務產生的日志,我們在宿主機上都可以查看到,并且持久化到了宿主機。

    (1)準備一個簡單的WEB項目

    我們創建兩個文件和一個文件夾放入宿主機的/home/mydockerfile/tomcat9/test

    他們之間的目錄結構如下:

    image

    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>
    

    (2)訪問驗證

    我們在宿主機/home/mydockerfile/tomcat9/test目錄中創建的文件,會自動同步到容器中/usr/local/apache-tomcat-9.0.44/webapps/test目錄里。

    這時我們可以直接在瀏覽器中訪問http://192.168.134.129:9090/test,查看一下是否能夠訪問成功。

    提示:可以docker restart重啟一下容器。

    image

    訪問成功。

    我們也可以在宿主機中查看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鏡像來發布運行!

    posted @ 2022-06-27 11:00  繁華似錦Fighting  閱讀(219)  評論(0編輯  收藏  舉報
    国产美女a做受大片观看