Docker 教程

Dockerfile实战:部署 war 包

如果你有一个 war 需要部署,并且想暴露 8080 端口,启动容器时可以指定运行环境(dev、test 和 prod),根据不同的运行环境使用不同的配置,最后,服务使用 JDK8 运行。

eb64e1667d6a0f14e5f2dae97b8828a9_1725332192140-86d21ce6-a8e2-46af-9d9f-014af43f76da_x-oss-process=image%2Fformat%2Cwebp.png

07023cae2ca70871b5ee316154efe518_1725332223079-850f93c0-6c7b-423e-b03e-ef182e276130_x-oss-process=image%2Fformat%2Cwebp.png

以下是一个用于部署 war 包到 Tomcat 并满足你要求的 Dockerfile:

创建 Dockerfile

FROM ubuntu:latest

RUN apt-get update && apt-get install -y openjdk-8-jre wget
RUN wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.93/bin/apache-tomcat-9.0.93.tar.gz
RUN tar -xvf apache-tomcat-9.0.93.tar.gz -C /opt

ENV CATALINA_HOME=/opt/apache-tomcat-9.0.93
ENV PATH=$CATALINA_HOME/bin:$PATH

WORKDIR $CATALINA_HOME/webapps

RUN rm -fr * 
COPY target/demo_war-0.0.1-SNAPSHOT.war ./ROOT.war

ENV JAVA_OPTS="-Dspring.profiles.active=dev"
EXPOSE 8080
CMD ["catalina.sh", "run"]

Dockerfile 文件分析:

  • FROM ubuntu:latest:从 ubuntu:latest 基础镜像开始构建。

  • RUN apt-get update && apt-get install -y openjdk-8-jre wget:使用 apt-get 安装了 OpenJDK 8 和 wget。

  • RUN wget...:通过 wget 下载了 Apache Tomcat 9.0.93 的压缩包,并解压到 /opt 目录下。

  • ENV CATALINA_HOM:设置了 CATALINA_HOME 环境变量指向 Tomcat 的安装目录。

  • ENV PATH=:将 Tomcat 的 bin 目录添加到系统的 PATH 环境变量中,以便可以直接执行 Tomcat 的命令。

  • WORKDIR $CATALINA_HOME/webapps:设置工作目录为 Tomcat 的 webapps 目录。

  • RUN rm -fr *:删除该目录下的所有现有文件,为部署 WAR 包做准备。

  • COPY target/demo_war-0.0.1-SNAPSHOT.war ./ROOT.war:将本地构建的 WAR 包复制到该目录下,并命名为 ROOT.war。

  • ENV JAVA_OPTS=:设置了 JAVA_OPTS 环境变量来激活开发环境的配置文件(如果是 Spring Boot 应用,这里可以通过 -Dspring.profiles.active=dev 来指定开发环境的配置文件)。

  • EXPOSE 8080:暴露容器的 8080 端口。

  • CMD ["catalina.sh", "run"]:使用 catalina.sh run 命令启动 Tomcat。

构建镜像

使用上述 Dockerfile 文件构建镜像:

root@hxstrive:~/demo_war# docker build -t demo_war .
[+] Building 0.4s (12/12) FINISHED                                                                                                                       docker:default
 => [internal] load build definition from Dockerfile                                                                                                               0.0s
 => => transferring dockerfile: 543B                                                                                                                               0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest                                                                                                   0.0s
 => [internal] load .dockerignore                                                                                                                                  0.0s
 => => transferring context: 2B                                                                                                                                    0.0s
 => [1/7] FROM docker.io/library/ubuntu:latest                                                                                                                     0.0s
 => [internal] load build context                                                                                                                                  0.0s
 => => transferring context: 84B                                                                                                                                   0.0s
 => CACHED [2/7] RUN apt-get update && apt-get install -y openjdk-8-jre wget                                                                                       0.0s
 => CACHED [3/7] RUN wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.93/bin/apache-tomcat-9.0.93.tar.gz                                                         0.0s
 => CACHED [4/7] RUN tar -xvf apache-tomcat-9.0.93.tar.gz -C /opt                                                                                                  0.0s
 => CACHED [5/7] WORKDIR /opt/apache-tomcat-9.0.93/webapps                                                                                                         0.0s
 => CACHED [6/7] RUN rm -fr *                                                                                                                                      0.0s
 => CACHED [7/7] COPY target/demo_war-0.0.1-SNAPSHOT.war ./ROOT.war                                                                                                0.0s
 => exporting to image                                                                                                                                             0.1s
 => => exporting layers                                                                                                                                            0.0s
 => => writing image sha256:3b3910511ab6da2c7c0782aa4385ee04c7c4b65e22dfb68f1d335dc3f55ae877                                                                       0.0s
 => => naming to docker.io/library/demo_war

root@hxstrive:~/demo_war# docker images | grep demo_war
demo_war     latest    5d74fed77e7a   7 seconds ago    734MB

运行容器

运行容器并指定运行环境:

开发环境

root@hxstrive:~/demo_war# docker run --name demo_war_prod -p 8083:8080 -e JAVA_OPTS="-Dspring.profiles.active=prod" -d demo_war
4191738b8d19ff26ce59ebe17d7c701a9e3a95250298ebd16ad8f0682e932d51

访问“http://宿主机IP:8081”地址,如下图:

09f79e952f22ce3f9ace7104676fa2c4_1725344831237-d0c94f4b-5daa-4cdc-8ac8-7e486e927d90_x-oss-process=image%2Fformat%2Cwebp.png

测试环境

root@hxstrive:~/demo_war# docker run --name demo_war_test -p 8082:8080 -e JAVA_OPTS="-Dspring.profiles.active=test" -d demo_war
2cbc3c69773f8b7208b2a859b478a780067539a2931d85ebb573917d13b9c828

访问“http://宿主机IP:8082”地址,如下图:

df66f7a439203dcd9b22ada9753d73b0_1725344956308-cc417316-08fb-4e21-ac84-d922893d13b6_x-oss-process=image%2Fformat%2Cwebp.png

生产环境

root@hxstrive:~/demo_war# docker run --name demo_war_dev -p 8081:8080 -e JAVA_OPTS="-Dspring.profiles.active=dev" -d demo_war
e379d15ddb35769e1fdd278e3c82815d115c9d3aba754c4c68d98488ef6ec1da

访问“http://宿主机IP:8083”地址,如下图:

30e3921d5f656c7d9d60a05c7672a3bc_1725345026110-c5e5845d-1200-4f87-92b7-51edcc37f5e3_x-oss-process=image%2Fformat%2Cwebp.png

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号