Wordpress を Docker で動かすためにやったこと

はじめに

最近使うことが当たり前になってきている docker ですが、仕事上使うことがあっても個人ではなかなか使う機会がありませんでした。 個人で契約しているサーバーの整理すると同時に、Docker 化出来るものは全て Docker 化することにしました。

今回は Wordpress で動かしているこの blog を Docker 化する際に行ったことをまとめます。

少し構成としてややこしい部分もあるので、全体構成についてはまた別途書きます。

準備

まず、Docker を動かせる環境を用意しましょう。

私は Mac を使っていますので、Docker for Mac のインストールと、Docker 公式ページを参照に、docker-compose を導入しました。

手順については、他のところで記述があるので今回は割愛します。リンクを貼っておくのでそちら確認してみてください。

hub.docker.com

docs.docker.com

今回の構成

今回構成として以下のようにしました。

シンプルに Wordpress を動作させるコンテナおよび、MySQL を動作させるコンテナのみとなります。

nginx をホスト OS に置いている理由として、複数サービスを動作させるためです。

理想としては 1 サービス 1 ホストとしたいですが、湯水のようにはお金は使えません。複数のサービスを動作させるためだけにこのような構成にしています。

理想としては、Wordpress コンテナ自体に Web サーバーの役割を果たす Apache がすでに内包されているため、そのまま待ち受けることが望ましいです。

コンテナを動作させる

準備

今回、特別に Dockerfile を記述することはありませんでした。理由としてはすでに使用できる Docker image が、Docker Hub に公開されているためです。

そのため今回主に記述したのは、docker-compose.yml となります。

version: '3.1'

services:
  wordpress:
    image: wordpress:php7.1
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_NAME: %WORDPRESS_DB_NAME%
      WORDPRESS_DB_USER: %WORDPRESS_DB_USER%
      WORDPRESS_DB_PASSWORD: %WORDPRESS_DB_PASSWORD%
      WP_HOME: https://blog.mziyut.com
      WP_SITEURL: https://blog.mziyut.com
    volumes:
      - ./wordpress/themes:/var/www/html/wp-content/themes
      - ./wordpress/plugins:/var/www/html/wp-content/plugins
      - ./wordpress/uploads:/var/www/html/wp-content/uploads
      - ./wordpress/updraft:/var/www/html/wp-content/updraft
      - ./wordpress/upgrade:/var/www/html/wp-content/upgrade
      - ./wordpress/languages:/var/www/html/wp-content/languages
    depends_on:
      - mysql

  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: %MYSQL_ROOT_PASSWORD%
      MYSQL_DATABASE: %WORDPRESS_DB_NAME%
      MYSQL_USER: %WORDPRESS_DB_USER%
      MYSQL_PASSWORD: %WORDPRESS_DB_PASSWORD%
    volumes:
      - ./data/db:/var/lib/mysql

%で囲まれた部分は、適宜書き換えてください。

構成の部分で触れましたが今回とてもシンプルなため、コード量もとても少ない印象です。 なぜ、volume 指定をしているかは、以下ドキュメントを参照してみてください。

Compose file version 3 reference | Docker Documentation (Volume configuration reference)

volume 指定しなければ、コンテナを落とした際にデータが飛ぶだけなので消してもいい場合記述する必要はありません。

起動

準備したコンテナ等を立ち上げます。

まず、docker-compose.yml に記述したベースイメージを pull その後コンテナを立ち上げます。

cd /path/to/wordpress-docker-root/
ls -la
total 24
drwxr-xr-x   7 mziyut  staff   224 Dec 24 03:56 .
drwxr-xr-x   5 mziyut  staff   160 Dec 24 03:55 ..
drwxr-xr-x  12 mziyut  staff   384 Dec 24 03:56 .git
-rw-r--r--   1 mziyut  staff     7 Dec 24 03:56 .gitignore
-rw-r--r--   1 mziyut  staff    19 Dec 24 03:56 README.md
-rw-r--r--   1 mziyut  staff  1073 Dec 24 03:56 docker-compose.yml
drwxr-xr-x   7 mziyut  staff   224 Dec 24 03:56 wordpress
docker-compose pull
Pulling mysql (mysql:5.7)...
5.7: Pulling from library/mysql
f49cf87b52c1: Pull complete
78032de49d65: Pull complete
837546b20bc4: Pull complete
9b8316af6cc6: Pull complete
1056cf29b9f1: Pull complete
86f3913b029a: Pull complete
4cbbfc9aebab: Pull complete
8ffd0352f6a8: Pull complete
45d90f823f97: Pull complete
ca2a791aeb35: Pull complete
Digest: sha256:1f95a2ba07ea2ee2800ec8ce3b5370ed4754b0a71d9d11c0c35c934e9708dcf1
Status: Downloaded newer image for mysql:5.7
Pulling wordpress (wordpress:php7.1)...
php7.1: Pulling from library/wordpress
f49cf87b52c1: Already exists
185616061386: Pull complete
4330d62fa9e0: Pull complete
457292eacdcc: Pull complete
1acf2a966b64: Pull complete
c6c8840e3cd3: Pull complete
0aa8917ee733: Pull complete
3003eebbec26: Pull complete
ad2353b7ccbd: Pull complete
bc7ab65b6c7b: Pull complete
284e28fbafc6: Pull complete
15b93b7470f2: Pull complete
dc1651c8a361: Pull complete
2a91132e09c2: Pull complete
341479330e5d: Pull complete
c2c608737b35: Pull complete
4cd620feafb8: Pull complete
a7fc8fdd2d60: Pull complete
df7d12471dbb: Pull complete
Digest: sha256:e58f98987ce6d6233d6f423509f4beec2478ec1d6dee9cfcc3532d732f4536ab
Status: Downloaded newer image for wordpress:php7.1
docker-compose up -d
Creating network "blogmziyutcom_default" with the default driver
Creating blogmziyutcom_mysql_1 ...
Creating blogmziyutcom_mysql_1 ... done
Creating blogmziyutcom_wordpress_1 ...
Creating blogmziyutcom_wordpress_1 ... done

docker-compose に記載したホストへアクセスしてみましょう。 Wordpress のセットアップ画面が表示されました。 新規で立ち上げる人はそのままセットアップを進め、移行する人は移行してください。

まとめ

今回、Wordpress を立ち上げるにあたって Dockerfile を記述することなく docker-compose.yml を記述することで動作させることが可能でした。 この理由は、前にも記述している Docker Hub のエコシステムがあってこそです。 私も OSS 等公開するときは、積極的に Docker のサポートし導入コストを下げるような取り組みをしていきます。

他のシステムも移行させたのでそれは後ほど別エントリで記述します。