1. 概述
本文将带你一步步了解如何在Docker容器中构建和运行Micronaut应用。我们将从项目创建到容器化部署全流程展开,包含所有关键配置和实操技巧。
Micronaut是一个现代的JVM框架,专为构建模块化、易测试的微服务和无服务器应用设计,内存占用极低。而Docker通过将应用及其依赖打包成标准化容器,彻底简化了跨环境部署的复杂性。
当Micronaut遇上Docker,这对组合能让你高效构建可扩展、高可用的现代化应用。
2. 前置要求
要顺利完成本教程,请确保以下工具就绪:
- Java开发工具包(JDK): 推荐JDK 21以获得最佳性能和新特性支持。虽然Micronaut也支持JDK 17,但需调整版本参数。本文默认使用JDK 21(Micronaut官方推荐版本)
- Micronaut: CLI工具非必需,也可通过网页创建项目。本文将同时演示两种方式
- Gradle或Maven: 利用Micronaut内置的构建脚本自动化Docker镜像创建,无需额外安装
- Docker: Docker需提前安装配置,确保容器化环境可用
本文重点在于容器化实践而非基础环境搭建,请确保上述工具已准备就绪。
3. 搭建Micronaut应用
首先创建一个全新的Micronaut项目,可通过CLI工具、Micronaut Launch网站或兼容IDE(如IntelliJ IDEA)完成。
3.1. 使用CLI工具
通过Micronaut官方文档安装CLI(推荐使用SDKMAN!)。安装后执行:
mn create-app com.baeldung.micronautdocker
这将在com.baeldung.micronautdocker
包下生成基础项目骨架。默认配置使用Java 21和Gradle构建工具。
若需切换为Java 17或Maven,添加相应参数:
mn create-app com.baeldung.micronautdocker --jdk 17 --build maven
更多配置选项参考Micronaut CLI指南。
3.2. 使用Micronaut Launch
**跳过本地安装?直接访问Micronaut Launch网站**。与CLI不同,网页版可直接下载完整项目文件夹,开箱即用。
3.3. 环境验证
项目创建后,启动应用验证环境:
Gradle启动命令:
./gradlew run
Maven启动命令:
./mvnw mn:run
通过浏览器访问http://localhost:8080或使用curl验证服务状态。
此步骤确保基础环境配置正确,验证通过后即可开始容器化改造。
4. 应用容器化改造
应用正常运行后,开始准备Docker容器化。要自动生成Docker镜像,需对构建工具进行配置。虽然Gradle和Maven都内置Docker支持,但自定义配置仍需手动调整。
本节将演示如何修改基础镜像、暴露端口、添加自定义指令及重命名镜像。
4.1. Gradle容器化方案
通过Gradle任务修改Dockerfile配置:
tasks.named<MicronautDockerfile>("dockerfile") {
baseImage.set("eclipse-temurin:21-jre-alpine")
exposedPorts.set(arrayListOf(9090))
instruction("RUN echo 'Hello world!'")
}
关键配置说明:
baseImage.set()
:修改基础镜像exposedPorts.set()
:设置暴露端口instruction()
:添加自定义指令(如示例中的echo)
修改镜像名称需捕获dockerBuild任务:
tasks.named<DockerBuildImage>("dockerBuild") {
images.set(listOf("micronaut_docker_gradle"))
}
更多配置参考官方文档。
4.2. Maven容器化方案
由于Micronaut Maven插件原生不支持Docker构建,我们使用Google的Jib插件,无需Dockerfile即可直接构建优化镜像。
首先在pom.xml的properties部分添加变量:
<properties>
...
<docker.baseImage>eclipse-temurin:21-jre-alpine</docker.baseImage>
<docker.exposedPort>9090</docker.exposedPort>
<docker.imageName>micronaut_docker_maven</docker.imageName>
</properties>
然后在build/plugins中配置Jib插件:
<build>
<plugins>
...
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<from>
<image>${docker.baseImage}</image>
</from>
<container>
<ports>
<port>${docker.exposedPort}</port>
</ports>
<entrypoint>
<shell>sh</shell>
<option>-c</option>
<arg>
java -cp /app/resources:/app/classes:/app/libs/* ${exec.mainClass}
</arg>
</entrypoint>
</container>
<to>
<image>${docker.imageName}</image>
</to>
</configuration>
</plugin>
</plugins>
</build>
⚠️ 注意:Jib不支持直接在Dockerfile中添加自定义指令。更多配置参考官方文档。
5. 构建Docker镜像
应用打包完成后,开始构建、检查和运行Docker镜像。
Gradle构建命令:
./gradlew dockerBuild
Maven构建命令:
./mvnw jib:dockerBuild
构建完成后,通过以下命令验证镜像:
docker images
输出中应出现名为micronaut_docker_gradle
或micronaut_docker_maven
的镜像。这表明镜像已准备就绪。
6. 运行容器
镜像构建成功后,启动容器:
Gradle启动命令:
docker run -p 9090:9090 micronaut_docker_gradle:latest
Maven启动命令:
docker run -p 9090:9090 micronaut_docker_maven:latest
此命令将容器9090端口映射到主机9090端口,通过http://localhost:9090即可访问应用。
容器启动成功后,查看运行状态:
docker ps
输出中应包含名为micronaut_docker_gradle
或micronaut_docker_maven
的容器条目,显示其ID、状态和端口映射。
调试时查看容器日志:
docker logs <container_id>
至此,Micronaut应用已在Docker环境中成功部署运行。
7. 总结
本文完整演示了在Docker容器中构建和运行Micronaut应用的全流程。我们通过CLI和Micronaut Launch创建项目,配置Gradle和Maven自动化Docker镜像构建,并自定义了基础镜像、暴露端口和命名规则。最终成功构建并运行了容器化应用。
Micronaut的灵活性 + Docker的便携性 = 现代化微服务开发的黄金组合。这种集成不仅简化了工作流,更确保了跨环境一致性,是构建轻量级可扩展应用的理想方案。