MySQL入門:DockerでMySQL環境を構築する -Vol.1-

スポンサーリンク
MySQL入門:DockerでMySQL環境を構築する -Vol.1- 環境構築
MySQL入門:DockerでMySQL環境を構築する -Vol.1-
この記事は約9分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、DockerでMySQLの開発環境を構築する方法についてご紹介します。

スポンサーリンク

背景

MySQLの開発環境をDockerで構築する機会があったので、そのときの内容を備忘として残しています。

dockerでMySQL環境を構築する理由

Dockerを使用してMySQL環境を構築することにはいくつかのメリットがあります。以下に詳しく説明します。

  1. 環境の分離と再現性:
    • Dockerコンテナは環境を隔離するため、ホストマシンの環境に影響を与えません。
    • コンテナはイメージから作成されるため、同じイメージを別の環境で再現できます。これにより、開発、テスト、本番環境の一貫性を保ちやすくなります。
  2. 軽量で高速:
    • Dockerコンテナは仮想マシンよりも軽量で、起動時間が短いです。
    • MySQLコンテナは必要なライブラリや依存関係を含むイメージを使用するため、インストールや設定に時間がかかりません。
  3. スケーラビリティ:
    • Dockerはスケーラブルなアーキテクチャをサポートしています。必要に応じてコンテナを追加できます。
    • MySQLコンテナをクラスター化して、負荷分散や冗長性を実現できます。
  4. バージョン管理とアップグレード:
    • Dockerイメージはバージョン管理されており、特定のMySQLバージョンを簡単に切り替えられます。
    • アップグレード時には新しいイメージを作成してコンテナを更新できます。
  5. ポータビリティ:
    • Dockerコンテナはどのプラットフォームでも動作します。ローカル、クラウド、オンプレミスの環境で同じイメージを使用できます。
  6. 環境の再現性とテスト:
    • 開発者は同じ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コンテナを管理するためのターゲット(タスク)とその説明を提供しています。以下に各ターゲットの説明を示します。

  1. ps:
    • docker compose psを実行して、コンテナの状態を表示します。
    • このターゲットは、コンテナが正常に起動しているかどうかを確認するのに便利です。
  2. build:
    • docker compose buildを実行して、アプリケーションのDockerイメージをビルドします。
    • アプリケーションのソースコードや依存関係が変更された場合、このターゲットを実行して新しいイメージを作成します。
  3. up:
    • docker compose up -dを実行して、アプリケーションをバックグラウンドで起動します。
    • -dオプションは、コンテナをデタッチモードで実行することを意味します。
  4. down:
    • docker compose downを実行して、アプリケーションを停止します。
    • コンテナを削除し、ボリュームも削除します。
  5. clean:
    • docker compose down --rmi all --volumes --remove-orphansを実行して、すべてのコンテナ、ボリューム、イメージを削除します。
    • --rmi allはすべてのイメージを削除するオプションです。
  6. login_mysql_server:
    • docker compose exec -it mysql_server shを実行して、mysql_serverコンテナに対してシェルでログインします。
    • このターゲットを使用して、コンテナ内でコマンドを実行したり、デバッグしたりできます。
  7. 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サーバーのコンテナを構築するための設定を含んでいます。以下に各セクションの説明をします。

  1. services:
    • mysql_serverという名前のサービスを定義しています。
    • buildセクションでは、./mysql_serverディレクトリからDockerイメージをビルドするよう指定しています。
    • container_nameは、コンテナの名前を指定しています。
    • environmentセクションでは、MySQLの環境変数を設定しています。MYSQL_DATABASEはデータベース名、MYSQL_ROOT_PASSWORDはルートユーザーのパスワードです。
  2. networks:
    • netという名前のネットワークを定義しています。このネットワークは、mysql_serverコンテナが所属するネットワークです。

このDocker Composeファイルを使用することで、MySQLサーバーのコンテナを簡単に構築できます。

mysql_server/Dockerfile

FROM mysql:8.1

FROM mysql:8.1DockerDockerfile 内で使用される命令です。

  1. FROM mysql:8.1 の意味:
    • FROMDockerfile 内でベースイメージを指定するための命令です。
    • mysql:8.1MySQL の公式イメージを指定しています。
    • 8.1MySQL のバージョン番号です。
  2. このコードの動作:
    • Dockermysql: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の開発環境を構築する方法についてご紹介しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました