1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Docker ComposeでMySQLコンテナを立てる。そもそもDBサーバってなに?

Posted at

この記事に書くこと

DockerComposeを使ってローカル環境にMySQLサーバを構築します。
また、図をつかってMySQLサーバーとはなにか?どんな役割かを解説します。

前提知識

Docker Composeって?

Compose とは、複数のコンテナを使う Docker アプリケーションを、定義・実行するツールです。
コマンドを1つ実行するだけで、設定した全てのサービスを作成・起動します。

公式サイトより Docker Composeをつかう

MySQLって?

MySQLはオープンソースのリレーショナルデータベース管理システムです。
リレーショナルデータベースとは、データをテーブルという箱に整列して詰めるというデータベースのアプローチ方法の一種です。

DBサーバって?

DBサーバ ≒ MySQLというデータベース管理システム(DMBS)
DBサーバはデータを管理し、検索、更新、保存を行うサーバのことです。

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内で設定しています。

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に記載しています。
ファイル名は自由に設定可能です。

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

初回実行SQL
https://zenn.dev/re24_1986/articles/978801ae092498

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?