Docker Compose で MySQLを構築

概要

Docker Compose で MySQL 環境を構築します。
MySQL 単体なのに Docker Compose を使用するのは、MySQL は最終的に他のコンテナと組み合わせることが多いためです。
組み合わせる例は、Docker Compose での Web/DB 環境構築例をどうぞ。

docker-compose.yml

まずは MySQL を構築する際の docker-compose.yml の例です。

version: '3.7'
services:
  mysql:
    container_name: test_mysql
    build: ./mysql
    image: test_mysql
    restart: always
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: wp_pass
      MYSQL_ROOT_PASSWORD: rootpass
#    ports:
#     - "3306:3306"
    volumes:
      - ./mysql/conf.d:/etc/mysql/conf.d
      - ./mysql/data:/var/lib/mysql
#      - ./mysql/log:/var/log/mysql

以下、1つずつ内容を記載します。

コンテナ名を付けます。

    container_name: test_mysql

mysql/Dockerfile でビルド方法を記載します。

    build: ./mysql

今回は特に記載することが無かったので、mysql/Dockerfile は下記の内容のみです。

 FROM mysql:5.7

イメージ名を付けます。

    image: test_mysql

常にコンテナを自動的に再起動します。

    restart: always

MySQL 用の変数を設定します。
下記は WordPress の例です。

    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: wp_pass
      MYSQL_ROOT_PASSWORD: rootpass

ports 設定は、ホストのポートをコンテナのポートへフォワードする設定です。
しかし、自分は MySQLではあえてフォワードする意味が無いと考えますので設定しません。
後述しますが、一通りの操作はポートフォワードを設定しなくても可能です。
ポートフォワードはセキュリティに影響するので、可能な限り設定しない方が無難です。

  #    ports:
  #     - "3306:3306"

volumes は、ボリュームの設定です。
記載したホスト上の path をコンテナ上に mount するようなイメージになります。
コンテナはそのままではデータを保持できないので、データを保持したい(永続化)用途でよく使われます。

    volumes:
      - ./mysql/conf.d:/etc/mysql/conf.d
      - ./mysql/data:/var/lib/mysql
 #      - ./mysql/log:/var/log/mysql

上記の1つ目は mysql/conf.d のボリュームを作成することにより、ホスト側で MySQL の設定を変更することを可能とし、コンテナを再作成してもその設定を保持することを可能としています。
ちなみに、以下のような my.cnf を置いています。

 [mysqld]
 character-set-server=utf8mb4
 [client]
 default-character-set=utf8mb4

適宜 slow query log などの設定を追加します。

その下の mysql/data は MySQL データの永続化のためのボリューム設定です。

さらにその下の mysql/log は、ログをホスト側に出力するための設定です。
ログを保存したい場合など、必要であれば設定するのも良いでしょう。

コンテナ起動

下記でビルド&実行できます。

 % docker-compose up -d

正常に実行できれば MySQL として使用できます。
今回は単体なので何の役にも立ちませんが(^_^;)

MySQL へのアクセス

実行後、下記のように mysql_config_editor で接続情報を設定しておくと便利かもしれません。

 % docker exec -it test_mysql mysql_config_editor set -u root -p
 Enter password:
 % docker exec -it test_mysql mysql_config_editor set --login-path=mysqldump -u root -p
 Enter password:

コマンドラインで MySQL にアクセスしたい場合には、下記のように bash でコンテナにアクセスします。

 % docker exec -it memo_mysql bash

コンテナにアクセス後は、普通に mysql コマンドで接続できます。

mysqldump

以下のような感じで MySQL コンテナのデータをダンプすることができます。

 % docker exec -it test_mysql mysqldump --all-databases > xxxx.dmp

なお、バッチ処理でよくやる -p でパスワードも併せて指定した場合は、mysql_config_editor で mysqldump 時の接続情報を設定しておかないと、下記の Warning も一緒に出力されるので注意が必要です。

 Warning: Using a password on the command line interface can be insecure.

インポート

以下でインポート可能です。

 % docker exec -i test_mysql mysql < xxxx.dmp

コメント

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