如何创建Spring Boot Docker镜像
[Docker]是一个容器引擎,它使在分布式服务器上捆绑、运送和分发应用程序成为可能。
前提条件
- 在你的电脑上安装了[Java Development Kit 11]或更新版本。
- 确保[Docker]已经安装在你的电脑上。
项目设置
我们将把我们在这里创建的应用程序捆绑和容器化。该应用程序允许我们通过REST API对Todo项目执行CRUD功能。
要检查JDK 是否在你的电脑上正确安装和配置,请执行下面的命令。
$ java --version
java 15.0.2 2021-01-19
执行下面的命令,为该项目创建一个工作目录。
$ mkdir todo
$ cd todo
在上面创建的目录中,执行下面的命令,将项目克隆到你的电脑上。
$ git clone https://github.com/paulodhiambo/springbootcrud.git
执行下面的命令,移动到项目文件夹中。
$ cd springbootcrud
运行应用程序,以验证项目的设置是否正确,应用程序的运行是否没有错误。
$ gradle build
项目结构如下图所示。
└── springbootcrud # < project root package
├── src
│ ├── main
│ ├── test
├── build.gradle
├── gradlew
├── Dockerfile # Dockerfile where we write all the container build instructions
└── gradlew.bat
└── settings.gradle
创建一个Docker文件
Dockerfile是一个纯文本文件,包含构建Docker镜像的指令。一个Dockerfile包含以下指令。
- FROM:指令设置容器所依据的镜像。
- RUN:在容器中执行命令。
- COPY:在容器中从文件系统中创建一个文件副本。
- CMD:设置容器内的可执行命令。
在项目的根文件夹中创建一个Dockerfile 。
在上面创建的Dockerfile ,添加下面的代码片段。
FROM openjdk:8-jdk-alpine
RUN addgroup -S springdocker && adduser -S springdocker -G springdocker
USER springdocker:springdocker
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
FROM openjdk:8-jdk-alpine设置创建Docker容器的基础镜像。RUN addgroup -S springdocker && adduser -S springdocker -G springdocker为容器添加一个用户配置文件。USER springdocker:springdocker设置容器中的用户,使其能够以管理员身份在容器中执行命令。ARG JAR_FILE=target/*.jar将由 命令生成的 的路径设置为 变量。gradle buildjarARG_FILECOPY ${JAR_FILE} app.jar将运行 命令后创建的 文件复制到 docker 容器内的 文件。gradle buildjarapp.jarENTRYPOINT ["java","-jar","/app.jar"]表示该容器有一个可执行文件。
构建Docker镜像
要从我们上面创建的Dockerfile中构建一个Docker镜像,请执行下面的命令。
$ docker build --build-arg JAR_FILE=build/libs/\*.jar -t spring-boot-docker:latest .
--build-arg JAR_FILE=build/libs/\*.jar设置运行 命令所生成的 文件的路径。gradle buildjar-t设置镜像的标签。.表示 在当前目录中。Dockerfile
执行下面的命令,列出你电脑上所有可用的Docker镜像。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
spring-boot-docker latest b7a1056c3eb2 31 minutes ago 143MB
springio/gs-spring-boot-docker latest b7a1056c3eb2 31 minutes ago 143MB
<none> <none> 4f8c8633df3e 2 days ago 105MB
latest latest 6c802830c996 4 weeks ago 414MB
从上面的列表中,我们看到了我们已经创建的spring-boot-docker 镜像。
创建和运行Docker容器
执行下面的命令,从我们上面创建的Docker镜像中创建一个Docker容器。
$ docker run --name spring-boot-docker -d -p 8080:8080 spring-boot-docker:latest
--nameflag设置Docker容器的名称。-dflag使镜像在后台运行。-p 8080:8080将Docker容器中的8080端口映射到localhost的8080端口。spring-boot-docker:latest指定构建Docker容器的镜像。
执行下面的命令,列出所有运行中的Docker容器。
$ docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
792fce534e3a spring-boot-docker "java -jar /app.jar" 31 minutes ago Up 31 minutes 0.0.0.0:8080->8080/tcp spring-boot-docker
- 访问8080端口的
localhost,确认spring-boot-crud应用程序是否在容器中运行。

将Docker镜像推送至Docker Hub

Docker Hub是一个Docker容器镜像的在线存储库。Docker Hub存储Docker容器,同时也使与其他开发者分享Docker镜像更加容易。
创建账户后,登录Docker Hub,创建一个仓库,名称为spring-boot-crud ,描述为Spring Boot Docker Image 。
执行下面的命令,将Docker镜像推送到我们在Docker Hub中创建的仓库。
$ docker login
$ docker tag spring-boot-docker:latest <username>/spring-boot-docker:latest
$ docker push <username>/spring-boot-docker:latest
docker login命令可以在命令行上验证你的Docker Hub账户,从而使推送Docker镜像到Docker Hub成为可能。docker tag spring-boot-docker: latest <username>/spring-boot-docker: latest这个命令修改了我们本地Docker镜像的标签,包括Docker Hub的用户名。docker push <username>/spring-boot-docker: latest将镜像推送到我们之前创建的Docker Hub仓库。
注意:用你的实际Docker Hub用户名替换<username> 。
总结
Docker是一个很好的工具,用于构建和打包具有必要依赖性的应用程序,以便在本地和生产中运行它们。Docker playground是一个基于浏览器的环境,你可以用它来测试各种Docker命令,而不用在你的电脑上安装Docker。