在 Docker 容器中建置和運行 Micronaut 應用程式
1. 簡介
在本教程中,我們將探討如何在 Docker 容器中建置和執行 Micronaut 應用程式。我們將討論從設定 Micronaut 專案到建立和運行 Dockerized 應用程式的所有內容。
Micronaut 是一個基於 JVM 的現代框架,旨在建立模組化、易於測試的微服務和無伺服器應用程式並佔用最少的記憶體。 Docker 允許開發人員將應用程式打包到容器中,將必要的程式碼、程式庫和依賴項組合起來,以便在不同的環境中統一運行,從而簡化了部署過程。
Micronaut 和 Docker 一起使用時,可以形成強大的組合,以高效地開發和部署可擴展且有彈性的應用程式。
2. 先決條件
為了獲得在 Docker 容器中建置和運行 Micronaut 應用程式的有效指南,我們需要提前做好以下準備:
- Java 開發工具包 (JDK):建議使用 JDK 21 以獲得更好的效能並存取新的語言功能。 Micronaut 也支援 JDK 17,但我們需要確保相應地更改版本標誌。在本教程中,我們將使用 JDK 21,因為它是 Micronaut 的預設版本。
- Micronaut: Micronaut 安裝是可選的,因為我們也可以在網路上建立專案。在本教程中,我們將學習如何使用 CLI 和 Micronaut 網站來完成此操作。
- Gradle 或 Maven:我們將使用 Gradle 和 Maven 自動建立 Docker 映像,利用 Micronaut 的內建包裝器而無需額外安裝。
- Docker:應該在我們的機器上安裝並配置Docker以方便容器化。
我們將專注於使用這些工具來建立包含 Micronaut 應用程式的 Docker 容器,而不是這些環境的初始設定。我們應該確保他們做好無縫跟進的準備。
3.設定 Micronaut 應用程式
要開始設定我們的 Micronaut 應用程序,我們首先建立一個新的 Micronaut 專案。 我們可以透過 Micronaut 的 CLI、Micronaut Launch 網站或相容的 IDE(例如 IntelliJ IDEA)來完成此操作。
3.1.使用 CLI
要安裝 Micronaut CLI,我們將遵循Micronauts 的官方文檔,該文檔使用 SDKMAN!安裝完成後,我們可以使用此命令來建立專案:
mn create-app com.baeldung.micronautdocker
這會在com.baeldung.micronautdocker
包下創建一個基本的 Micronaut 應用程式腳手架。預設情況下,Micronaut 將專案設定為使用 Java 21 和 Gradle 作為建置工具。
要使用 Java 17 或 Maven,我們可以包含適當的標誌:
mn create-app com.baeldung.micronautdocker --jdk 17 --build maven
我們可以在Micronaut 的 CLI 指南中看到其他標誌和設定選項。
3.2.使用 Micronaut Launch
如果我們想跳過 Micronaut 的安裝,我們可以使用他們的Micronaut 啟動網站建立一個新專案。與 CLI 不同的是,網站允許我們下載一個包含所有必要文件的資料夾,以便我們無需進行任何安裝即可開始工作。
3.3.檢查環境
一旦我們成功創建了項目,我們可以透過啟動應用程式來檢查一切是否正常。
以下是使用 Gradle 啟動應用程式的命令:
./gradlew run
如果我們使用 Maven,我們可以透過呼叫mn:run
目標來啟動應用程式:
./mvnw mn:run
我們可以透過在瀏覽器中導航到http://localhost:8080
或使用 curl 之類的工具來驗證應用程式是否正在運行。
此步驟確保一切都正確配置並且我們的 Micronaut 應用程式正確設定。一旦我們驗證了它,我們就可以繼續前進並開始 Docker 化我們的應用程式。
4. Docker化應用程式
在我們的 Micronaut 應用程式設定完畢並正確運行後,下一步就是準備 Dockerization。
要建立自動產生的 Docker 映像,我們需要確保我們的建置工具具有一些配置才能使其正常運作。 Gradle 和 Maven 都內建了建立 Docker 映像的支援。儘管如此,如果我們想要修改一些簡單的 Docker 功能,我們需要做一些設定。
在本節中,我們將更改基礎映像和公開的連接埠、新增自訂指令並更改輸出 Docker 映像名稱。
4.1.使用 Gradle 進行 Docker 化
為了在 Dockerfile 中進行修改,我們需要擷取 Gradle 任務並新增自訂設定:
tasks.named<MicronautDockerfile>("dockerfile") {
baseImage.set("eclipse-temurin:21-jre-alpine")
exposedPorts.set(arrayListOf(9090))
instruction("RUN echo 'Hello world!'")
}
在此程式碼中,我們使用baseImage.set()
來更改基礎映像的名稱, exposedPorts.set()
來更改 Docker 將要公開的端口,並使用instruction()
來新增自訂echo
指令。
如果我們想更改輸出 Docker 映像名稱,我們將使用:
tasks.named<DockerBuildImage>("dockerBuild") {
images.set(listOf("micronaut_docker_gradle"))
}
這將捕獲dockerBuild
任務並將 Docker 映像名稱設定為micronaut_docker_gradle.
要了解有關從 Gradle 修改 Dockerfile 的更多信息,我們可以訪問官方的Micronaut Gradle 插件 Docker 支援文件。
4.2.使用 Maven 進行 Docker 化
由於 Micronaut Maven 外掛程式沒有內建建立 Docker 映像的支持,我們將使用**Google Cloud Tools 中的**J ib 。 Jib 是一個流行的插件,用於直接從 Maven 建置最佳化的 Docker 映像,而無需單獨的 Dockerfile。
首先,我們需要在properties
部分設定一些變數:
<properties>
...
<docker.baseImage>eclipse-temurin:21-jre-alpine</docker.baseImage>
<docker.exposedPort>9090</docker.exposedPort>
<docker.imageName>micronaut_docker_maven</docker.imageName>
</properties>
接下來我們來設定jib
dockerBuild
流程。為此,我們將修改build
標籤中的plugins
部分:
<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 中寫入自訂指令。我們可以參考官方的Micronaut Maven插件打包文件。
5.建置Docker鏡像
我們的應用程式打包並準備就緒後,我們將重點介紹如何建置、檢查和運行我們的 Docker 映像。
以下是使用 Gradle 建立映像的命令:
./gradlew dockerBuild
如果我們使用 Maven,我們可以透過呼叫jib:dockerBuild
目標來啟動應用程式:
./mvnw jib:dockerBuild
執行dockerBuild
命令後,我們可以透過列出本機 Docker 映像來確認映像是否已建立:
docker images
執行這些指令後,我們應該會看到名為micronaut_docker_gradle
或micronaut_docker_maven
的 Docker 映像。這確認我們的 Docker 映像已準備好部署。
6.運行容器
Docker 映像建置完成後,下一步就是將其作為容器運行。
以下是使用 Gradle 啟動容器的指令:
docker run -p 9090:9090 micronaut_docker_gradle:latest
如果我們使用 Maven,我們可以透過執行為 Maven 建立的映像來啟動容器:
docker run -p 9090:9090 micronaut_docker_maven:latest
此命令將容器的連接埠9090
映射到主機的連接埠9090
,從而允許我們透過**http://localhost:9090 .**
本地存取該應用程式。
如果容器啟動成功,我們應該看到表明我們的應用程式正在運行的日誌。為了驗證我們的容器是否處於活動狀態,我們應該運行:
docker ps
這將顯示正在運行的容器列表,包括它們的 ID、狀態和連接埠對映。我們將查找名稱為micronaut_docker_gradle
或micronaut_docker_maven
的任何條目以獲取更多資訊。
如果我們需要進行一些調試,我們可以使用以下命令:
docker logs <container_id>
運行容器可確保我們的 Micronaut 應用程式現已在 Dockerized 環境中完全部署並運行。
7. 結論
在本文中,我們介紹了在 Docker 容器中建置和運行 Micronaut 應用程式的過程。我們首先使用 CLI 和 Micronaut Launch 設定 Micronaut 項目,然後探索如何設定 Gradle 和 Maven 來自動建立 Docker 映像。我們也示範如何自訂 Docker 映像以滿足特定要求,包括修改基礎映像、公開連接埠和命名約定。最後,我們建置並運行 Docker 容器,確保應用程式可存取且完全可運行。
透過將 Micronaut 的靈活性與 Docker 的可移植性相結合,我們可以簡化可擴展輕量級應用程式的開發和部署。這種整合不僅簡化了工作流程,而且還確保了跨環境的一致性,使其成為現代微服務開發的寶貴方法。
我們可以在 GitHub 上找到本教學的完整實作。