Wordpress を Docker で動かすためにやったこと
はじめに
最近使うことが当たり前になってきている docker ですが、仕事上使うことがあっても個人ではなかなか使う機会がありませんでした。
個人で契約しているサーバーの整理すると同時に、Docker 化出来るものは全て Docker 化することにしました。
今回は WordPress で動かしているこの blog を Docker 化する際に行ったことをまとめます。
少し構成としてややこしい部分もあるので、全体構成についてはまた別途書きます。
準備
まず、Docker を動かせる環境を用意しましょう。
私は Mac を使っていますので、Docker for Mac のインストールと、Docker 公式ページを参照に、docker-compose を導入しました。
手順については、他のところで記述があるので今回は割愛します。リンクを貼っておくのでそちら確認してみてください。
https://hub.docker.com/editions/community/docker-ce-desktop-mac
https://docs.docker.com/compose/install/
今回の構成
今回構成として以下のようにしました。
- nginx
- MySQL
- WordPress
シンプルに 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 -latotal 24drwxr-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.ymldrwxr-xr-x 7 mziyut staff 224 Dec 24 03:56 wordpressdocker-compose pullPulling mysql (mysql:5.7)...5.7: Pulling from library/mysqlf49cf87b52c1: Pull complete78032de49d65: Pull complete837546b20bc4: Pull complete9b8316af6cc6: Pull complete1056cf29b9f1: Pull complete86f3913b029a: Pull complete4cbbfc9aebab: Pull complete8ffd0352f6a8: Pull complete45d90f823f97: Pull completeca2a791aeb35: Pull completeDigest: sha256:1f95a2ba07ea2ee2800ec8ce3b5370ed4754b0a71d9d11c0c35c934e9708dcf1Status: Downloaded newer image for mysql:5.7Pulling wordpress (wordpress:php7.1)...php7.1: Pulling from library/wordpressf49cf87b52c1: Already exists185616061386: Pull complete4330d62fa9e0: Pull complete457292eacdcc: Pull complete1acf2a966b64: Pull completec6c8840e3cd3: Pull complete0aa8917ee733: Pull complete3003eebbec26: Pull completead2353b7ccbd: Pull completebc7ab65b6c7b: Pull complete284e28fbafc6: Pull complete15b93b7470f2: Pull completedc1651c8a361: Pull complete2a91132e09c2: Pull complete341479330e5d: Pull completec2c608737b35: Pull complete4cd620feafb8: Pull completea7fc8fdd2d60: Pull completedf7d12471dbb: Pull completeDigest: sha256:e58f98987ce6d6233d6f423509f4beec2478ec1d6dee9cfcc3532d732f4536abStatus: Downloaded newer image for wordpress:php7.1docker-compose up -dCreating network "blogmziyutcom_default" with the default driverCreating blogmziyutcom_mysql_1 ...Creating blogmziyutcom_mysql_1 ... doneCreating blogmziyutcom_wordpress_1 ...Creating blogmziyutcom_wordpress_1 ... done
docker-compose に記載したホストへアクセスしてみましょう。
WordPress のセットアップ画面が表示されました。
新規で立ち上げる人はそのままセットアップを進め、移行する人は移行してください。
まとめ
今回、Wordpress を立ち上げるにあたって Dockerfile を記述することなく docker-compose.yml を記述することで動作させることが可能でした。
この理由は、前にも記述している Docker Hub のエコシステムがあってこそです。
私も OSS 等公開するときは、積極的に Docker のサポートし導入コストを下げるような取り組みをしていきます。
他のシステムも移行させたのでそれは後ほど別エントリで記述します。