Like My Status

webエンジニアが書く備忘録。

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

はじめに

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

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

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

準備

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

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

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

今回の構成

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

  • ホストOS
    • Nginx
  • 動作コンテナ
    • MySQL
    • Wordpress

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

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

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

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

コンテナを動作させる

準備

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

そのため今回主に記述したのは、docker-compoes.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のサポートを行い、導入コストを下げるような取り組みもできればなと。

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