Dockerで MySQL環境を構築する方法(ハンズオン)

DockerMySQL

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、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の操作コマンドについては、以前の記事にまとまっているので、ぜひ参考にしてみてください。

Dockerの学習・参考書

参考・引用

  1. 【Docker】MySQLを簡単に構築
  2. 【入門】DockerでMySQL環境を構築する方法とデータの永続化手順まとめ
  3. Docker環境のDB(MySQL)コンテナに接続する方法

最近の投稿