DockerコンテナでMySQLサーバーの作成・起動から、コンテナを停止・再起動・削除する方法を解説します。仮想環境でMySQLサーバーを使用できるようになるため、ローカル環境でMySQLを使ってみたり、SQL文の練習ができるようになります。
目次
- コンテナを作成
- コンテナを起動
- Dockerコンテナのシェルに入る
- MySQLクライアントを起動
- 動作確認
- MySQLクライアント、シェルを終了
- コンテナを停止
- コンテナを再起動
- コンテナを削除
- 日本語入力に対応する
コンテナを作成
Dockerを起動し、コマンドプロンプトを開いて次のコマンドでMySQLサーバーのDockerコンテナを作成します。
※Dockerが起動しているかどうかは実行中プログラムのクジラのアイコンで確認できます。
docker create --name mysql_practice -e MYSQL_ROOT_PASSWORD=pass mysql
docker create は docker コンテナを作成するためのコマンドです。一番最後の mysql で作成するコンテナの種類を指定しています。
–name オプションでは作成するコンテナに名前をつけることができます。今回は「mysql_practice」という名前を付けています。
-e オプションでは環境変数を設定することができます。今回はMySQLのrootユーザーのパスワードをpassに設定しています。
コンテナを起動
コンテナを作成したら次のコマンドで起動します。
docker start mysql_practice
動作中のdockerコンテナを確認
現在動作中のdockerコンテナを確認するには次のコマンドを入力します。
docker ps
図のようにコンテナID、コンテナイメージ、作成された時間、現在のステータスなどが確認できます。
ちなみに動作中でないものも含め、全てのコンテナを確認したいときは -a オプションを付ければOKです。
docker ps -a
コンテナの作成と起動を同時に行う
ちなみに、docker run コマンドを使えばコンテナの作成と起動を同時に行うことができます。
今回作成・起動したものと同じコンテナを docker run コマンドで作る場合は次のコマンドで実現できます。
docker run -d --name mysql_practice -e MYSQL_ROOT_PASSWORD=pass mysql
使用するオプションはcreateとほぼ同じですが、runコマンドでは -dオプションが使えます。
-dオプションはコンテナをバックグラウンド実行するオプションです。runコマンドではコンテナ作成と同時に起動まで行うため、-dオプションを指定してバックグラウンドで起動させましょう。
Dockerコンテナのシェルに入る
作成したdockerコンテナのシェルに入りましょう。次のコマンドを入力します。
docker exec -it mysql_practice bash
mysql_practice の部分はコンテナの名前です。名前の代わりにコンテナIDを入力しても問題ありません。
図のように bash-4.4# が表示されます。
MySQLクライアントを起動
MySQLクライアントを起動します。次のコマンドを入力します。
mysql -uroot -p
するとパスワードを聞かれるので、コンテナ作成時に環境変数で指定したパスワードを入力します。
※パスワードは入力中画面に表示されませんので、落ち着いて入力してください。
図のようにプロンプトに mysql> と表示されていればOKです。
動作確認
作成したMySQLサーバのコンテナが問題なく使えるか確認しましょう。
次のコマンドでデータベース一覧を表示することができます。
show databases;
問題なさそうですね。
では次は作成したコンテナを片付けてみましょう。
MySQLクライアント、シェルを終了
exit
exit コマンドでMySQLクライアントを終了。
もう一度 exit コマンド でシェルを終了します。
プロンプトにユーザー名が表示されているはずです。
コンテナを停止
コンテナを停止させてみましょう。次のコマンドを入力します。
docker stop mysql_practice
mysql_practice の部分はコンテナの名前です。代わりにコンテナIDを使っても問題ありません。
コンテナを再起動
停止したコンテナを再起動するには、起動時と同様次のコマンドを入力します。
docker start mysql_practice
コンテナを削除
不要になったコンテナを削除するには次のコマンドを実行します。
docker rm mysql_practice
mysql_practice の部分はコンテナの名前です。代わりにコンテナIDを使っても問題ありません。
コンテナが削除できているかどうかは次のコマンドで確認できます。
docker ps -a
日本語入力に対応する
これでDockerでMySQLサーバーを使うことはできるのですが、この方法で作ったコンテナはこのままでは日本語を正しく扱うことができません。
そこで日本語が使えるよう、文字コードを日本語対応のUTF-8にしたMySQLのDockerイメージを用意し、そのDockerイメージを元にコンテナを作成できるようにしてみましょう。ついでにタイムゾーンも東京にしてみます。
Dockerfileを作成
まずはメモ帳を開いて次の内容を入力します。
FROM mysql:8-debian RUN apt-get update && apt-get install -y locales-all ENV LC_ALL="ja_JP.UTF-8" TZ="Asia/Tokyo"
最初の FROM mysql:8-debian はビルドに使用するDockerイメージを指定しています。
この時 :-debian を指定しないと、linuxのディストリビューションがoraclelinuxとなってしまい、その後に続くapt-getが使えずエラーになってしまいます。
続くコマンドは次のようになっています。
- apt-get update:パッケージ管理のapt-getに必要な情報を取得
- apt-get install -y locales-all:多国語サポート用ライブラリ(locales-all)のインストール
- ENV LC_ALL=”ja_JP.UTF-8″ TZ=”Asia/Tokyo”:ja_JP.UTF-8を利用する設定(最優先)。ついでにタイムゾーンも東京に設定しています。
ファイル名は Dockerfile. とし、ファイルの種類は「すべてのファイル」としてユーザーフォルダに保存します。
※保存時にファイル名の最後に.を付けることで拡張子なしでファイルを保存することができます。
作成した Dockerfile を使って Dockerイメージを作成
コマンドプロンプトを開いて次のコマンドを実行します。
docker build -t mysql-ja .
docker build はもともと用意されているイメージ(mysql)を元に追加で設定を行い新しいイメージを作成します。
-t オプションを使うことでイメージの名前(mysql-ja)を指定しています。
作成したDockerイメージを使ってDockerコンテナを作成・起動
作成したイメージからコンテナを作成・起動します。
docker run -d --name mysql_practice -e MYSQL_ROOT_PASSWORD=pass mysql-ja mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
mysqld 以降はMySQLで日本語を扱うための設定(文字コードをUTF8にする)です。
文字コード設定確認
これで日本語が扱えるMySQLサーバーのコンテナが作成できました。
まずは文字コード設定を確認してみましょう。
Dockerコンテナのシェルに入り
docker exec -it mysql_practice bash
MySQLクライアントに入って
mysql -uroot -p
次のコマンドを実行します。
show variables like '%chara%';
このValueがutf8mb4になっていればOKです。
ちなみに最初のやり方ではlatin1となっており、そのままだと日本語が文字化けしたりして正しく扱えません。
動作確認
これで大丈夫なはずですが、念のため実際にデータベースの値に日本語を使って正しく表示されるか確認してみましょう。
まずはデータベースを作成
CREATE DATABASE test;
データベースを選択
USE test;
テーブルを作成
CREATE TABLE titles ( author_id INT, post_title VARCHAR(50) );
レコードの値に日本語を使って挿入してみます。
INSERT INTO titles (author_id, post_title) VALUES (1, "MySQLとは"), (2, "SQLとはなにか");
テーブルの中身を確認してみましょう。
SELECT * FROM titles;
日本語が正しく表示されています。これで確認OKです。