Dockerとdocker-composeでMySQLを構築する




DockerでMySQLを構築

まずはMySQLをdockerのみで構築してみます。

runコマンドでコンテナに名前をつけてmysqlイメージからコンテナを起動しています。

-eオプションは環境変数を設定し、-dはdetachといいバックグラウンドでコンテナを起動します。

$ docker run --name test_mysql  -e MYSQL_ROOT_PASSWORD=root  -e MYSQL_USER=test  -e MYSQL_PASSWORD=test  -e MYSQL_DATABASE=test  -d mysql:5.7.22
34d348d77124d2e352813cf04f4cd03c9826c6742e1591faa7ca3a3942f89fc7
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED                  STATUS              PORTS               NAMES
34d348d77124        mysql               "docker-entrypoint.s…"   Less than a second ago   Up 2 seconds        3306/tcp            test_mysql

起動したら下記コマンドでコンテナ内に入ります。

envコマンドで起動時に設定した環境変数を確認できます。mysqlコマンドで起動時に設定したuserとpasswordでmysqlにログインできることを確認できます。

$ docker exec -it test_mysql /bin/sh
# env
HOSTNAME=34d348d77124
MYSQL_MAJOR=8.0
HOME=/root
MYSQL_ROOT_PASSWORD=root
TERM=xterm
MYSQL_PASSWORD=test
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MYSQL_VERSION=8.0.11-1debian9
MYSQL_USER=test
GOSU_VERSION=1.7
PWD=/
MYSQL_DATABASE=test
$ mysql -utest -ptest

起動したコンテナは下記コマンドで停止できます。

$ docker stop 34d348d77124

docker-composeで起動する

docker runコマンドでmysqlのコンテナを起動しましたが、これだと毎回いろんなオプションをつけてコマンドを実行しないといけないので面倒になってしまします。

そこでdocker-composeを使います。

docker-composeコマンドはdocker-compose.ymlファイルにコンテナの設定を定義することができ、そのファイルを元にコンテナを起動することができるようになります。

上記mysqlのdockerコマンドをdocker-compose.ymlに設定すると下記のようになります。これで管理しやすくなりますね。

version: '3'
services:
    db:
        image: mysql:5.7.22
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_USER: test
            MYSQL_PASSWORD: test
            MYSQL_DATABASE: test

docker-compose.ymlを定義したら同じディレクトリで下記コマンドを実行することでコンテナを起動できます。-dオプションをつけることでバックグラウンドで起動できます。

$ dokcer-compose up -d

プロセスは下記で確認できます。

$ docker-compose ps
       Name                    Command             State    Ports
-------------------------------------------------------------------
test_db_1   docker-entrypoint.sh mysqld   Up      3306/tcp

ホストOSからコンテナのmysqlに接続する

これまではコンテナに入ってからmysqlに接続していましたが、ホストOSからも接続できるようにdocker-compose.ymlを修正します。portsはホストマシンポート:コンテナのポートとなっています。

version: '3'
services:
    db:
        image: mysql:5.7.22
        ports:
             - "3306:3306"
        environment:
            MYSQL_ROOT_PASSWORD: root
            MYSQL_USER: test
            MYSQL_PASSWORD: test
            MYSQL_DATABASE: test

接続するときは明示的に127.0.0.1を指定します。

$ mysql -h127.0.0.1 -utest -ptest

おすすめ書籍

出版されてから少し時間が経っていますが、Dockerの基本は変わらないので非常に勉強になります。

本書はDockerが利用される環境や背景を説明し、導入前のシステム設計、Dockerの基本的な利用方法、Dockerfileによる自動化の手法、管理・監視ツールについて、実際に操作をしながら解説されています。

また、Docker周辺のシステム環境として、Atomic Host、CoreOSといったコンテナ運用OSや、より複雑な運用環境で求められる、KubernetesやDocker Swarmによるマルチホストやクラスタシステムについても、テスト環境を構築しながら解説されいるので手を動かしながら学ぶことができます。

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら



コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です