3.【Windows10】DockerコンテナでMySQLサーバーを使う方法

【Windows10】DockerコンテナでMySQLサーバーを使う方法

DockerコンテナでMySQLサーバーの作成・起動から、コンテナを停止・再起動・削除する方法を解説します。仮想環境でMySQLサーバーを使用できるようになるため、ローカル環境でMySQLを使ってみたり、SQL文の練習ができるようになります。

目次

コンテナを作成

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
動作中のdockerコンテナを確認

図のようにコンテナ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を入力しても問題ありません。

Dockerコンテナのシェルに入る

図のように bash-4.4# が表示されます。

MySQLクライアントを起動

MySQLクライアントを起動します。次のコマンドを入力します。

mysql -uroot -p

するとパスワードを聞かれるので、コンテナ作成時に環境変数で指定したパスワードを入力します。

※パスワードは入力中画面に表示されませんので、落ち着いて入力してください。

MySQLクライアントを起動

図のようにプロンプトに mysql> と表示されていればOKです。

動作確認

作成したMySQLサーバのコンテナが問題なく使えるか確認しましょう。

次のコマンドでデータベース一覧を表示することができます。

show databases;
動作確認

問題なさそうですね。

では次は作成したコンテナを片付けてみましょう。

MySQLクライアント、シェルを終了

exit

exit コマンドでMySQLクライアントを終了。

もう一度 exit コマンド でシェルを終了します。

MySQLクライアント、シェルを終了

プロンプトにユーザー名が表示されているはずです。

コンテナを停止

コンテナを停止させてみましょう。次のコマンドを入力します。

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"

Dockerfileを作成

最初の 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を保存

作成した Dockerfile を使って Dockerイメージを作成

コマンドプロンプトを開いて次のコマンドを実行します。

docker build -t mysql-ja .

docker build はもともと用意されているイメージ(mysql)を元に追加で設定を行い新しいイメージを作成します。

-t オプションを使うことでイメージの名前(mysql-ja)を指定しています。

作成した Dockerfile を使って Dockerイメージを作成

作成した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にする)です。

作成したDockerイメージを使ってDockerコンテナを作成・起動

文字コード設定確認

これで日本語が扱える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です。

このエントリーをはてなブックマークに追加

コメントを残す

頂いたコメントは一読した後表示させて頂いております。
反映まで数日かかる場合もございますがご了承下さい。