[Dockerメモ]DockerでMySQLコンテナを作ってみる


色々言い訳をしつつDockerから目を逸していたのですが、そろそろ限界が来たのでキャッチアップしてみました。

dockerでmysqlを動かす

とりあえずdockerでdbサーバを立ててみます。

実務上の開発環境は生のDockerよりdocker-composeを使う場合が多いと思いますが、一旦基本的な動きを理解したいのでdockerコマンドを使います。

mysqlイメージをDocker hubからpullする

DockerのイメージをホスティングするDocker HubにMySQLの公式イメージがアップロードされているので、これを利用します。

https://hub.docker.com/_/mysql/

docker run --name mysql-sandbox -e MYSQL_ROOT_PASSWORD=password -d mysql:latest

上記コマンドで利用しているdocker各種オプションの概要は以下のようになります。

コマンド 概要
–name コンテナ名を指定
-e コンテナに渡す環境変数を指定(上記の例ではMYSQL_ROOT_PASSWORD)
-d デーモン(バックグラウンド)で起動(これがないとフォアグラウンドでデータベース・サーバが起動してしまう)

コンテナが起動しているかどうか確認する

コンテナが起動しているかどうかを確かめるには、docker psコマンドを使用します。

docker ps

以下のように表示されていればOKです。

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
7d52cd0856a1        mysql:latest        "docker-entrypoint.s…"   30 minutes ago      Up 30 minutes       3306/tcp                 mysql-sandbox

MySQLデータベースに入る

ホスト側から、コンテナにログインしてMySQLを実際に操作してみます。

docker exec -it mysql-sandbox /bin/bash
コマンド 概要
-it 疑似TTY(pseudo-TTY)をコンテナの標準入力に接続する。コンテナ内でインタラクティブな bash シェルを作成する。

MySQLのdockerコンテナ内に入れたら、

root@7d52cd0856a1:/# mysql -u root -p

MYSQL_ROOT_PASSWORDで設定したパスワードを登録するとログインできます。

試しにshow databasesしてみます

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.21 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql>

うまくいっていますね。

docker execとdocker runの違い

個人的に混同しやすいのでメモしておきます。

  • docker runは新しくコンテナを作成してコマンドを実行する
  • docker execは起動中のコンテナでコマンドを実行する

MySQLコンテナを停止する

コンテナを停止するには、docker stopコマンドを使います。

docker stop mysql-sandbox

停止しているコンテナを削除する

docker container prune

削除確認メッセージ不要な場合は-fオプションをつけます

まとめ

本記事では、Dockerを使ってMySQLのコンテナを作ってログインしてデータベースが操作できるところまでをまとめました。

実務上ではここから、Dockerfileやdocker-compose.ymlを作成してInfrastrcture As a Codeを実現していくことになりますが、その過程は後日まとめようかなと思います。