Points & Lines

DockerでMySQLコンテナの作成(日本語対応)

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など他のコンテナとの連携もカンタンに行えます。

【Docker入門 】⑤ Docker Composeの基本

【Docker Compose】MySQLコンテナが「Restarting」のまま起動しないとき

Follow me!

モバイルバージョンを終了