こんにちは。よっしーです(^^)
今日は、DockerでMySQLの開発環境を構築する方法についてご紹介します。
背景
MySQLの開発環境をDockerで構築する機会があったので、そのときの内容を備忘として残しています。
dockerでMySQL環境を構築する理由
Dockerを使用してMySQL環境を構築することにはいくつかのメリットがあります。以下に詳しく説明します。
- 環境の分離と再現性:
- Dockerコンテナは環境を隔離するため、ホストマシンの環境に影響を与えません。
- コンテナはイメージから作成されるため、同じイメージを別の環境で再現できます。これにより、開発、テスト、本番環境の一貫性を保ちやすくなります。
- 軽量で高速:
- Dockerコンテナは仮想マシンよりも軽量で、起動時間が短いです。
- MySQLコンテナは必要なライブラリや依存関係を含むイメージを使用するため、インストールや設定に時間がかかりません。
- スケーラビリティ:
- Dockerはスケーラブルなアーキテクチャをサポートしています。必要に応じてコンテナを追加できます。
- MySQLコンテナをクラスター化して、負荷分散や冗長性を実現できます。
- バージョン管理とアップグレード:
- Dockerイメージはバージョン管理されており、特定のMySQLバージョンを簡単に切り替えられます。
- アップグレード時には新しいイメージを作成してコンテナを更新できます。
- ポータビリティ:
- Dockerコンテナはどのプラットフォームでも動作します。ローカル、クラウド、オンプレミスの環境で同じイメージを使用できます。
- 環境の再現性とテスト:
- 開発者は同じDockerイメージを使用して開発、テスト、ステージング環境を構築できます。
- テスト時には本番環境と同じMySQLバージョンを使用できます。
Dockerを使用することでMySQL環境の構築と管理が効率的に行え、開発者と運用チームの生産性を向上させます。🚀
作成ファイル一覧
下記のファイルを作成しました。次のセクションにファイルの内容があります。
new file: Makefile
new file: compose.yml
new file: mysql_server/Dockerfile
Makefile
SHELL = /bin/bash
WOKR_DIR = ./
.DEFAULT_GOAL := help
# コンテナの状態
.PHONY: ps
ps:
cd $(WOKR_DIR) \
&& docker compose ps
# アプリのビルド
.PHONY: build
build:
cd $(WOKR_DIR) \
&& docker compose build
# アプリの起動
.PHONY: up
up:
cd $(WOKR_DIR) \
&& docker compose up -d
# アプリの停止
.PHONY: down
down:
cd $(WOKR_DIR) \
&& docker compose down
# コンテナの削除
.PHONY: clean
clean:
cd $(WOKR_DIR) \
&& docker compose down --rmi all --volumes --remove-orphans
# mysql_serverコンテナへのログイン
.PHONY: login_mysql_server
login_mysql_server:
cd $(WOKR_DIR) \
&& docker compose exec -it mysql_server sh
# help
.PHONY: help
help:
@grep -B 2 -E '^[a-zA-Z_-]+:' Makefile \
| grep -v '.PHONY' \
| grep -v -E '^\s*$$' \
| tr '\n' ',' \
| sed 's/--,/\n/g' \
| awk -F, '{printf "%-20s %s\n", $$2, $$1}'
このMakefileは、Dockerコンテナを管理するためのターゲット(タスク)とその説明を提供しています。以下に各ターゲットの説明を示します。
- ps:
docker compose ps
を実行して、コンテナの状態を表示します。- このターゲットは、コンテナが正常に起動しているかどうかを確認するのに便利です。
- build:
docker compose build
を実行して、アプリケーションのDockerイメージをビルドします。- アプリケーションのソースコードや依存関係が変更された場合、このターゲットを実行して新しいイメージを作成します。
- up:
docker compose up -d
を実行して、アプリケーションをバックグラウンドで起動します。-d
オプションは、コンテナをデタッチモードで実行することを意味します。
- down:
docker compose down
を実行して、アプリケーションを停止します。- コンテナを削除し、ボリュームも削除します。
- clean:
docker compose down --rmi all --volumes --remove-orphans
を実行して、すべてのコンテナ、ボリューム、イメージを削除します。--rmi all
はすべてのイメージを削除するオプションです。
- login_mysql_server:
docker compose exec -it mysql_server sh
を実行して、mysql_server
コンテナに対してシェルでログインします。- このターゲットを使用して、コンテナ内でコマンドを実行したり、デバッグしたりできます。
- help:
- Makefile内のターゲットとその説明を表示します。
grep
コマンドを使用して、Makefile内のターゲットを抽出しています。
このMakefileは、Dockerコンテナの管理を簡素化し、一貫性を保つのに役立ちます。
compose.yml
version: '3.8'
services:
mysql_server:
build: ./mysql_server
container_name: mysql_server
environment:
MYSQL_DATABASE: sample
MYSQL_ROOT_PASSWORD: P@ssw0rd
networks:
- net
networks:
net:
このDocker Composeファイルは、MySQLサーバーのコンテナを構築するための設定を含んでいます。以下に各セクションの説明をします。
- services:
mysql_server
という名前のサービスを定義しています。build
セクションでは、./mysql_server
ディレクトリからDockerイメージをビルドするよう指定しています。container_name
は、コンテナの名前を指定しています。environment
セクションでは、MySQLの環境変数を設定しています。MYSQL_DATABASE
はデータベース名、MYSQL_ROOT_PASSWORD
はルートユーザーのパスワードです。
- networks:
net
という名前のネットワークを定義しています。このネットワークは、mysql_server
コンテナが所属するネットワークです。
このDocker Composeファイルを使用することで、MySQLサーバーのコンテナを簡単に構築できます。
mysql_server/Dockerfile
FROM mysql:8.1
FROM mysql:8.1
は Docker の Dockerfile 内で使用される命令です。
FROM mysql:8.1
の意味:FROM
は Dockerfile 内でベースイメージを指定するための命令です。mysql:8.1
は MySQL の公式イメージを指定しています。8.1
は MySQL のバージョン番号です。
- このコードの動作:
- Docker は mysql:8.1 イメージをダウンロードし、それをベースに新しいコンテナを作成します。
- このコンテナは MySQL データベースサーバーを実行するためのもので、バージョンは 8.1 です。
動作確認
下記のコマンドを実行します。
make build
make up
make login_mysql_server
下記のコマンドを実行すると、mysqlのバージョンが表示されていればOKです。
sh-4.4# mysql --version
mysql Ver 8.1.0 for Linux on aarch64 (MySQL Community Server - GPL)
下記のコマンドでデータベースが作成されていることも確認できます。
sh-4.4# mysql -uroot -p
Enter password: P@ssw0rd
下記の結果が出力されます。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.1.0 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
下記のコマンドを入力します。
mysql> show databases;
sampleが表示されていれば成功です。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sample |
| sys |
+--------------------+
5 rows in set (0.01 sec)
おわりに
今日は、DockerでMySQLの開発環境を構築する方法についてご紹介しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント