我想在Spring Boot中建立一个简单的Web应用程序!【使用Docker进行环境设置】

【背景】

这篇文章是之前的文章”利用Spring Boot创建简单的Web应用!【实施CRUD操作】”的续篇。
为了能够轻松地部署之前创建的Todo应用程序,我们将尝试使用Docker构建环境。
我们将根据之前的代码进行操作,如果配置相同,则应该可以轻松地进行环境搭建。

【这篇文章的内容】

使用Docker构建使用Spring Boot和MySQL的应用程序环境。
构建环境是maven,但也作为补充提供了使用gradle的解释。

【开发环境】

    • PC: MacBook Pro(2019)

 

    • プロセッサ: 1.4 GHz クアッドコアIntel Core i5

 

    • OS: macOS 12.2.1

 

    • IDE: IntelliJ IDEA 2021.2.3(Community Edition)

 

    • Java: openjdk 11.0.12 2021-07-20 LTS

 

    • Spring Boot: 2.6.1

 

    • maven: 3.8.4

 

    • MySQL: 8.0.28

 

    • Docker Desktop: 4.7.0

Docker: 20.10.14
docer-compose: 1.29.2

请注意,从现在开始我将使用Mac电脑。

【准备】

■安装Docker Desktop

您可以从以下链接下载Mac版和Windows版的安装程序:

Docker Desktop

■停止本地的MySQL数据库

由于在以前的文章中已经说明了在本地安装了MySQL,所以如果它正在运行,最好停止它。停止方法也在之前参考的网站上有说明。

Windows操作系统:https://prog-8.com/docs/mysql-env-win

Mac:https://prog-8.com/docs/mysql-env 的环境与MySQL有关。

【环境设置】

■ 目录结构

以下是目录结构的设定。

TodoApp
|-- SpringBootTodo
|   |-- src
|   |-- pom.xml
|   `-- Dockerfile
|-- mysql
|   |-- Dockerfile
|   |-- data
|   `-- settings
|       `-- setting.cnf
`-- docker-compose.yml
    • SpringBootTodo

前回作成したアプリのディレクトリ
他のアプリへの差し替え可能

mysql

data: DBのデータを格納する
settings: MySQLの設定ファイルを格納する

■修改pom.xml文件

<!--省略-->
	<build>
		<finalName>app</finalName> <!--追加-->
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<excludes>
						<exclude>
							<groupId>org.projectlombok</groupId>
							<artifactId>lombok</artifactId>
						</exclude>
					</excludes>
				</configuration>
			</plugin>
		</plugins>
	</build>
<!--省略-->

为了将构建后的文件名设置为”app”,我们添加了app。可以使用任何喜欢的名称,但需要注意的是,接下来需要修改的Dockerfile。

创建Spring Boot的Dockerfile

FROM maven:3.8.4-jdk-11 AS builder
WORKDIR /tmp
COPY ./src ./src
COPY ./pom.xml .
RUN mvn package

FROM openjdk:11.0.14.1-oracle
COPY --from=builder /tmp/target/app.jar /app/app.jar
EXPOSE 8080

这个Spring Boot的Dockerfile是根据这篇文章参考的。
这里分为构建和应用程序运行两部分。

    • ビルド

mavenのビルド環境を用意
作業ディレクトリを/tmpにする
./srcをコピー
./pom.xmlをコピー
mavenのビルドコマンドを実行

アプリケーション実行

Javaの実行環境を用意
ビルドして作成したapp.jarファイルをコピー
コンテナのポートを8080に指定

创建一个MySQL的Dockerfile。

FROM mysql:8.0.28-debian

EXPOSE 3306

MySQL的Dockerfile是参考了这位同事的文章。(非常感谢他/她的简洁明了的文章)

    • mysqlの環境を用意

 

    コンテナのポートを3306に指定

创建MySQL的配置文件

[mysqld]
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4

我只需要设置最低限度的字符编码。

创建docker-compose.yml文件。

我們將在Compose的一側進行其他設定。

version: "3"
services:
  spring-boot:
    build:
      context: ./SpringBootTodo
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      mysql:
        condition: service_started
    entrypoint: "java -jar /app/app.jar"
    networks:
      - app-net
  mysql:
    build:
      context: ./mysql
      dockerfile: Dockerfile
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/settings:/etc/mysql/conf.d/
      - ./mysql/data/:/var/lib/mysql/
    environment:
      MYSQL_DATABASE: spring_boot_todo
      MYSQL_ROOT_PASSWORD: password
    networks:
      - app-net
networks:
  app-net:
    driver: bridge
    • services

Spring Boot

Dockerfileを指定
コンテナのポート8080と実行環境のポート8080をつなぐ
MySQLの起動後に実行するように指定
実行コマンド
ネットワークを指定

MySQL

Dockerfileを指定
コンテナのポート3306と実行環境のポート3306をつなぐ
ローカルの設定とdataディレクトリをコンテナ内のディレクトリに紐付ける
作成するDB名を指定(好きな値に変更)
root権限のpasswordを指定(好きな値に変更)
ネットワークを指定

networks

アプリケーションのネットワークをbridgeで構築
networkを構築しないとうまく動かないので要注意(こちら参照)

■ 修改Spring Boot的properties文件

## ■DBの接続先情報
spring.datasource.url=jdbc:mysql://todoapp-mysql-1:3306/spring_boot_todo
spring.datasource.username=root
spring.datasource.password=password

spring.jpa.hibernate.ddl-auto=update

todoapp_mysql_1はMySQLのコンテナ名を入れる

spring_boot_todoはdocker-compose.ymlで指定したDB名を入れる

passwordはdocker-compose.ymlで指定したMySQLのroot権限のpasswordを入れる

【确认操作】

打开终端,并进入包含docker-compose.yml文件的目录,执行以下操作。

sudo docker-compose up -d
スクリーンショット 2022-04-11 23.01.14.png

【资料库】

我会提供一个参考库给你参考。

 

【补充(Gradle情况下)】

如果构建环境不是使用maven而是gradle,我们也会提供整理的内容。
(只是假设构建环境不同的情况下进行详细记录)

■修改 build.gradle

// 省略
bootJar{
	archiveFileName = 'app.jar'
}
// 省略

通过上述操作将文件名固定为app.jar。

■创建Spring Boot的Dockerfile(使用Gradle版本)

FROM gradle:7.4.1-jdk11 AS builder
WORKDIR /tmp
COPY ./src ./src
COPY ./build.gradle .
RUN gradle build

FROM openjdk:11.0.14.1-oracle
COPY --from=builder /tmp/build/libs/app.jar /app/app.jar
EXPOSE 8080

和Maven几乎一样,只是根据Gradle来调整文件名、命令和输出路径等。这就是它与Maven的区别!

【总结】

这次我们使用Docker构建了一个使用Spring Boot和MySQL的应用程序环境。通过使用Docker,开发和部署变得更加高效,因此我们希望能充分利用它。

如果这篇文章有任何错误,请毫不犹豫地指出来。

如果这篇文章对大家有所帮助,我会感到非常幸福。

【文献引用】

    • Spring Bootアプリケーションのコンテナ化を試してみた

 

    • DockerでPHPとMySQLのシンプルすぎる環境構築を行う

 

    他のDockerコンテナからコンテナ内のMySQLに接続する