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
posted @   学不可以己  阅读(640)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示