こんにちはフロントエンドエンジニアのまさにょんです!
今回は、Dockerで MySQL環境を構築する方法について、ハンズオンで解説していきます。
目次
Dockerで MySQL環境を構築する方法(ハンズオン)
以前に、Dockerで PostgreSQL環境を構築したことがありますが、
今回は Dockerで MySQL環境を構築する方法をハンズオンで、解説していきたいと思います。
今回、作成する MySQL環境のディレクトリ構造
今回、作成する MySQL環境のディレクトリ構造をtree -a
で確認すると次のとおりです。
MySQL_Test % tree -a
.
├── .env
├── conf
│ └── my.cnf
└── docker-compose.yml
2 directories, 3 files
MySQL を構築するディレクトリを作成する
次のコマンドで、MySQLを構築するディレクトリを作成します。
mkdir MySQL_Test && cd MySQL_Test
環境変数を管理する .env ファイルを作成する
MySQLの環境変数を管理する .env ファイルを作成するために、次のコマンドを実行します。
touch .env && open .env
開いた .env ファイル には、次のような Root User の情報や Port番号, TimeZone など DBの情報を設定していきます。
ROOT_PASS=root
DB_NAME=robotama-db
DB_USER=user
DB_PASS=robotama_pass
DB_PORT=3306
TZ=Asia/Tokyo
MySQL の設定ファイルである my.cnf を作成する
MariaDB・MySQL に関する設定を行うファイルをオプションファイルと呼び、
Linux 系の OS では my.cnf 、 Windows では my.ini というファイルが使用されます。
Docker 上は基本的には、Linux環境なので、my.cnf ファイルを作成すればOKです。
まずは、my.cnfを格納する confディレクトリを次のコマンドで作成します。
mkdir conf && cd conf
次のコマンドで、my.cnfファイルを作成します。
touch my.cnf
my.cnfには、文字コードやログ出力などのMySQLの設定をしていきます。
この内容は、プロジェクトによって、内容を変えてください。
今回は、最低限の文字コードの設定だけしておきます。
[mysqld]
# 文字コード
character-set-server=utf8mb4
collation-server=utf8mb4_bin
[client]
default-character-set=utf8mb4
MySQLや、MariaDBのパフォーマンス・チューニング周りの話は、以前の記事にまとめています。
docker-compose.yml を作成する
ハンズオン通りにやっている場合、今は、confディレクトリにいるはずなので、ディレクトリの Root階層に戻ります。
cd ../
次のコマンドで、プロジェクトのRoot にdocker-compose.yml
を作成して開きます。
touch docker-compose.yml && open docker-compose.yml
openしたdocker-compose.yml
の内容は、次の内容をコピペしてください。
YAMLファイルは、JSONと違いコメントができるので、コメントを記載していきます。
version: "3"
services:
# MySQL_DB_Container
mysql-db:
image: mysql:8
container_name: mysql
restart: always
# MySQL の環境変数: .envファイルで設定した環境変数が、ここに展開される
environment:
MYSQL_ROOT_PASSWORD: ${ROOT_PASS}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASS}
TZ: ${TZ}
ports:
- ${DB_PORT}:3306
# Dataを永続化するために、Volume_Mountする
volumes:
- mysql-db-store:/var/lib/mysql
- ./conf/my.cnf:/etc/mysql/conf.d/my.cnf
# .env ファイルを読み込むように設定する
env_file:
- .env
volumes:
mysql-db-store:
Docker Container を立ち上げる
次のコマンドで、定義したサービス ( Docker Container )をバックグラウンドで立ち上げます。
docker-compose up -d
続いてdocker container ps
コマンドで、Docker Container の起動状況を確認します。
MySQL_Test % docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e23e67bacf36 mysql:8 "docker-entrypoint.s…" 58 seconds ago Up 57 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
設定した 3306 Portでポートフォワードしていることがわかります。
また、Container名は、mysql
になります。
MySQL に Loginする
それでは、最後に Docker Container の MySQL に Loginします。
次のコマンドで、MySQL Docker Container のbash
に入ります。
docker container exec -it mysql /bin/bash
無事に、bashに入ったことを確認したら、次のコマンドを実行します。
mysql -u user -p
上記コマンドを実行すると、パスワードの入力を求められるので、設定した DBのパスワードを入力して Loginします。
Enter password:
ちなみに、入力していても パスワードは画面には表示されないようになっているので、注意です。
MySQLに無事に Loginできれば、次のような mysql 表示になるので、これで 環境構築から DB・Loginまでができました。
mysql>
試しに、Databaseの一覧を表示してみると次のとおりです。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| robotama-db |
+--------------------+
3 rows in set (0.02 sec)
MySQLの操作コマンドについては、以前の記事にまとまっているので、ぜひ参考にしてみてください。