WordPress
環境構築
docker

今更だけどDockerでWordPress環境を用意してみたら超簡単だった

はじめに

今回はだいぶ今更感のあるDockerについて備忘録。
仮想環境はVirtualBox+Vagrant一択かと思っていましたが、Docker軽くて良い!

違いとかは詳しく書いてる記事が他にあります。

0. Dockerを使い始めた経緯

個人で作成している検証環境を用意するほどでもないWordPressサイトを
ローカルで動作確認したかったので、Dockerで用意することにしました。

Dockerのインストール

1. 環境に応じてDockerをインストール

* Windowsの場合

Windows 10 Professional/Enterprise 64-bitDocker CE for Windows

それ以外Docker Toolbox

* Mac OSの場合

OS X Yosemite 10.10.3 以降Docker CE for Mac

それ以前Docker Toolbox

スクリーンショット 2018-03-18 23.55.14.png

自分はMac OS 10.12.6 だったのでDocker CE for Macを使用です。

弊家のショボいネット環境でダウンロードに3,4分くらいかかりました。336MGでした。

インストール後は指示に従ってアプリケーションフォルダに移動した後、ダブルクリックで一度開きます。

ログインを求められるので、アカウントがあればログイン、なければ新規登録します。

スクリーンショット 2018-03-19 0.07.29.png

スクリーンショット 2018-03-19 0.09.30.png

2. 動作確認

インストールが成功しているかターミナルを開いて確認します。

$ docker ps
CONTAINER ID  IMAGE  COMMAND  CREATED  STATUS  PORTS  NAMES

docker ps でコンテナリストを表示します。
インストールしただけであれば、上記のとおり、ヘッダーのみが表示されるはず。

WordPress環境構築

3. イメージファイル準備

すでに、アプリケーションのインストールまで設定されているイメージファイルがあるみたいだったので
今回はそれをそのまま利用する方法で構築します。

ちなみにWordPressを動かすためにMySQLも必要です。

どちらもpullコマンドで簡単ダウンロード。
何も指定しなければ最新版が落とされます。

$ docker pull mysql

Using default tag: latest
latest: Pulling from library/mysql
2a72cbf407d6: Already exists 
38680a9b47a8: Pull complete 
4c732aa0eb1b: Pull complete 
c5317a34eddd: Pull complete 
f92be680366c: Pull complete 
e8ecd8bec5ab: Pull complete 
2a650284a6a8: Pull complete 
5b5108d08c6d: Pull complete 
beaff1261757: Pull complete 
c1a55c6375b5: Pull complete 
8181cde51c65: Pull complete 
Digest: sha256:691c55aabb3c4e3b89b953dd2f022f7ea845e5443954767d321d5f5fa394e28c
Status: Downloaded newer image for mysql:latest


$ docker pull wordpress

Using default tag: latest
latest: Pulling from library/wordpress
2a72cbf407d6: Pull complete 
273cd543cb15: Pull complete 
ec5ac8875de7: Pull complete 
9106e19b56c1: Pull complete 
ee2f70ac7c7d: Pull complete 
7257ad6985e8: Pull complete 
18f5c2055da2: Pull complete 
85293a6fdd80: Pull complete 
9e797eeb0c14: Pull complete 
09b55b88e646: Pull complete 
2cd18314711e: Pull complete 
2cdde1a28323: Pull complete 
fc3ee0d04adb: Pull complete 
b7e1265473a6: Pull complete 
f607995e3490: Pull complete 
40b3f428704d: Pull complete 
0ab6b2d829e0: Pull complete 
741ca917912d: Pull complete 
28cd545f2968: Pull complete 
Digest: sha256:9b785c740dd17e58436c00ac14d0f683d39f0e25c0ea63e71d44107f06eee5be
Status: Downloaded newer image for wordpress:latest

4. コンテナ起動

実際にイメージファイルを起動してみます。

$ docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=test-pw -d mysql

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

一行目はmysqlのイメージファイルに「test-mysql」と明示的なコンテナ名をつけて、パスワードに「test-pw」を設定しています。
二行目では、wordpressのイメージファイルに「test-wordpress」と名付けて、mysqlに「test-mysql」をリンクさせ、ポートをローカルの8080:80に指定。

