您的位置:首页 >Ubuntu Java应用如何实现容器化部署
发布于2026-05-01 阅读(0)
扫一扫,手机访问

万事开头先搭台。要在 Ubuntu 22.04 或 20.04 上玩转容器化,第一步就是把 Docker 环境给装好。这里提供两个主流选择,任选其一即可:
sudo apt-get update && sudo apt-get install -y docker.io
安装完成后,别忘了启动服务并设置开机自启:
sudo systemctl start docker && sudo systemctl enable docker
sudo apt-get update && sudo apt-get install -y docker-ce
装好了?先别急。验证安装是否成功是标准操作,依次执行 docker version、docker info,最后跑一下经典的 docker run hello-world。看到欢迎信息,恭喜你,本地的镜像构建和容器运行舞台就算搭好了。
环境就绪,接下来就是重头戏:把你的Ja va应用打包进容器。这个过程,核心在于一份名为 Dockerfile 的“构建说明书”。
mvn clean package,产物通常躺在 target/your-app.jar 里。gradle build,去 build/libs/ 目录下找你的 JAR 文件。FROM openjdk:11-jre-slim 或 openjdk:8-jre-slim。这类镜像只包含运行时环境,体积更小。FROM ma ven:3.8-openjdk-11 这样带构建工具的镜像。FROM openjdk:11-jre-slim
WORKDIR /app
COPY target/your-app.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["ja va","-jar","/app/app.jar"]
但更推荐的是多阶段构建,它能将构建环境和运行环境分离,最终得到的镜像更小、更安全。示例如下:
# 构建阶段
FROM ma ven:3.8-openjdk-11 AS build
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests
# 运行阶段
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=build /app/target/your-app.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["ja va","-jar","/app/app.jar"]
docker build -t yourname/your-app:1.0 .。
镜像生成后,运行它:docker run -d -p 8080:8080 yourname/your-app:1.0。一个容器化的 Ja va 应用就跑起来了。
让容器跑起来只是开始,如何让它跑得好、跑得稳,才是进阶关键。
docker run -d -p 8080:8080 --name app yourname/your-app:1.0。-e 参数注入配置,比如指定 Spring 环境:docker run -d -p 8080:8080 -e SPRING_PROFILES_ACTIVE=prod yourname/your-app:1.0。-v 参数挂载卷,实现日志落盘和配置外部化:docker run -d -p 8080:8080 -v /host/logs:/app/logs -v /host/config:/app/config yourname/your-app:1.0。HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:8080/actuator/health || exit 1
docker network create invoicedocker run --name mysql --network invoice -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:8.0docker run --name redis --network invoice -p 6379:6379 -d redis:7docker run --name nginx --network invoice -p 80:80 -p 8899:8899 -v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/nginx/html:/usr/share/nginx/html -d nginx:1.25jdbc:mysql://mysql:3306/db)即可,无需关心宿主机 IP。从“能用”到“好用”,再到“适用于生产”,这里有几条被广泛认可的最佳实践。
-jre-slim 或 alpine 变体以减小体积。切记避免使用 latest 标签,务必锁定具体版本甚至摘要,保证构建的一致性。USER,这是提升容器安全性的基础操作。RUN 指令以减少镜像层数,合理利用 Docker 缓存加速构建。同时,使用 .dockerignore 文件排除无关文件,避免它们被误打包进上下文。HEALTHCHECK,这是接入 Kubernetes 等编排平台进行就绪和存活探测的前提。即使按部就班,也难免遇到问题。以下几个是高频踩坑点,提前了解,遇事不慌。
0.0.0.0:8080(而不是 127.0.0.1);2)宿主机防火墙或云服务器的安全组是否放行了对应端口;3)docker run 的 -p 参数映射是否正确(主机端口:容器端口)。COPY 指令的源路径和目标路径,是否与你的构建产物实际位置(target/ 或 build/libs/)完全匹配。ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
-m)和 JVM 参数(如 -Xms, -Xmx),合理分配内存,避免容器因 OOM 被终止或 JVM 频繁 Full GC。上一篇:淘宝直播怎么看回放
下一篇:探探如何按话题浏览动态
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9