Spring Boot Docker 部署,為在 Docker 容器上部署我們的 Spring Boot 微服務打開了大門。讓我們來看看這個過程!
什么是 Docker?
Docker 是一個平臺,使開發(fā)人員能夠以容器化應用程序的形式開發(fā)、發(fā)布和執(zhí)行應用程序。
它通過為您的應用程序創(chuàng)建一個輕量級的可執(zhí)行包來實現(xiàn)這一點。此包包括應用程序代碼以及應用程序運行所需的所有依賴項。依賴關(guān)系可以是環(huán)境變量、庫、工具等。
這樣的可執(zhí)行包通常也稱為映像。一個正在運行的鏡像是一個容器。
Docker 本身就是一個龐大的話題。如果您想了解更多信息,我有一篇關(guān)于 Docker 基礎知識的詳細文章。
使用 Dockerfile 定義 Docker 鏡像
要為我們的 Spring Boot Docker 部署創(chuàng)建 Docker 映像,我們需要在項目的根目錄中創(chuàng)建一個Dockerfile。
以下是典型 Spring Boot 應用程序的 Dockerfile 內(nèi)容。
# Start with base image
FROM openjdk:8-jdk-alpine
# Add Maintainer Info
LABEL maintainer="Progressive Coder"
# Add a temporary volume
VOLUME /tmp
# Expose Port 8080
EXPOSE 8080
# Application Jar File
ARG JAR_FILE=target/spring-boot-starter-0.0.1-SNAPSHOT.jar
# Add Application Jar File to the Container
ADD ${JAR_FILE} spring-boot-starter.jar
# Run the JAR file
ENTRYPOINT ["java", "-jar", "/spring-boot-starter.jar"]
讓我們來看看 Dockerfile 中的每一步。
FROM: 此語句用于表示我們的新 Docker 映像將使用的基本映像。在上面的示例中,我們使用了OpenJDK 8映像。這是運行 Java 應用程序的一個非常輕量級的選項。
LABEL:此指令用于向圖像添加某種類型的元數(shù)據(jù)。在這種情況下,我們添加了名為MAINTAINER的元數(shù)據(jù)。
VOLUME:Volume 指令在容器中創(chuàng)建一個掛載點。您還可以將掛載點映射到主機操作系統(tǒng)上的目錄。卷的典型用例是存儲由我們的應用程序生成的日志文件。
EXPOSE:這是一條重要的指令。它允許我們向外界公開特定的端口。在我們的示例中,我們公開端口 8080。
ARG:該指令用于定義一個具有默認值的變量。在我們的例子中,我們將它設置為 JAR 文件的位置。
添加:在本指令中,我們基本上是將文件和目錄復制到我們的 docker 鏡像。
ENTRYPOINT:最后但并非最不重要的是,ENTRYPOINT 是您配置應如何執(zhí)行應用程序的地方。在我們的例子中,我們指定了如何運行 JAR 文件。
創(chuàng)建 Docker 鏡像
現(xiàn)在是創(chuàng)建 Docker 鏡像的時候了。為此,我們需要在 Spring Boot 項目區(qū)域中準備好 JAR 文件。
要創(chuàng)建 JAR 文件,請執(zhí)行以下命令。
mvn clean package
現(xiàn)在要構(gòu)建 Dockerfile,需要運行以下命令:
docker build -t spring-boot-starter .
執(zhí)行此命令后,您將能夠看到正在構(gòu)建的映像。如果您執(zhí)行以下命令,您可以看到圖像列表:
docker image ls
運行 Docker 鏡像
現(xiàn)在鏡像已成功構(gòu)建,您可以使用Docker Run命令運行 Docker 鏡像。
docker run spring-boot-starter
基本上,我們要求 Docker 運行標記為spring-boot-starter的鏡像。換句話說,這就是我們在這篇文章中一直針對的 Spring Boot Docker 部署。
這將創(chuàng)建一個容器,應用程序?qū)㈤_始運行。要查看當前運行的容器列表,您可以使用以下命令:
docker ps
可以通過http://localhost:8080訪問該應用程序
您還可以通過發(fā)出以下命令來運行容器來更改容器的端口。
docker run -p 5000:8080 spring-boot-starter
基本上,這里的 5000 是主機操作系統(tǒng)上的端口。我們將容器上的端口 8080 映射到主機操作系統(tǒng)上的端口 5000。
如果你想停止正在運行的容器,你可以按CTRL + C。
結(jié)論
這樣,我們就成功地為我們的微服務創(chuàng)建了一個Spring Boot Docker 部署。
我們首先創(chuàng)建了一個 Docker 鏡像,然后在主機操作系統(tǒng)上運行它。Docker Image 也可以通過 Docker Hub 公開共享。通常,企業(yè)也有內(nèi)部 Docker 注冊表,其中存儲圖像以備將來使用。我們將在以后的文章中探討這些概念。對于源碼我們可以在Github上找到。