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