あかんわ

覚えたことをブログに書くようにすれば多少はやる気が出るかと思ったんです

Docker for MacでWordPress

こちらの記事を参考に、Docker for MacWordPressの環境を構築しました。

作業の内容としては、Docker Hub*1にあるDockerのOfficial RepositoriesからDockerイメージを持ってきて、WordPressが入ってるDockerコンテナを起動するだけです。

  1. Docker for Macをインストール
  2. MySQLのDockerイメージを持ってきてコンテナを起動*2
  3. WordPressのDockerイメージを持ってきてコンテナを起動*3

目次

いかにしてその心情に至ったか

  • Mac WordPress』で検索してMAMPを使う方法を知る
                  ↓
  • MAMPApacheを使うよりVagrantVirtualBoxで仮想化環境を用意する方が汎用性が高い気がしたので仮想化環境の構築を考える
                  ↓
  • 仮想化と言えばDockerがあるじゃないか!!てかDocker使ってみたい!!と考える

で、Dockerを使ってみることにしました。

Docker for Macの準備

Get started with Docker for Macを見ながら、Docker.appをダウンロードしてインストールします。

Install Docker on macOSによると、Docker for Macは仮想化ソフトのxhyveLinuxカーネルDocker Engineを動かしてるそうです。

Docker for Mac is our newest offering for the Mac. It runs as a native Mac application and uses xhyve to virtualize the Docker Engine environment and Linux kernel-specific features for the Docker daemon.
Install Docker on macOS - Docker

インストールが完了すると、dockerコマンドが使えるようになります。

$docker --version 
Docker version 1.12.3, build 6b644ec

MySQLをDockerコンテナで起動

docker runコマンドで、MySQLデータベースを動かすDockerコンテナを起動します。

$docker run --name wordpress_db -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
  • --name wordpress_db … コンテナに名前を付けるオプション*4で起動するコンテナの名前にwordpress_dbを設定する
  • -e … コンテナに環境変数を設定するオプション
  • MYSQL_ROOT_PASSWORD=password … MySQLのルートユーザのパスワードにpasswordを設定する
  • -d … コンテナをデタッチドモードでバックグランドで起動するオプション
  • mysql:5.7 … リポジトリ*5にあるmysqlImageの5.7のtag*6のDockerイメージをコンテナとして起動する

起動したコンテナの状況は、docker psコマンドで確認できます。

$docker ps                       
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
560a00d4a51f        mysql:5.7           "docker-entrypoint.sh"   46 seconds ago      Up 45 seconds       3306/tcp               wordpress_db
MySQLが動いているDockerコンテナを操作してみる

docker execコマンド*7で、MySQLが動いているDockerコンテナのbashを動かし、CLIシェルを操作します。

$docker exec -it wordpress_db bash
root@560a00d4a51f:/# 
  • -i … コンテナをインタラクティブに操作するためにコマンド実行後も標準入力を開いたままにしておくオプション
  • -t … コンテナに仮想的にTTYを割り当てて標準出力を表示させるオプション
  • -it コンテナ名 bash … コンテナでbashコマンドを実行してホストOS*8からコンテナのシェルを操作できるようにする

※注:コンテナへの接続で調べるとdocker attachコマンドをよく見かけますが、デーモン*9しか動いていないコンテナの場合は、docker attachコマンドで接続してもあまり意味は無い*10ようです。

とりあえず、ps axコマンドでコンテナの状態を確認してみます。

$docker exec -it wordpress_db bash
root@560a00d4a51f:/# ps ax               
  PID TTY      STAT   TIME COMMAND
    1 ?        Ssl    0:03 mysqld
   71 ?        Ss     0:00 bash
  365 ?        R+     0:00 ps ax

mysqldが動いているのを確認できました(๑•̀ㅂ•́)و✧

exitコマンドでbashプロセスを終了すれば、コンテナへの接続を終了できます。

root@560a00d4a51f:/# exit
exit

WordPressをDockerコンテナで起動

docker runコマンドで、WordPressを動かすDockerコンテナを起動します。

$docker run --name wapuu_dock --link wordpress_db:mysql -p 8080:80 -v ~/WapuuDock:/var/www/html -d wordpress
  • --name wapuu_dock … コンテナに名前を付けるオプション*11で起動するコンテナの名前にwapuu_dockを設定する
  • --link wordpress_db:mysql … コンテナの起動時に他のコンテナに接続するオプションでMySQLを動かしているコンテナに接続する
  • -p 8080:80 … ポートを設定するオプションでホストOS*12のポート8080とDockerコンテナのポート80を対応させる
  • -v ~/WapuuDock:/var/www/html … ボリュームを設定するオプションでホストOS*13ディレクト~/WapuuDockとコンテナのディレクト/var/www/htmlを対応させる
  • -d … コンテナをデタッチドモードでバックグランドで起動するオプション
  • wordpressリポジトリ*14にあるwordpressImageのlatest*15のDockerイメージをコンテナとして起動する

docker runが完了すると、-vオプションで指定したディレクトリにWordPressパッケージが展開されています。

~/WapuuDock
$ls
index.php    wp-activate.php     wp-comments-post.php  wp-content   wp-links-opml.php  wp-mail.php      wp-trackback.php
license.txt  wp-admin            wp-config-sample.php  wp-cron.php  wp-load.php        wp-settings.php  xmlrpc.php
readme.html  wp-blog-header.php  wp-config.php         wp-includes  wp-login.php       wp-signup.php
WordPressが動いているDockerコンテナの確認

docker psコマンドでDockerコンテナの状態を確認してみると、WordPressが動いているwapuu_dockコンテナのPORTSの欄に0.0.0.0:8080->80/tcpと表示されているので、0.0.0.0:8080wapuu_dockコンテナのWordPressに接続できるようです。

$docker ps -a                                                                                                       
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
33ff6cd31853        wordpress           "docker-entrypoint.sh"   6 seconds ago       Up 5 seconds        0.0.0.0:8080->80/tcp   wapuu_dock
560a00d4a51f        mysql:5.7           "docker-entrypoint.sh"   46 seconds ago      Up 45 seconds       3306/tcp               wordpress_db

ブラウザのアドレスバーに、0.0.0.0:8080を入力してみます。 f:id:b0npu:20161214214719p:plain

あっさりと、WordPressの初期設定画面が表示されました(゚∀゚) f:id:b0npu:20161214215230p:plain

初期設定が終わった後は、指定したディレクトリに展開されているWordPressパッケージの各種ファイルを編集して、テーマのカスタマイズ等に着手します( つ•̀ω•́)つ

参考記事

開発環境

*1:Dockerイメージを共有できたりするレジストリサービス

*2:WordPressのコンテナ起動時にデータベースを指定するので先にMySQLのコンテナを起動する

*3:先に起動させたMySQLのコンテナをデータベースに指定して起動する

*4:--nameオプションはイメージやコンテナを指定する前に記述する必要があるようです

*5:指定したイメージがローカルに無ければDocker Hubとかのイメージリポジトリを調べるようです

*6:参考記事と同じくversion5.7を選択しました

*7:起動しているコンテナで新しいコマンドを実行するコマンド

*8:私の場合で言えばMacのターミナル

*9:MySQLが動いているコンテナであればmysqld

*10:私の環境に問題があるのかも知れませんが

*11:--nameオプションはイメージやコンテナを指定する前に記述する必要があるようです

*12:私の場合で言えばMac

*13:私の場合で言えばMac

*14:指定したイメージがローカルに無ければDocker Hubとかのイメージリポジトリを調べる

*15:tagの指定がない場合はlatestが選択される