DockerでのMySQL環境構築メモ
コロナ禍はいつ終わるのか…一般的にワクチンが出来るのは臨床試験込みで3~7年だそうで、緊急事態で動いているとはいえ、先は長いかもしれません。
とはいえ今の仕事はコンプライアンス上すっとリモートというわけにも行かず、そろそろ出社になりそう。
リモートワーク中に何か作ろうと思ったんですが、結局何も出来ない予感。。。
せめてなにかに手を出そうと思って、前々から完全移行しようと思っていたDockerに手を出してみました。
環境
各バージョン
VirtualBox | 6.1.6 r137129 (Qt5.6.2) | Windowsで動く仮想環境。 VMWareから乗り換え。圧倒的に軽いです。 |
---|---|---|
ubuntu | 18.04.4 LTS (Bionic Beaver) | 構築時点での最新はv20だが、 Docker側が未対応の為v18を使用 |
Docker | 19.03.8, build afacb8b7f0 | |
docker-compose | 1.25.5, build 8a1c60f6 | |
MySQL | 8.0.20 |
構築準備
1. Docker、docker-composeのインストール
Install Docker Engine on Ubuntu | Docker Documentation
Install Docker Compose | Docker Documentation
ubuntuなのでaptで管理します。
# aptの最新化 sudo apt update sudo apt upgrade # Dockerインストールに必要な事前モジュール、公式リポジトリ追加(公式リファレンス参照) sudo apt -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # Dockerインストール sudo apt -y install docker-ce # Docker Composeインストール sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
2. docker-compose.yml(docker-composeの設定ファイル)準備
Docker Hub
/home/ubt_user/docker_files/docker-compose.yml
version: '3' services: # MySQL - https://hub.docker.com/_/mysql db: image: mysql:8.0.20 container_name: mysql_container environment: MYSQL_ROOT_PASSWORD: ******** MYSQL_DATABASE: my_database MYSQL_USER: my_user MYSQL_PASSWORD: ******** command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci volumes: # MySQLのワークディレクトリ - /home/ubt_user/docker_files/mysql/data:/var/lib/mysql # ユーザ設定ファイル - /home/ubt_user/docker_files/mysql/my.cnf:/etc/mysql/conf.d/my.cnf # Docker構築時に一度だけ実行される設定ファイル群 - /home/ubt_user/docker_files/mysql/initdb.d:/docker-entrypoint-initdb.d ports: - 3306:3306
environment
公式のMySQLイメージのリファレンスに記載されている変数を設定しています。
ここに記載したMYSQL_USERは、MYSQL_DATABASEの全権限がGRANTされるとのこと。
command
mysqldにて、文字コードを初期設定しています。
ただしここで設定されるのはサーバ系の値だけで、他にクライアント向けのデフォルト設定をします。詳しくは後述。
volumes
ホストOSのpath:Docker内のpathの形で、マウントするpathを記載します。
基本的にDockerのコンテナ内は不変とするため、動的なファイルが出力されるpathは全て外(ホスト側)に出す形でマウントしています。
とかいいつつ、今回syslogとかは外に出してません。
構築、起動
# docker-compose.ymlがあるディレクトリをカレントにして実行 cd ~/docker_files/ sudo docker-compose up -d # コンテナの起動ログ確認(コンテナ名はdocker-compose.ymlで指定した識別子) sudo docker logs mysql_container
コンテナが起動してから、initスクリプトの実行が終わるまでにタイムラグがあります。
なので、ちょっと間を置いてログを確認したほうがいいかもしれません。
トライアンドエラー時に必要になりそうなコマンドのメモ
# コンテナ一覧、停止、削除 sudo docker ps -a sudo docker stop mysql_container sudo docker rm mysql_container # イメージ一覧、削除(削除は一覧で表示されたIDを指定) sudo docker images -a sudo docker rmi 94dff5fab37f
コンテナの構築に失敗した際、ローカルイメージはコピー元なので関係ないとは思うのですが、削除すると状況が変わる場合があるらしい。