この記事に書くこと
DockerComposeを使ってローカル環境にMySQLサーバを構築します。
また、図をつかってMySQLサーバーとはなにか?どんな役割かを解説します。
前提知識
Docker Composeって?
Compose とは、複数のコンテナを使う Docker アプリケーションを、定義・実行するツールです。
コマンドを1つ実行するだけで、設定した全てのサービスを作成・起動します。
公式サイトより Docker Composeをつかう
MySQLって?
MySQLはオープンソースのリレーショナルデータベース管理システムです。
リレーショナルデータベースとは、データをテーブルという箱に整列して詰めるというデータベースのアプローチ方法の一種です。
DBサーバって?
DBサーバ ≒ MySQLというデータベース管理システム(DMBS)
DBサーバはデータを管理し、検索、更新、保存を行うサーバのことです。
DBはデータの保管庫で、サーバはデータを提供するコンピュータになります。
MySQLコンテナのDBサーバを構築
Docker Composeを使って、MySQLのDBサーバを構築します。
データ永続化、初期SQL実行、DBサーバとの接続をゴールとします。
Step1.必要なファイルの作成
階層
docker-compose.ymlはDocker Composeの設定ファイルです。
script内にデータベースの初期データを配置しています。
.
├── docker-compose.yml
└── script
└── init.sql
docker-compose
基本的な構成です。
DockerFileを作るほどの内容ではないので、すべてdocker-compose.yml内で設定しています。
services:
db:
image: mysql:8.2.0
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: qiita
MYSQL_USER: qiita_user
MYSQL_PASSWORD: password
volumes:
- mysql-data:/var/lib/mysql
- ./script:/docker-entrypoint-initdb.d
volumes:
mysql-data:
environment
MYSQL_USER,MYSQL_PASSWORD
ルートユーザーと同じスーパー権限が付与されます。
volumes
mysql-data
mysql-dataという名前のボリュームを、MySQLがデータを保存する/var/lib/mysqlディレクトリにマウントします。
これにより、コンテナを再起動してもデータが保持されます。
/docker-entrypoint-initdb.d
初期化時にスクリプトやSQLファイルを自動実行するディレクトリです。
ファイルはアルファベット順に実行されます。
初期データファイル
サンプルデータをinit.sqlに記載しています。
ファイル名は自由に設定可能です。
-- サンプルテーブル
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- サンプルデータ
INSERT INTO users (name, email) VALUES
('Taro Yamada', 'taro.yamada@example.com'),
('Saki Abe', 'saki.abe@example.com');
Step2.docker composeコマンドでサーバを建てる
docker-compose.ymlが置かれている階層でコンテナ起動コマンドを実行します。
-d
オプションはバックグラウンドでコンテナを実行します。それにより、ターミナルを複数開く手間が省けます。
docker compose up -d
Step3.コマンドでデータベースにアクセス
コンテナ内にターミナルコマンドで入りたい場合は、docker compose exec コンテナ名 sh
を使用します。
# shコマンドでコンテナに入る
docker compose exec db sh
$ mysql -u root -p
Enter password: #rootと入力
mysql> use qiita;
mysql> show tables;
+-----------------+
| Tables_in_qiita |
+-----------------+
| users |
+-----------------+
1 row in set (0.01 sec)
Step4.クライアントツールをつかってデータベースにアクセス
画像はDBerverですが、他のツールでも以下を設定すれば繋がるはずです。
- host: localhost
- db: qiita
- port: 3307 (ご自身で設定したポートを入力)
- ユーザー名: qiita_user
- パスワード: password
まとめ
Docker ComposeでMySQLサーバを構築しました。
基本構成の参考になれば幸いです。
参考
DockerHub
https://hub.docker.com/_/mysql
Docker-docs-ja
https://docs.docker.jp/get-started/08_using_compose.html?highlight=mysql
docker compose up
について
https://docs.docker.jp/v1.12/compose/reference/up.html