在Docker环境中启动Spring Boot Web服务
使用Docker环境来启动Spring Boot Web服务。

为了达到某个预期的结果或达成某个特定的目标。
在Windows 11上,使用Linux进行云开发。
您可以在这里查看文章的列表。
实现
在本地 Ubuntu 的 Docker 环境中,启动从 Dockerfile 构建的 Spring Boot Web 服务的自定义容器。
以JAR文件格式启动应用作为容器。
请帮我拿一下盐,好吗?
运行环境
Web服务容器
技术话题
“Dockerfile是什么?”
Dockerfile
Dockerfile是用于构建Docker容器的文本文件。Docker容器是包含运行应用程序和服务所需环境的轻量级可移植虚拟化单位。
关键词
内容
脚本格式
由于Dockerfile是以简单的脚本格式编写的,所以容易自动化容器构建过程。
层次结构
Docker镜像是通过执行Dockerfile的每个命令生成的层次结构,可以重复使用和缓存。
版本控制
由于Dockerfile是基于文本的,因此可以像代码一样在版本控制系统中方便地进行管理。
可移植性
通过Dockerfile,应用程序及其依赖关系被打包到一个容器映像中,增加了在不同环境之间的可移植性。
自动化和效率提升
使用Dockerfile可以自动化应用程序的构建和环境配置。这样可以减少手动操作的时间和人为错误,提高开发和部署过程的效率。
可重现性
由于Dockerfile完全定义了构建过程,可以在不同环境中复现相同的应用程序。这确保了在开发、测试和生产环境之间的一致性。
环境隔离
Docker容器与主机系统分离,从而避免了应用程序依赖和库冲突,可以在更安全的环境中运行。
可扩展性
使用Dockerfile可以创建自定义映像。因此可以轻松创建根据特定需求定制的容器映像。
开发环境
- Windows 11 Home 22H2 を使用しています。
> wsl –version
WSL 版本:1.0.3.0
内核版本:5.15.79.1
WSLg 版本:1.0.47
Ubuntu※ 您可以在相关文章中查看安装方法
$ lsb_release -a
没有可用的 LSB 模块。
发行商 ID:Ubuntu
描述:Ubuntu 22.04.1 LTS
发布版本:22.04
Java JDK ※ 您可以在相关文章中查看安装方法
$ java -version
openjdk 版本 “11.0.18” 2023-01-17
OpenJDK 运行时环境 (构建版本 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64 位服务器虚拟机 (构建版本 11.0.18+10-post-Ubuntu-0ubuntu122.04,混合模式,共享)
Maven ※ 您可以在相关文章中查看安装方法
$ mvn -version
Apache Maven 3.6.3
Maven 主目录:/usr/share/maven
Java 版本:11.0.18,供应商:Ubuntu,运行时:/usr/lib/jvm/java-11-openjdk-amd64
Docker ※ 您可以在相关文章中查看安装方法
$ docker –version
Docker 版本 23.0.1,构建编号 a5ee5b1
制作网络应用程序的规范
{“message”:”你好,世界!”}
展示”Hello World”的步骤
创建一个Spring Boot Web服务。
您可以在此相关文章中确认步骤。
前往项目文件夹。
将目录切换到项目文件夹。
※ 将 ~/tmp/hello-spring-boot 视为项目文件夹。
$ cd ~/tmp/hello-spring-boot
$ rm src/main/java/com/example/springboot/controller/HelloController.java
$ vim src/main/java/com/example/springboot/Application.java
文件内容:
Application.java
package com.example.springboot;
import java.util.Map;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
@RequestMapping(“/api”)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@GetMapping(“/data”)
public Map<String, String> getData() {
Map<String, String> map = Map.of(“message”, “Hello World!”);
return map;
}
}
应用程序的编译
编译Java应用程序。
※ 创建了 target/app.jar 文件。
$ mvn clean package
创建容器映像
我将创建一个 Dockerfile。
$ vim Dockerfile
文件的内容 de
# from the base image of a jdk 11 container on Ubuntu 20.04.
FROM adoptopenjdk/openjdk11:x86_64-ubuntu-jdk-11.0.18_10-slim
# create a work dir.
WORKDIR /app
# copy a jvm app.
COPY target/*.jar app.jar
# open port 8080 for a jvm app.
EXPOSE 8080
# startup a jvm app.
ENTRYPOINT ["java","-jar","app.jar"]
在这个例子中,我们执行以下步骤。
指令
内容
FROM
指定基础容器镜像。在这个例子中,我们使用了 Ubuntu 的 slim 版本镜像。
WORKDIR
指定容器内的工作目录。这里我们创建了 /app 目录。
COPY
从宿主机复制文件到容器内。target/*.jar 部分指定了 target 目录下的所有 .jar 文件,并在容器内以 app.jar 的名称复制。
EXPOSE
指定容器使用的端口。在这里,我们指定了 8080 端口。
ENTRYPOINT
指定容器启动时要执行的命令。在这个例子中,执行的是 java -jar app.jar。
通过编写这样的 Dockerfile,并使用 docker build 命令进行构建,可以创建容器镜像。
启动Docker守护进程。
$ sudo service docker start
* Starting Docker: docker [ OK ]
构建容器映像。
$ docker build \
--no-cache \
--tag app-hello-spring-boot:latest .
我要查看容器映像。
$ docker images | grep app-hello-spring-boot
REPOSITORY TAG IMAGE ID CREATED SIZE
app-hello-spring-boot latest 39115028afa6 12 seconds ago 390MB
docker images命令用于显示容器镜像列表。
grep命令用于筛选包含指定字符串的行。
启动容器
在本地启动容器。
※ 当要停止容器时,请按下 ctrl + C。
$ docker run --rm \
--publish 8080:8080 \
--name app-local \
app-hello-spring-boot
容器运行确认
我們可以從另一個終端使用curl命令來進行確認。
$ curl -v http://localhost:8080/api/data -w '\n'
发挥潜力
* Trying 127.0.0.1:8080...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /api/data HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200
< Content-Type: application/json
< Transfer-Encoding: chunked
< Date: Sun, 05 Mar 2023 13:06:44 GMT
<
* Connection #0 to host localhost left intact
{"message":"Hello World!"}
让我来检查一下容器的状态。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
377111ffea02 app-hello-spring-boot "java -jar app.jar" 4 minutes ago Up 3 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp app-local
连接到集装箱
从另一个终端连接到容器上。
$ docker exec -it app-local /bin/bash
连接到容器后,请确认目录。
※ 退出容器时按下 Ctrl+D。
# pwd
/app
# ls -lah
total 17M
drwxr-xr-x 1 root root 4.0K Aug 2 00:00 .
drwxr-xr-x 1 root root 4.0K Aug 2 09:07 ..
-rw-r--r-- 1 root root 17M Aug 1 23:46 app.jar
使用 top 命令来查看情况。
top - 10:49:52 up 1:32, 0 users, load average: 0.01, 0.04, 0.01
Tasks: 3 total, 1 running, 2 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7763.1 total, 6218.8 free, 668.9 used, 875.5 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 6859.1 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 6504924 253188 20960 S 0.3 3.2 0:08.18 java
52 root 20 0 7244 3816 3264 S 0.0 0.0 0:00.01 bash
61 root 20 0 9072 3564 3060 R 0.0 0.0 0:00.05 top
我尝试显示容器的信息。
# cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.5 LTS"
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.5 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
总结
在 WSL Ubuntu 上的 Docker 环境中,可以启动由 Dockerfile 构建的Spring Boot Web服务的自定义容器。
在WSL Ubuntu中,您可以轻松将Spring Boot Web应用程序作为Docker容器在容器环境中启动。请务必进行尝试。我们将继续介绍Java开发环境等内容,请期待。
推荐内容
相关文章
让我们与本土形象建设进行比较吧!