ここまで実行すると、docker ps コマンドで、test-mysqlとtest-wordpressが起動中であることを確認できます。

そしてブラウザにアクセスすると・・・http://localhost:8080/

スクリーンショット 2018-03-19 1.15.26.png

初期設定の画面が出力されるので、必要事項を選択・入力します。

スクリーンショット 2018-03-19 1.17.15.png

すると、あっという間にこの通り、WordPressをローカルで触れる環境のできあがり!

スクリーンショット 2018-03-19 1.19.07.png

5. コンテナにアクセス

起動中のコンテナにアクセスするにはexecコマンドを使います。
これでWordPressがインストールされているディレクトリにアクセスします。

$ docker exec -it test-wordpress /bin/bash

オプションコマンドについては以下記事を参考に。

上記方法でコンテナにアクセスすれば、対話的にLinuxコマンドが使えるので
WordPress内のテーマファイルの書き換えや権限変更なども可能です。

[root@040e6ea385dc:/var/www/html# ls -la

total 204
drwxr-xr-x  5 www-data www-data  4096 Mar 18 16:06 .
drwxr-xr-x  1 root     root      4096 Mar 14 13:58 ..
-rw-r--r--  1 www-data www-data    35 Mar 18 16:18 .htaccess
-rw-r--r--  1 www-data www-data   418 Sep 25  2013 index.php
-rw-r--r--  1 www-data www-data 19935 Jan  6 19:32 license.txt
-rw-r--r--  1 www-data www-data  7413 Dec 12  2016 readme.html
-rw-r--r--  1 www-data www-data  5434 Sep 23 12:21 wp-activate.php
drwxr-xr-x  9 www-data www-data  4096 Feb  6 15:49 wp-admin
-rw-r--r--  1 www-data www-data   364 Dec 19  2015 wp-blog-header.php
-rw-r--r--  1 www-data www-data  1627 Aug 29  2016 wp-comments-post.php
-rw-r--r--  1 www-data www-data  2764 Mar 18 16:06 wp-config-sample.php
-rw-r--r--  1 www-data www-data  3145 Mar 18 16:06 wp-config.php
drwxr-xr-x  6 www-data www-data  4096 Mar 18 16:15 wp-content
-rw-r--r--  1 www-data www-data  3669 Aug 20  2017 wp-cron.php
drwxr-xr-x 18 www-data www-data 12288 Feb  6 15:49 wp-includes
-rw-r--r--  1 www-data www-data  2422 Nov 21  2016 wp-links-opml.php
-rw-r--r--  1 www-data www-data  3306 Aug 22  2017 wp-load.php
-rw-r--r--  1 www-data www-data 36583 Oct 13 02:10 wp-login.php
-rw-r--r--  1 www-data www-data  8048 Jan 11  2017 wp-mail.php
-rw-r--r--  1 www-data www-data 16246 Oct  4 00:20 wp-settings.php
-rw-r--r--  1 www-data www-data 30071 Oct 18 17:36 wp-signup.php
-rw-r--r--  1 www-data www-data  4620 Oct 23 22:12 wp-trackback.php
-rw-r--r--  1 www-data www-data  3065 Aug 31  2016 xmlrpc.php

コンテナの起動と停止

最後に、コンテナの起動・停止コマンドを念のため。

-- 起動
$ docker start <コンテナ名 or コンテナID>

-- 停止
$ docker stop <コンテナ名 or コンテナID>

startstopだなんて。めっちゃ簡単です。

今回の場合は「test-wordpress」と「test-mysql」を両方停止しておきます。
停止しただけなら、削除ではないのでまたstartした時に前回の続きから使えるわけですね。

ちなみに、runstartって何が違うんだ?と疑問に思ったので調べたら記事ありました。

おわりに

超サクっとローカル環境を用意することができました。
本番サーバーへの公開もラクチンになりそうな予感。(まだちゃんと調べてない)

* お願い

間違えている情報やリンク切れがありましたらどうぞご指摘ください。

* 参考サイト