はじめに
本記事ではDockerを利用したMySQLの環境構築を行います。
具体的にはMySQLコマンドが実行可能なコンテナを用意する手順をまとめます。
Dockerイメージをダウンロード
Dockerイメージは、Dockerコンテナの設計図のようなものです。DockerイメージをもとにDockerコンテナを生成します。
Dockerイメージは自作することもできますが、MySQLのような有名なものについてはDockerHubから取得することが可能です。
どんなMySQLイメージがダウンロード可能か検索してみます。
docker search mysql
NAME DESCRIPTION STARS OFFICIAL
mysql MySQL is a widely used, open-source relation… 15470 [OK]
bitnami/mysql Bitnami container image for MySQL 118
circleci/mysql MySQL is a widely used, open-source relation… 30
cimg/mysql 3
bitnamicharts/mysql Bitnami Helm chart for MySQL 0
ubuntu/mysql MySQL open source fast, stable, multi-thread… 65
rapidfort/mysql RapidFort optimized, hardened image for MySQL 26
elestio/mysql Mysql, verified and packaged by Elestio 1
google/mysql MySQL server for Google Compute Engine 25
docksal/mysql MySQL service images for Docksal - https://d… 0
alpine/mysql mysql client 3
eclipse/mysql Mysql 5.7, curl, rsync 2
mysql/mysql-server Optimized MySQL Server Docker images. Create… 1023
jumpserver/mysql 1
datajoint/mysql MySQL image pre-configured to work smoothly … 2
mysql/mysql-router MySQL Router provides transparent routing be… 28
ddev/mysql ARM64 base images for ddev-dbserver-mysql-8.… 1
mirantis/mysql 0
ilios/mysql Mysql configured for running Ilios 1
corpusops/mysql https://github.com/corpusops/docker-images/ 0
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 100
vulhub/mysql 0
javanile/mysql MySQL for development 0
mysql/mysql-operator MySQL Operator for Kubernetes 1
vitess/mysql Lightweight image to run MySQL with Vitess 1
今回はOracle社が提供してくれているものをダウンロードします。
このimageは2年ほど更新されていないため、Docker公式のイメージを使うのが良いかもしれません。詳しくはコメント欄をご確認ください。
docker pull mysql/mysql-server
ダウンロードしたイメージは以下のコマンドで確認できます。
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
python 3 230a72fb08c5 3 months ago 1.02GB
...
mysql/mysql-server latest 1d9c2219ff69 21 months ago 496MB
Dockerコンテナを起動
ここまででコンテナの設計図(Dockerイメージ)の用意が完了しました。次は設計図をもとに仮想の計算機であるDockerコンテナを起動します。
コンテナの起動には以下のコマンドを使います。
docker run --name=mysql-server -d mysql/mysql-server
--name=mysql-server
はコンテナにmysql-server
という名前をつけることを表します。-d
はバックグラウンドで実行することを表します。
起動したコンテナを確認するには以下のコマンドを使います。
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5fa3ecaf0e04 mysql/mysql-server "/entrypoint.sh mysq…" 3 hours ago Up 3 hours (healthy) 3306/tcp, 33060-33061/tcp mysql-server
コンテナ内でMySQLコマンドを実行
ここまでで仮想の計算機(Dockerコンテナ)の用意が完了しました。最後にコンテナ内でMySQLコマンドを実行します。
まずコンテナ起動時に自動生成されたMySQLのrootユーザのパスワードを確認します。
docker logs mysql-server 2>&1 | grep GENERATED
[Entrypoint] GENERATED ROOT PASSWORD: =2V0@QFU.%l338jo.:7gAnLb9nCJ=0y#
PASSWORD:
以降がパスワードです。あとでコンテナでMySQLコマンドを実行するのに必要です。
詳細説明
linuxにおいて、1は標準出力、2は標準エラー出力、&は両方を意味します。
hello, world
とファイルに書き込みます。
vi sample.txt
以下のコマンドは標準出力をsample2.txtに書き込みます。
cat sample.txt 1>sample2.txt
以下のコマンドは標準エラー出力をsample3.txtに書き込みます。
errorcommand 2>sample3.txt
以下のコマンドは標準出力と標準エラー出力をsample4.txtに書き込みます。
ls . /nonexistent > sample4.txt 2>&1
つまり、実行したコマンドはコンテナ中の標準出力と標準エラー出力のうち、GENERATED
を含むものを出力します。
パスワードを使ってコンテナ上のMySQLサーバーに接続します。
docker exec -it mysql-server mysql -u root -p
-it
は相互にやり取りすることを表します。
パスワードが要求されるので先ほど調べたパスワードを入力します。入力内容は表示されないので注意
パスワードを変更しないと操作ができないため、パスワードを変更します。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword!';
新しいパスワードはYourNewPassword!
です。
これでMySQL環境の構築が完了しました。
データベースを作成し、userテーブルを作成してみます。
CREATE DATABASE study_db;
USE study_db;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT,
email VARCHAR(100) UNIQUE
);
コンテナが不要になったら以下のコマンドで停止、削除します。
docker stop mysql-server
docker rm mysql-server