点击学习开源企业 Docker 镜像仓库 Harbor 软件 教程。
如果你有一个 war 需要部署,并且想暴露 8080 端口,启动容器时可以指定运行环境(dev、test 和 prod),根据不同的运行环境使用不同的配置,最后,服务使用 JDK8 运行。
以下是一个用于部署 war 包到 Tomcat 并满足你要求的 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”地址,如下图:
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”地址,如下图:
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”地址,如下图:
点击学习开源企业 Docker 镜像仓库 Harbor 软件 教程。