Docker Compose 部署运行Spring Boot 项目+ MySQL
描述
本文目的在于使用Docker Compose来创建一个运行Spring Boot项目的镜像并且该项目连接MySQL数据库。
文件结构
Example/
------- t2.Dockerfile
------- docker-compose.yml
------- data/
------ schema.sql
------ data.sql
运行命令是所在的位置是Example里面
1. Dockerfile 文件
以下内容保存为t2.Dockerfile。
FROM adoptopenjdk/openjdk15-openj9:alpine-jre #使用轻量级linux的镜像,里面使用JDK15
RUN mkdir /app #在容器的根目录中 创建一个叫app的文件夹
COPY ./t2.jar /app #把当前所在路径中的t2.jar文件复制到容器的app的文件夹里面
WORKDIR /app #把容器的工作目录换成app,所以运行docker exec -it 容器名 /bin/bash 进入容器的时候,所在位置是app
EXPOSE 8081 #暴露端口 8081
ENTRYPOINT ["java", "-jar", "/app/t2.jar"] #初始化运行容器时,运行程序
创建Docker镜像
-t name, name就是之后该镜像的名字。
docker build . -f t2.Dockerfile -t image-t2
docker images #列出镜像,确定是否创建成功
如果要上传到某个远程仓库中可以运行以下命令。在这里仓库网址是example.com
docker image tag image-t2 example.com:5000/image-t2
docker image push example.com:5000/image-t2
2. Docker Compose 文件
以下内容保存为docker-compose.yml。
version: "3.9"
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: example
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
volumes:
- ./data:/docker-entrypoint-initdb.d #在data的文件中包括了 .sql文件(建表,插入数据等),会在容器创建是自动运行。
ports:
- 3306:3306
container_name: mysql #定义容器的名字为mysql
t2:
build:
context: .
dockerfile: t2.Dockerfile
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/example?serverTimezone=UTC #覆盖在spring boot项目中application.properties的spring.datasource.url的内容。 如果没有定义container_name,那么jdbc:mysql://名字:3306... 这里的名字要写定义的服务的名字, 在这个例子中就是db
ports:
- 8081:8081
depends_on:
- db #依赖于mysql容器
links:
- db
container_name: t2
创建所有容器并且运行
docker-compose up -d
停止所有容器
docker-compose down

浙公网安备 33010602011771号