容器化 Spring Boot 应用程序
1.建立项目目录
[root@host1 tomcat-mysql]# cd
[root@host1 ~]# cd
[root@host1 ~]# mkdir -p spring-boot
[root@host1 ~]# mkdir -p spring-boot/app/src/main/java/com/abc/hello
[root@host1 ~]# mkdir -p spring-boot/nginx/conf.d
2.准备 Spring Boot 应用程序代码
[root@host1 ~]# cat spring-boot/app/src/main/java/com/abc/hello/Application.java
package com.abc.hello;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {public static void main(String[] args) {ApplicationContext ctx = SpringApplication.run(Application.class, args);}
}
[root@host1 ~]# vi spring-boot/app/src/main/java/com/abc/hello/HelloController.java
[root@host1 ~]# cat spring-boot/app/src/main/java/com/abc/hello/HelloController.java
package com.abc.hello;import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;@RestController
public class HelloController {@RequestMapping("/")public String index() {return "Hello, Spring Boot!\n";}
}
[root@host1 ~]# vi spring-boot/app/pom.xml
[root@host1 ~]# cat spring-boot/app/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.abc</groupId><artifactId>hello</artifactId><version>0.1-SNAPSHOT</version><!-- Spring Boot 父工程依赖 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.0.RELEASE</version></parent><dependencies><!-- Web 应用核心依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 开发热部署依赖(可选,方便修改代码后自动重启) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><!-- MySQL 连接器(示例包含,若不需要可暂时注释) --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies><!-- Maven 打包插件 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
[root@host1 ~]# vi spring-boot/app/Dockerfile
[root@host1 ~]# cat spring-boot/app/Dockerfile
FROM maven:3.8-jdk-8
3.提供 Nginx 配置文件
[root@host1 ~]# vi spring-boot/nginx/conf.d/app.conf
[root@host1 ~]# cat spring-boot/nginx/conf.d/app.conf
server {listen 80; # 监听 80 端口(外部访问端口)charset utf-8;access_log off; # 关闭访问日志(可选,简化输出)location / {# 转发请求到 Spring Boot 服务(服务名“app”由 Compose 维护)proxy_pass http://app:8080;proxy_set_header Host $host:$server_port;proxy_set_header X-Forwarded-Host $server_name;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}# 静态资源配置(示例,若无需静态资源可暂时注释)location /static {access_log off;expires 30d; # 静态资源缓存 30 天alias /app/static;}
}
4.在项目根目录下创建名为 compose.yaml 的 Compose 文件
[root@host1 ~]# vi spring-boot/compose.yaml
[root@host1 ~]# cat spring-boot/compose.yaml
services:# 1. Nginx 服务:反向代理 + 暴露 80 端口nginx:container_name: spbt-nginximage: nginx:1.16restart: always # 容器异常时自动重启ports:- "80:80" # 主机 80 端口 → 容器 80 端口- "443:443" # HTTPS 端口(示例预留,可暂不关注)volumes:# 本地 Nginx 配置 → 容器内 Nginx 配置目录- ./nginx/conf.d:/etc/nginx/conf.ddepends_on:- app # 确保 Nginx 在 Spring Boot 服务后启动# 2. MySQL 服务:数据库存储mysql:container_name: spbt-mysqlimage: mysql/mysql-server:8.0environment:MYSQL_DATABASE: test # 初始化数据库名MYSQL_ROOT_PASSWORD: root # root 用户密码MYSQL_ROOT_HOST: '%' # 允许任意主机连接 rootLANG: C.UTF-8 # 字符集配置ports:- "3306:3306" # 主机 3306 端口 → 容器 3306 端口(可选,方便外部连接)volumes:- mysql-data:/var/lib/mysql # 持久化 MySQL 数据restart: always# 3. Spring Boot 服务:业务应用app:container_name: spbt-appbuild: ./app # 从 ./app 目录的 Dockerfile 构建镜像restart: alwaysworking_dir: /app # 容器内工作目录volumes:- ./app:/app # 本地代码 → 容器内代码目录(热更新用)- ~/.m2:/root/.m2 # 本地 Maven 仓库 → 容器内 Maven 仓库(加速依赖下载)expose:- "8080" # 暴露容器内 8080 端口(供 Nginx 转发)depends_on:- mysql # 确保 Spring Boot 在 MySQL 后启动command: mvn clean spring-boot:run # 启动命令:清理 + 启动 Spring Bootvolumes:mysql-data: # 持久化 MySQL 数据的卷(容器删除后数据不丢失)
5.查看当前项目的目录结构
[root@host1 spring-boot]# tree .
.
├── app
│ ├── Dockerfile
│ ├── pom.xml
│ ├── settings.xml
│ ├── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── abc
│ │ └── hello
│ │ ├── Application.java
│ │ └── HelloController.java
│ └── target
│ ├── classes
│ │ └── com
│ │ └── abc
│ │ └── hello
│ │ ├── Application.class
│ │ └── HelloController.class
│ ├── generated-sources
│ │ └── annotations
│ └── maven-status
│ └── maven-compiler-plugin
│ └── compile
│ └── default-compile
│ ├── createdFiles.lst
│ └── inputFiles.lst
├── compose.yaml
└── nginx└── conf.d└── app.conf
6.启动整个应用程序
[root@host1 ~]# cd spring-boot
[root@host1 spring-boot]# docker compose up --build
[+] Running 12/12✔ mysql Pulled 67.2s ✔ 6a4a3ef82cdc Pull complete 20.0s ✔ 5518b09b1089 Pull complete 20.2s ✔ b6b576315b62 Pull complete 57.0s ✔ 349b52643cc3 Pull complete 57.0s ✔ abe8d2406c31 Pull complete 57.1s ✔ c7668948e14a Pull complete 57.1s ✔ c7e93886e496 Pull complete 57.1s ✔ nginx Pulled 24.0s ✔ 54fec2fa59d0 Pull complete 12.4s ✔ 5546cfc92772 Pull complete 13.9s ✔ 50f62e3cdaf7 Pull complete 13.9s
[+] Building 27.8s (7/7) FINISHED => [internal] load local bake definitions 0.0s=> => reading from stdin 491B 0.0s=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 118B 0.0s=> [internal] load metadata for docker.io/library/maven:3.8-jdk-8 5.3s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [1/1] FROM docker.io/library/maven:3.8-jdk-8@sha256:ff18d86faefa15d1445d0fa4874408cc96dec 22.0s=> => resolve docker.io/library/maven:3.8-jdk-8@sha256:ff18d86faefa15d1445d0fa4874408cc96dec0 0.0s=> => sha256:29cc4c106af036b3727fad911174511d5af3103710419e1fd3d0718aa217f7ae 2.42kB / 2.42kB 0.0s=> => sha256:4edc8c438f43cf132f12c2e984668e727ef3907bdf4c1866285bcacfe466ce55 8.60kB / 8.60kB 0.0s=> => sha256:52a8c426d30b691c4f7e8c4b438901ddeb82ff80d4540d5bbd49986376d85cc9 210B / 210B 2.1s=> => sha256:ff18d86faefa15d1445d0fa4874408cc96dec068eb3487a0fc6d07f359a24607 549B / 549B 0.0s=> => sha256:8754a66e005039a091c5ad0319f055be393c7123717b1f6fee8647c338f 105.92MB / 105.92MB 14.7s=> => sha256:39bc17d35d34ad756fdb0e4d938d529d901eed8ab34d0ec458db1197cd4c479d 8.74MB / 8.74MB 2.4s=> => extracting sha256:52a8c426d30b691c4f7e8c4b438901ddeb82ff80d4540d5bbd49986376d85cc9 0.0s=> => sha256:3262383b247749a26f3f83373afc4a3c6984b3de294a5c47d0798acec20f6bc6 855B / 855B 3.4s=> => sha256:25bbf367674f80baebc54faa6734c6a0a759f9f470b739bae286075987524f25 362B / 362B 3.2s=> => extracting sha256:8754a66e005039a091c5ad0319f055be393c7123717b1f6fee8647c338ff3ceb 6.6s=> => extracting sha256:39bc17d35d34ad756fdb0e4d938d529d901eed8ab34d0ec458db1197cd4c479d 0.4s=> => extracting sha256:3262383b247749a26f3f83373afc4a3c6984b3de294a5c47d0798acec20f6bc6 0.0s=> => extracting sha256:25bbf367674f80baebc54faa6734c6a0a759f9f470b739bae286075987524f25 0.0s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:472991004b73f053fd2f4f6d2fcd24829d4444261b827af371b6af60431cc49b 0.0s=> => naming to docker.io/library/spring-boot-app 0.0s=> resolving provenance for metadata file 0.0s
[+] Running 6/6✔ spring-boot-app Built 0.0s ✔ Network spring-boot_default Created 0.1s ✔ Volume "spring-boot_mysql-data" Created 0.0s ✔ Container spbt-mysql Created 14.7s ✔ Container spbt-app Created 0.0s ✔ Container spbt-nginx Created 0.0s
Attaching to spbt-app, spbt-mysql, spbt-nginx
Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint spbt-mysql (69459d26d5c36e33581a2ebd11d6056082b867a9afc9f26d8677ea6336c99b2b): failed to bind host port for 0.0.0.0:3306:172.20.0.2:3306/tcp: address already in use
[root@host1 ~]# cd spring-boot
[root@host1 spring-boot]# docker compose up --build
[+] Running 12/12✔ mysql Pulled 67.2s ✔ 6a4a3ef82cdc Pull complete 20.0s ✔ 5518b09b1089 Pull complete 20.2s ✔ b6b576315b62 Pull complete 57.0s ✔ 349b52643cc3 Pull complete 57.0s ✔ abe8d2406c31 Pull complete 57.1s ✔ c7668948e14a Pull complete 57.1s ✔ c7e93886e496 Pull complete 57.1s ✔ nginx Pulled 24.0s ✔ 54fec2fa59d0 Pull complete 12.4s ✔ 5546cfc92772 Pull complete 13.9s ✔ 50f62e3cdaf7 Pull complete 13.9s
[+] Building 27.8s (7/7) FINISHED => [internal] load local bake definitions 0.0s=> => reading from stdin 491B 0.0s=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 118B 0.0s=> [internal] load metadata for docker.io/library/maven:3.8-jdk-8 5.3s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [1/1] FROM docker.io/library/maven:3.8-jdk-8@sha256:ff18d86faefa15d1445d0fa4874408cc96dec 22.0s=> => resolve docker.io/library/maven:3.8-jdk-8@sha256:ff18d86faefa15d1445d0fa4874408cc96dec0 0.0s=> => sha256:29cc4c106af036b3727fad911174511d5af3103710419e1fd3d0718aa217f7ae 2.42kB / 2.42kB 0.0s=> => sha256:4edc8c438f43cf132f12c2e984668e727ef3907bdf4c1866285bcacfe466ce55 8.60kB / 8.60kB 0.0s=> => sha256:52a8c426d30b691c4f7e8c4b438901ddeb82ff80d4540d5bbd49986376d85cc9 210B / 210B 2.1s=> => sha256:ff18d86faefa15d1445d0fa4874408cc96dec068eb3487a0fc6d07f359a24607 549B / 549B 0.0s=> => sha256:8754a66e005039a091c5ad0319f055be393c7123717b1f6fee8647c338f 105.92MB / 105.92MB 14.7s=> => sha256:39bc17d35d34ad756fdb0e4d938d529d901eed8ab34d0ec458db1197cd4c479d 8.74MB / 8.74MB 2.4s=> => extracting sha256:52a8c426d30b691c4f7e8c4b438901ddeb82ff80d4540d5bbd49986376d85cc9 0.0s=> => sha256:3262383b247749a26f3f83373afc4a3c6984b3de294a5c47d0798acec20f6bc6 855B / 855B 3.4s=> => sha256:25bbf367674f80baebc54faa6734c6a0a759f9f470b739bae286075987524f25 362B / 362B 3.2s=> => extracting sha256:8754a66e005039a091c5ad0319f055be393c7123717b1f6fee8647c338ff3ceb 6.6s=> => extracting sha256:39bc17d35d34ad756fdb0e4d938d529d901eed8ab34d0ec458db1197cd4c479d 0.4s=> => extracting sha256:3262383b247749a26f3f83373afc4a3c6984b3de294a5c47d0798acec20f6bc6 0.0s=> => extracting sha256:25bbf367674f80baebc54faa6734c6a0a759f9f470b739bae286075987524f25 0.0s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:472991004b73f053fd2f4f6d2fcd24829d4444261b827af371b6af60431cc49b 0.0s=> => naming to docker.io/library/spring-boot-app 0.0s=> resolving provenance for metadata file 0.0s
[+] Running 6/6✔ spring-boot-app Built 0.0s ✔ Network spring-boot_default Created 0.1s ✔ Volume "spring-boot_mysql-data" Created 0.0s ✔ Container spbt-mysql Created 14.7s ✔ Container spbt-app Created 0.0s ✔ Container spbt-nginx Created 0.0s
Attaching to spbt-app, spbt-mysql, spbt-nginx
Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint spbt-mysql (69459d26d5c36e33581a2ebd11d6056082b867a9afc9f26d8677ea6336c99b2b): failed to bind host port for 0.0.0.0:3306:172.20.0.2:3306/tcp: address already in use
[root@host1 spring-boot]# ss -tulpn | grep 3306
tcp LISTEN 0 151 *:3306 *:* users:(("mysqld",pid=606460,fd=33))
tcp LISTEN 0 70 *:33060 *:* users:(("mysqld",pid=606460,fd=21))
[root@host1 spring-boot]# systemctl stop mysqld
[root@host1 spring-boot]# spring-boot/compose.yaml
-bash: spring-boot/compose.yaml: 没有那个文件或目录
[root@host1 spring-boot]# cd
[root@host1 ~]# spring-boot/compose.yaml
-bash: spring-boot/compose.yaml: 权限不够
[root@host1 ~]# vi spring-boot/compose.yaml
[root@host1 ~]# cat spring-boot/compose.yaml
services:# 1. Nginx 服务:反向代理 + 暴露 80 端口nginx:container_name: spbt-nginximage: nginx:1.16restart: always # 容器异常时自动重启ports:- "80:80" # 主机 80 端口 → 容器 80 端口- "443:443" # HTTPS 端口(示例预留,可暂不关注)volumes:# 本地 Nginx 配置 → 容器内 Nginx 配置目录- ./nginx/conf.d:/etc/nginx/conf.ddepends_on:- app # 确保 Nginx 在 Spring Boot 服务后启动# 2. MySQL 服务:数据库存储mysql:container_name: spbt-mysqlimage: mysql/mysql-server:8.0environment:MYSQL_DATABASE: test # 初始化数据库名MYSQL_ROOT_PASSWORD: root # root 用户密码MYSQL_ROOT_HOST: '%' # 允许任意主机连接 rootLANG: C.UTF-8 # 字符集配置ports:- "3307:3306" # 主机 3306 端口 → 容器 3306 端口(可选,方便外部连接)volumes:- mysql-data:/var/lib/mysql # 持久化 MySQL 数据restart: always# 3. Spring Boot 服务:业务应用app:container_name: spbt-appbuild: ./app # 从 ./app 目录的 Dockerfile 构建镜像restart: alwaysworking_dir: /app # 容器内工作目录volumes:- ./app:/app # 本地代码 → 容器内代码目录(热更新用)- ~/.m2:/root/.m2 # 本地 Maven 仓库 → 容器内 Maven 仓库(加速依赖下载)expose:- "8080" # 暴露容器内 8080 端口(供 Nginx 转发)depends_on:- mysql # 确保 Spring Boot 在 MySQL 后启动command: mvn clean spring-boot:run # 启动命令:清理 + 启动 Spring Bootvolumes:mysql-data: # 持久化 MySQL 数据的卷(容器删除后数据不丢失)
[root@host1 ~]# docker compose down
[root@host1 ~]# docker compose up --build
[+] Running 3/3✔ Network root_default Created 0.1s ✔ Volume "root_mysql8-data" Created 0.0s ✔ Container mysql8 Created 0.1s
Attaching to mysql8
mysql8 | 2025-09-22 11:20:49+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.4.6-1.el9 started.
mysql8 | 2025-09-22 11:20:50+08:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
mysql8 | 2025-09-22 11:20:50+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.4.6-1.el9 started.
mysql8 | 2025-09-22 11:20:51+08:00 [Note] [Entrypoint]: Initializing database files
mysql8 | 2025-09-22T03:20:51.167338Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
mysql8 | 2025-09-22T03:20:51.177191Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.4.6) initializing of server in progress as process 80
mysql8 | 2025-09-22T03:20:51.204652Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
mysql8 | 2025-09-22T03:20:51.737688Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
mysql8 | 2025-09-22T03:20:54.302308Z 0 [ERROR] [MY-000067] [Server] unknown variable 'default-authentication-plugin=mysql_native_password'.
mysql8 | 2025-09-22T03:20:54.303850Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it.
mysql8 | 2025-09-22T03:20:54.303950Z 0 [ERROR] [MY-010119] [Server] Aborting
mysql8 | 2025-09-22T03:20:56.526855Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.
mysql8 exited with code 1
/2.10.0/jackson-core-2.10.0.pom (4.6 kB at 6.4 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.0/jackson-datatype-jdk8-2.10.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.10.0/jackson-datatype-jdk8-2.10.0.pom (2.2 kB at 3.4 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/com/fasterxml/jackson/module/jackson-modules-java8/2.10.0/jackson-modules-java8-2.10.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/fasterxml/jackson/module/jackson-modules-java8/2.10.0/jackson-modules-java8-2.10.0.pom (3.2 kB at 2.4 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.0/jackson-datatype-jsr310-2.10.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.10.0/jackson-datatype-jsr310-2.10.0.pom (4.5 kB at 1.7 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/com/fasterxml/jackson/module/jackson-module-parameter-names/2.10.0/jackson-module-parameter-names-2.10.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/fasterxml/jackson/module/jackson-module-parameter-names/2.10.0/jackson-module-parameter-names-2.10.0.pom (4.0 kB at 3.9 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-tomcat/2.2.0.RELEASE/spring-boot-starter-tomcat-2.2.0.RELEASE.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-tomcat/2.2.0.RELEASE/spring-boot-starter-tomcat-2.2.0.RELEASE.pom (2.8 kB at 4.5 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/apache/tomcat/embed/tomcat-embed-core/9.0.27/tomcat-embed-core-9.0.27.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/tomcat/embed/tomcat-embed-core/9.0.27/tomcat-embed-core-9.0.27.pom (1.8 kB at 1.0 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/apache/tomcat/embed/tomcat-embed-el/9.0.27/tomcat-embed-el-9.0.27.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/tomcat/embed/tomcat-embed-el/9.0.27/tomcat-embed-el-9.0.27.pom (1.5 kB at 1.4 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.27/tomcat-embed-websocket-9.0.27.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.27/tomcat-embed-websocket-9.0.27.pom (1.8 kB at 1.7 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/apache/tomcat/tomcat-annotations-api/9.0.27/tomcat-annotations-api-9.0.27.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/tomcat/tomcat-annotations-api/9.0.27/tomcat-annotations-api-9.0.27.pom (1.5 kB at 2.4 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-validation/2.2.0.RELEASE/spring-boot-starter-validation-2.2.0.RELEASE.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-validation/2.2.0.RELEASE/spring-boot-starter-validation-2.2.0.RELEASE.pom (2.8 kB at 2.5 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/jakarta/validation/jakarta.validation-api/2.0.1/jakarta.validation-api-2.0.1.pom
Downloaded from central: https://repo.maven.apache.org/maven2/jakarta/validation/jakarta.validation-api/2.0.1/jakarta.validation-api-2.0.1.pom (12 kB at 3.1 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/hibernate/validator/hibernate-validator/6.0.17.Final/hibernate-validator-6.0.17.Final.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/hibernate/validator/hibernate-validator/6.0.17.Final/hibernate-validator-6.0.17.Final.pom (15 kB at 3.0 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/hibernate/validator/hibernate-validator-parent/6.0.17.Final/hibernate-validator-parent-6.0.17.Final.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/hibernate/validator/hibernate-validator-parent/6.0.17.Final/hibernate-validator-parent-6.0.17.Final.pom (61 kB at 5.6 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/jboss/arquillian/arquillian-bom/1.1.11.Final/arquillian-bom-1.1.11.Final.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/jboss/arquillian/arquillian-bom/1.1.11.Final/arquillian-bom-1.1.11.Final.pom (11 kB at 2.3 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/jboss/shrinkwrap/shrinkwrap-bom/1.2.3/shrinkwrap-bom-1.2.3.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/jboss/shrinkwrap/shrinkwrap-bom/1.2.3/shrinkwrap-bom-1.2.3.pom (4.0 kB at 6.4 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/jboss/shrinkwrap/resolver/shrinkwrap-resolver-bom/2.2.0/shrinkwrap-resolver-bom-2.2.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/jboss/shrinkwrap/resolver/shrinkwrap-resolver-bom/2.2.0/shrinkwrap-resolver-bom-2.2.0.pom (5.3 kB at 1.9 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/jboss/shrinkwrap/descriptors/shrinkwrap-descriptors-bom/2.0.0-alpha-8/shrinkwrap-descriptors-bom-2.0.0-alpha-8.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/jboss/shrinkwrap/descriptors/shrinkwrap-descriptors-bom/2.0.0-alpha-8/shrinkwrap-descriptors-bom-2.0.0-alpha-8.pom (5.2 kB at 4.0 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/jboss/logging/jboss-logging/3.4.1.Final/jboss-logging-3.4.1.Final.pom (5.0 kB at 5.4 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/jboss/jboss-parent/34/jboss-parent-34.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/jboss/jboss-parent/34/jboss-parent-34.pom (65 kB at 6.5 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/com/fasterxml/classmate/1.5.0/classmate-1.5.0.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/fasterxml/classmate/1.5.0/classmate-1.5.0.pom (6.6 kB at 2.4 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/com/fasterxml/oss-parent/35/oss-parent-35.pom
Downloaded from central: https://repo.maven.apache.org/maven2/com/fasterxml/oss-parent/35/oss-parent-35.pom (23 kB at 6.2 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/spring-webmvc/5.2.0.RELEASE/spring-webmvc-5.2.0.RELEASE.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/springframework/spring-webmvc/5.2.0.RELEASE/spring-webmvc-5.2.0.RELEASE.pom (2.6 kB at 1.8 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-devtools/2.2.0.RELEASE/spring-boot-devtools-2.2.0.RELEASE.pom
Downloaded from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-devtools/2.2.0.RELEASE/spring-boot-devtools-2.2.0.RELEASE.pom (5.7 kB at 2.3 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.pom
Downloaded from central: https://repo.maven.apache.org/maven2/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.pom (1.1 kB at 789 B/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-web/2.2.0.RELEASE/spring-boot-starter-web-2.2.0.RELEASE.jar
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter/2.2.0.RELEASE/spring-boot-starter-2.2.0.RELEASE.jar
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-logging/2.2.0.RELEASE/spring-boot-starter-logging-2.2.0.RELEASE.jar
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-web/2.2.0.RELEASE/spring-boot-starter-web-2.2.0.RELEASE.jar (403 B at 876 B/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.28/slf4j-api-1.7.28.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter/2.2.0.RELEASE/spring-boot-starter-2.2.0.RELEASE.jar (397 B at 78 B/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/apache/logging/log4j/log4j-to-slf4j/2.12.1/log4j-to-slf4j-2.12.1.jar (17 kB at 2.5 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/apache/logging/log4j/log4j-api/2.12.1/log4j-api-2.12.1.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/1.7.28/slf4j-api-1.7.28.jar (41 kB at 4.6 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/slf4j/jul-to-slf4j/1.7.28/jul-to-slf4j-1.7.28.jar
Downloaded from central: https://repo.maven.apache.org/maven2/org/slf4j/jul-to-slf4j/1.7.28/jul-to-slf4j-1.7.28.jar (4.6 kB at 437 B/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar
Downloaded from central: https://repo.maven.apache.org/maven2/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar (25 kB at 1.8 kB/s)
spbt-app | Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/spring-core/5.2.0.RELEASE/spring-core-5.2.0.RELEASE.jar...w Enable Watch
7.浏览器访问测试
8.实验完毕,停止执行该 Compose 应用程序并清理上述项目
[root@host1 spring-boot]# docker compose down -v
# -v 同时删除 MySQL 数据卷(若需保留数据,去掉 -v)[+] Running 5/5✔ Container spbt-nginx Removed 0.0s ✔ Container spbt-app Removed 0.0s ✔ Container spbt-mysql Removed 0.0s ✔ Volume spring-boot_mysql-data Removed 0.0s ✔ Network spring-boot_default Removed 0.2s
读者可以根据需要将示例中的 Spring Boot 代码替换成自己的代码,但需要修改相应的pom.xml 文件。