Java11+Spring Boot+Dockerで作るWebアプリケーション
こんにちは、福圓です。
冬休み中に個人的に欲しいと感じてとあるWebアプリケーションを作っていました。その時に作成したアプリケーションの構成をメモとしてブログに残しておきたいと思います。実際に作成したものと内容は異なりますが、構成としてはWebアプリケーションからデータベースにアクセスして取得したデータの一覧を画面に表示する、といったシンプルなものです。一度に全てを書くと若干長くなるので2回に分割して掲載したいと思います。
使用する言語やフレームワーク、RDBMSは以下の通りです。
IDEはIntelliJ IDEAを使用しております。
Java11(OpenJDK)
Spring Boot
MySQL5.7
プロジェクトの雛形を作成
まずはプロジェクトの雛形を作成します。
IntelliJで開発している場合はメインメニューからファイル | 新規 | プロジェクトを選択し、Spring Initializrを選択して雛形を作成することが出来ます。
ビルドシステムはGradleを使用します。
ここで必要なライブラリ関連を選択します。
Lombokはアノテーションを付けるだけでgetter, setter, toString, equalsなどをコンパイル時に自動生成してくれる便利なライブラリです。
ThymeleafはSpring Bootで使用が推奨されているテンプレートエンジンです。
雛形作成後はこのような形となります。
DockerでMySQLを使用できるようにする
次にDockerでMySQLを使用できるように環境を構築していきます。
以下のようにルートディレクトリにdockerディレクトリとdocker-compose.ymlを作成します。
├── build.gradle
├── docker
│ └── mysql
│ ├── Dockerfile
│ ├── conf.d
│ │ └── my.cnf
│ └── initdb.d
│ ├── 1_schema.sql
│ └── 2_initdata.sql
├── docker-compose.yml
Dockerfile
FROM mysql:5.7
RUN touch /var/log/mysql/mysqld.log
my.cnf
[mysqld]
character-set-server=utf8mb4
explicit-defaults-for-timestamp=1
general-log=1
general-log-file=/var/log/mysql/mysqld.log
[client]
default-character-set=utf8mb4
1_schema.sql
CREATE TABLE customer (
id INT NOT NULL AUTO_INCREMENT,
first_name varchar(20),
last_name varchar(20),
PRIMARY KEY (id)
);
2_initdata.sql
INSERT INTO customer(first_name, last_name) VALUES('Tarou', 'Tanaka');
INSERT INTO customer(first_name, last_name) VALUES('Jiro', 'Suzuki');
docker-compose.yml
version: '2'
services:
dbserver:
build: ./docker/mysql
image: demo-db:0.0.1
restart: always
environment:
MYSQL_DATABASE: demo_db
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: rootpassword
ports:
- "3314:3306"
volumes:
- ./docker/mysql/initdb.d:/docker-entrypoint-initdb.d
- ./docker/mysql/conf.d:/etc/mysql/conf.d
- ./log/mysql:/var/log/mysql
volumes:
mysql-db:
driver: local
MySQLコンテナを立ち上げてログインしてみる
以下のコマンドでサービスのビルドと同時にサービスを起動します。
先程作成したsqlのスクリプトが実行されてテーブルとデータが作成されます。
$ docker-compose up -d --build
以下のようにMySQLのコンテナが立ち上がります。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a24978ff730 demo-db:0.0.1 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 33060/tcp, 0.0.0.0:3314->3306/tcp demo_dbserver_1
コンテナが立ち上がったことを確認したので、MySQLにログインしてテーブルが作成されているか確認します。
$ docker exec -it demo_dbserver_1 bash
root@5a24978ff730:/# mysql -u user -ppassword demo_db
mysql> select * from customer;
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
| 1 | Taro | Tanaka |
| 2 | Jiro | Suzuki |
+----+------------+-----------+
1 row in set (0.00 sec)
テーブルが作成されていることを確認したところで今回は終わりたいと思います。
今回はWebアプリケーションの雛形を作成してDockerでMySQLコンテナを立ち上げるところまでを実施しました。
次回は実際にWebアプリケーションからMySQLに接続して取得したデータを画面に表示するところまでを掲載しようと思います。
なお、MMMは会社としてもDockerコンテナに注力しています。ぜひ以下のページをご覧ください。
・Dockerコンテナ基盤(AWS Fargate/Amazon ECS)