Edited at

今更だけど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分くらいかかりました。336MBでした。

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

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

スクリーンショット 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:5.7.21


5.7.21: Pulling from library/mysql
2a72cbf407d6: Pull complete
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:5.7.21

$ 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って何が違うんだ?と疑問に思ったので調べたら記事ありました。


おわりに

超サクっとローカル環境を用意することができました。

本番サーバーへの公開もラクチンになりそうな予感。(まだちゃんと調べてない)


* お願い

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


* 参考サイト