1 先安装安装docker-compose
参考文章:https://xr.ssword.cn/article/detail?id=1904005580834557953
2 新建一个docker-compose.yml文件,示例内容如下:
services:
# --- Spring Boot 应用服务 ---
xitemapp:
build:
context: .
dockerfile: Dockerfile
container_name: xitem-app
restart: always
ports:
- "9095:9095" # 映射端口:宿主机端口:容器端口
environment:
# 核心配置:使用服务名 'mysql' 作为主机名,Docker 会自动解析
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/xitemtask?serverTimezone=Asia/Shanghai&useUnicode=true
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=secret123
# 指定激活的配置环境
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- mysql # 确保 mysql 服务先启动
networks:
- xitem-network
# --- MySQL 数据库服务 ---
mysql:
image: mysql:8.0
container_name: mysql-db
restart: always
ports:
- "3306:3306" # 方便本地 Navicat/DBeaver 连接,生产环境建议关闭!!!
environment:
- MYSQL_ROOT_PASSWORD=secret123
- MYSQL_DATABASE=xitemtask # 自动创建数据库
volumes:
# 数据持久化:防止容器删除后数据丢失
- ./mysql/data:/var/lib/mysql
# 初始化脚本:放入此目录下的 .sql 文件会在首次启动时自动执行(宿主的./mysql/data为空时才执行)
- ./mysql/init:/docker-entrypoint-initdb.d
networks:
- xitem-network
# --- 网络配置(xitem-network 对应于容器配置中的 networks 属性) ---
networks:
xitem-network:
driver: bridge
3 新建一个Dockerfile,用于构建spring boot的容器,示例内容如下:
# 使用 OpenJDK 17 作为基础镜像 (根据你的 JDK 版本调整)
FROM eclipse-temurin:17-jdk-jammy
# 设置工作目录(指定接下来的动作,都在容器的哪个目录下进行)
WORKDIR /app
# 复制构建好的 jar 包 (COPY后面,第一个参数是宿主机的文件路径)
COPY ./myapp.jar app.jar
# 暴露端口 (与 application.yml 中的端口一致)
EXPOSE 9095
# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]
4 使用docker-compose工具进行构建
4.1 在宿主机中,单独新建一个目录,如 xitem_docker 目录,然后把 docker-compose.yml、Dockerfile放进来。
4.2 在 xitem_docker 目录中,新建 ./mysql/data 和 ./mysql/init 目录,然后把数据库初始sql放到./mysql/init中,保持./mysql/data目录为空。
4.3 执行构建命令:
docker-compose up -d --build
-d: 后台运行。
--build: 强制重新构建镜像(docker-compose.yml中,配置有 build 信息的,会被重新构建,比如示例中,我们的 xitemapp)
如果启动失败,可以通过以下命令查看 Spring Boot 的启动日志(xitemapp是配置文件中的应用名称):
docker-compose logs -f xitemapp