1. HOME
  2. 開発・ブログ運営
  3. Docker
  4. MySQL, WordPress, phpMyAdmin コンテナを通じて Docker の便利さを実感してみる
2016年07月08日
オライリーの Docker 本(Docker Up & ...
2016年07月29日
Docker 公式イメージで立ち上げた Nginx コンテナを ...
2016年07月30日
Docker の仕組みを理解する(Docker クライアントと ...
2016年07月29日
Docker for Mac/Windows で 「Canno ...
2016年07月12日
Let’s Encrypt で HTTPS(SSL ...
2016年07月06日
Jenkins コンテナの初期設定を自動化してみる

MySQL, WordPress, phpMyAdmin コンテナを通じて Docker の便利さを実感してみる

結局 Docker ってなんなの?な人は、一度 WordPress をコンテナで起動してみてください。簡単すぎてびっくりすると思いますよ。

MySQL コンテナを起動してみる

MySQL logo


以下のコマンドのみで Mysql 5.7 が新規インストール & 初期設定済み(mysql_secure_installation 実行済み)のコンテナが起動します。

$ docker run –name db -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.7

初回起動時は、コンテナイメージが自動ダウンロードされるので、コンテナが起動するまでに数十秒を要しますが、2回目の起動からはほぼ一瞬でコンテナが起動します。


MySQL コンテナの中に入ってみる

MySQL コンテナが起動していれば、以下のコマンドで MySQL コンテナの中に入れます。

$ docker exec -it db /bin/bash

コンテナの中はコンテナとして隔離された Linux の世界です。例えばコンテナ内のファイルがグチャグチャになってしまっても、そのコンテナがグチャグチャになるだけで、そのコンテナを破棄してしまえば、コンテナを起動する前の状態と全く同じ状態に戻ります。

破棄した後に、再度コンテナを起動すれば、また真っ新なコンテナが起動します。

ということで、一旦コンテナから出ます。

$ exit

コンテナから出たら、コンテナを停止させます。

$ docker stop $(docker ps | grep mysql:5.7 | cut -d” ” -f1)

コンテナを停止させたら、コンテナを破棄します。

$ docker rm $(docker ps -a | grep mysql:5.7 | cut -d” ” -f1)

もう一度 MySQL コンテナを起動してみます。冒頭の起動コマンドと同じです。

$ docker run –name db -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.7

ここで起動された MySQL コンテナは先ほど破棄したコンテナとは何の関係もありません。まっさらなコンテナです。


WordPress コンテナを MySQL コンテナに接続して起動してみる

Wordpress logo

MySQL コンテナだけじゃ面白くないので、WordPress コンテナを起動してみます。WordPress を動かすためには MySQL が必要なので、WordPress コンテナを先ほど起動した MySQL コンテナに接続させて起動します。

$ docker run –name wordpress –link db:mysql -p 8080:80 -d wordpress

これだけで、MySQL コンテナに接続した状態で WordPress コンテナが起動されました。

早速、アクセスしてみます。http://<IP アドレス>:8080 にブラウザからアクセスすると WordPress のインストール画面が表示されます。DB 関連の設定は自動で終わっているので、言語を選択して、

Docker wordpress install

サイト名、管理者ユーザー名と、パスワード、メールアドレスを入力するだけで、

Docker wordpress install 2

インストールが完了します。

Docker wordpress install 3

こんな感じでコンテナ同士を連携させることにより、様々なサービスを Docker で立ち上げることができます。


phpMyAdmin コンテナを立ち上げる

まずは MySQL コンテナの IP アドレスを調べます。

$ docker inspect -f ‘{{ .NetworkSettings.IPAddress }}’ $(docker ps | grep mysql:5.7 | cut -d” ” -f1)

MySQL コンテナの IP アドレスがわかったら、phpMyAdmin コンテナを起動します。

$ docker run –name phpmyadmin -d -e PMA_HOST=<MySQL コンテナの IP アドレス> -p 8888:80 phpmyadmin/phpmyadmin

phpMyAdmin コンテナが起動したら http://<IP アドレス>:8888 へアクセスするとログイン画面が表示されます。ユーザー名「root」パスワード「pass」でログインできます。

PhpMyAdmin

phpMyAdmin を使わないときはコンテナを停止/破棄させておくと良いと思います。

# phpMyAdmin コンテナの停止
$ docker stop $(docker ps | grep phpmyadmin | cut -d” ” -f1)

# phpMyAdmin コンテナの破棄
$ docker rm $(docker ps -a | grep phpmyadmin | cut -d” ” -f1)

また phpMyAdmin が必要になればコンテナを起動すれば OK。WordPress コンテナなど 24時間稼働している必要がないサービスなどは都度起動すると良いと思います。


まとめ

結局 Docker で WordPress を起動するまでに必要なのは、

$ docker run –name db -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.7
$ docker run –name wordpress –link db:mysql -p 8080:80 -d wordpress

の 2 つのコマンドだけです。これに加えて、

$ docker run –name phpmyadmin -d -e PMA_HOST=<MySQL コンテナの IP アドレス> -p 8888:80 phpmyadmin/phpmyadmin

のコマンドで phpMyAdmin コンテナが起動できました。

phpMyAdmin コンテナは常に稼働している必要がないので、必要になれば起動、不必要になれば停止&破棄、と、あたかも必要な時だけインストールして不必要になればアンインストールしているかのような運用ができました。

phpMyAdmin コンテナに限らず、何らかのコンテナを起動することによって、ホストOS の設定が変更されてしまったり、コンテナ破棄後に何らかのゴミファイルが残ることは基本的にありません。(コンテナ起動時のオプションなどによって変わります)

あれやこれやサーバーをいじっていると、動いていたものが動かなくなったり、使いもしない意味不明なファイルがたくさん残ったり、しばらくすると一旦まっさらにして、一から再構築した方が良いのでは。。と思えてくるほどカオスになることもしばしばですが、Docker を使えば、そんなことはありません。

隔離されたコンテナ単位で設定をし、ダメなら破棄すれば良いわけですから。

このブログが動いているサーバー(さくらVPS)には基本的に Docker しかインストールされていませんが、WordPress を始め、OwnCloud(クラウドストレージ) や lychee(写真管理・共有サービス)、Madsonic(MP3 ストリーミングサーバー) などのサービスが稼働しています。

別のさくらVPS にも基本的には Docker しかインストールしていませんが Gitbucket(Github クローン)、Jenkins(CI サーバー)、Redmine(プロジェクト管理) や fluentd(データ集約サーバー) とか Grafana(監視サーバーUI)など、とにかくたくさん動いてます。

しかもサーバー代以外は一切費用はかかりません。全部無料。

何れにしても、Docker を使うことによって

  1. 簡単にコンテナを単独で起動したり、
  2. 他のコンテナとリンクさせて動かすこともできたり、
  3. コンテナを停止・破棄すれば何事もなかったかのように、元の状態に戻せて、
  4. もう一度コンテナを起動すれば、また同じ状態の(初期状態の)コンテナが起動できる。

ことが Docker の大きな特徴であり Docker を使うメリットだと思います。

ってことでじゃんじゃん Docker してみてください。

でわでわ。








この記事にコメントする





Copyright © 2012 - 2014 MacBook Air とWordPressでこうなった All rights reserved
Powered by WordPress.