Docker容器化技术已经成为Java应用部署的主流方案,相比传统部署方式,它能保证环境一致性、简化部署流程、提升资源利用率。下面我们就一步步学习如何在Docker容器中部署Java环境,完成Java应用的容器化。

一、准备工作
在开始操作前,需要先完成以下准备:
- 本地安装Docker环境,确保Docker服务正常运行
- 准备一个简单的Java应用示例,本文使用Spring Boot的jar包作为演示
- 了解基础的Docker命令,比如镜像拉取、容器启动等
二、选择Java基础镜像
Docker官方提供了多种Java运行环境的基础镜像,你可以根据需求选择:
| 镜像名称 | 适用场景 | 特点 |
|---|---|---|
| openjdk:8 | 使用JDK8的项目 | 包含完整JDK,适合编译和运行 |
| openjdk:8-jre | 只需要运行环境的项目 | 体积更小,仅包含JRE |
| openjdk:11 | 使用JDK11及以上的项目 | 支持新版Java特性 |
三、编写Dockerfile构建镜像
Dockerfile是构建镜像的核心文件,我们需要在其中定义Java环境配置和应用拷贝逻辑,以下是一个通用的Dockerfile示例:
# 使用JDK8基础镜像 FROM openjdk:8 # 设置工作目录 WORKDIR /app # 将本地的Java应用jar包拷贝到容器中 COPY demo.jar /app/demo.jar # 暴露应用运行的端口,根据实际项目调整 EXPOSE 8080 # 容器启动时执行的命令 ENTRYPOINT ["java", "-jar", "/app/demo.jar"]
将上述Dockerfile和你的Java应用jar包放在同一个目录下,执行以下命令构建镜像:
# 构建镜像,my-java-app是镜像名称,1.0是版本标签 docker build -t my-java-app:1.0 .
四、启动容器运行Java应用
镜像构建完成后,就可以启动容器运行Java应用了,执行以下命令:
# 启动容器,-d表示后台运行,-p映射宿主机端口到容器端口,--name指定容器名称 docker run -d -p 8080:8080 --name java-app my-java-app:1.0
启动后可以通过以下命令查看容器运行状态:
# 查看运行中的容器 docker ps # 查看容器日志,确认应用是否正常启动 docker logs java-app
五、常见问题解决
- 如果应用启动后无法访问,先检查端口映射是否正确,再查看容器日志排查错误
- 如果镜像体积过大,可以改用
openjdk:8-jre这类仅包含运行时的镜像,减少不必要的依赖 - 如果需要自定义JVM参数,可以修改ENTRYPOINT部分,比如添加
-Xmx512m限制最大堆内存
六、进阶技巧
如果需要多阶段构建进一步优化镜像,可以使用以下Dockerfile写法,先编译再打包运行:
# 第一阶段:编译阶段,使用Maven镜像编译项目 FROM maven:3.8-openjdk-8 AS build WORKDIR /app COPY pom.xml . COPY src ./src RUN mvn clean package -DskipTests # 第二阶段:运行阶段,仅拷贝编译好的jar包 FROM openjdk:8-jre WORKDIR /app COPY --from=build /app/target/demo.jar /app/demo.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app/demo.jar"]
这种写法可以避免把编译工具和源码打包到最终运行镜像中,进一步减小镜像体积,更适合生产环境使用。