目次
DockerでMySQLデータベースのコンテナ作成
Dockerを使ってMySQLのコンテナを作成する方法を紹介します。
本記事で使用するサンプルファイルはこちらよりダウンロード出来ます。
SAMPLE
サンプルの内容 (mysql_container_img.zip)
. ├── Dockerfile ├── settings │ └── my.cnf └── sqls └── data.sql
環境: Docker version 19.03.13, Mac OS 10.15.7
公式Dockerイメージを使用する
docker hubに用意されているMySQL公式イメージを使用します。
一覧(Tags)よりMySQLバージョン5.7を選択しました。
mysql:5.7
コマンドを実行してイメージを取得
docker pull mysql:5.7
MySQLコンテナの作成
日本語に対応させるため、取得したイメージからそのままコンテナを作成するのではなく、
Dockerfileから新たにイメージをビルドしていきます。
(以降はダウンロードサンプルにて実行)
Dockerfileの内容
FROM句にビルド元として先ほど確認したMySQL公式イメージを指定します。
FROM mysql:5.7 ADD ./settings/my.cnf /etc/mysql/conf.d/my.cnf
日本語化の設定
Dockerfileと同階層settingsディレクトリ内に配置したMySQLの設定ファイル、my.cnf
こちらはコンテナ起動時に/etc/mysql/conf.d/my.cnfへ反映されるようにDockerfile内のADD句で指定しています。
[mysqld] character-set-server=utf8 [mysql] default-character-set=utf8 [mysqldump] default-character-set=utf8
イメージのビルド
Dockerfileと設定ファイルの準備が出来たらDockerfileと同じパスで下記コマンドを実行し、イメージをビルドします。
docker build -t mysql-ja .
ビルドに成功したらイメージ一覧から、「mysql-ja」の存在が確認出来ます。
イメージ一覧確認コマンド
docker images
コンテナ作成 & 起動
コマンドを実行し、ビルドしたイメージからコンテナを作成します。
コンテナ名、ここではmysqlcontとしています。
docker run --name mysqlcont -e MYSQL_ROOT_PASSWORD=1234 -d -v $(pwd)/sqls:/docker-entrypoint-initdb.d mysql-ja
-e オプションでMySQLのルートパスワード「MYSQL_ROOT_PASSWORD」を設定します。
※こちらのオプションでパスワードをきちんと設定しないとコンテナが起動しないようです…
-v オプションでホスト側にはdata.sqlを格納したsqlsディレクトリ、コンテナ側には/docker-entrypoint-initdb.dを指定します。
ホスト側は絶対パスまたは※上記のように$(pwd)/sqlsと指定します。
※Dockerfileのパスでコンテナを起動する場合
MySQL公式イメージでは/docker-entrypoint-initdb.dに配置されたファイルをコンテナ起動時に実行する機能が用意されています。
これによりコンテナ起動時にテスト用データベースとテストデータの作成を行うことが出来ます。
(下記コマンドでコンテナの起動確認)
docker ps
コンテナログイン
コンテナを起動した場所にテストデータ用のsqlファイル(data.sql)を配置します。
(コンテナの作成前から配置していてもOK)
コンテナの起動に成功したら下記コマンドでログインします。
docker exec -it mysqlcont bash
MySQLコマンドの実行と、ホストと共有したファイルが存在していることを確認します。
root@1e3c4543621b:/# mysql --version mysql Ver 14.14 Distrib 5.7.33, for Linux (x86_64) using EditLine wrapper
root@08c6b43ad2f8:/# ls /docker-entrypoint-initdb.d data.sql
MySQLログイン & テストデータ確認
下記コマンドを実行してテスト用DBの作成とデータの投入を行います。
(コンテナ作成時に決めたパスワードを入力)
mysql -u root -p < /home/data.sql
コンテナにログインした状態でMySQLデータベースにログイン
(コンテナ起動時に決めたパスワードを入力)
mysql -u root -p -D prefecture
投入したテストデータを確認
SELECT * FROM prefectures;
Docker Composeを使用する
Docker Composeを使用すると起動時のオプションの指定など、イメージとコンテナの管理がよりシンプルになります。
ApacheやPHPなど他のコンテナとの連携もカンタンに行えます。