Dockerを使ってクラウド環境に5分でWordPressプロジェクトを構築する

2021/1/30に実施したOSC2021 Online/Osakaのハンズオンセミナーに登壇させていただきましたが、最後の質疑応答でKatacodaのクラウド環境にWordPressが導入できるかと言う質問をいただいたのですが、自分では試したことが無くおそらくできるのではという曖昧な回答に留めていました。

この度、KatacodaのCentOSプレイグラウンド上で、Dockerを使ってWordPressの実行環境を5分もかからずにデプロイできたのでその手順をまとめておきます。

KatacodaのCentOS Playgroundを起動

Katacodaって何?という方は、まずは以下の記事やハンズオン動画をご覧ください。

KatacodaでCentOSが使えるようになるまでについては、以下の記事も参考にしてください。

Dockerのバージョン確認

CentOS PlaygroundにはあらかじめDockerが導入されているのでバージョンを確認します。

[root@7284fdf7517e ~]# docker -v
Docker version 1.12.6, build 85d7426/1.12.6
[root@4f48bae0b96d ~]# docker -v
Docker version 1.13.1, build dded712/1.13.1

後から気が付いたのですが、インスタンスによってdockerのバージョンが異なるようです。Katacodaのインフラってどうやって構築しているんですかね。興味深いです。

ちなみに、1.13.xの場合は、新体系のコマンドに対応しています。

念のため、Dockerのupdateを実行します。

yum updateでまとめてアップデートしても良いのですが、パッケージが300近く、トータルで370MBの容量となり、時間もかかるのでDockerだけにしておきます。

[root@4f48bae0b96d ~]# yum update docker
(中略)
Dependency Installed: PyYAML.x86_64 0:3.10-11.el7 atomic-registries.x86_64 1:1.22.1-33.gitb507039.el7_8 libyaml.x86_64 0:0.1.4-11.el7_0 python-pytoml.noarch 0:0.1.14-1.git7dea353.el7 subscription-manager-rhsm-certificates.x86_64 0:1.24.45-1.el7.centos
Updated: docker.x86_64 2:1.13.1-203.git0be3e21.el7.centos
Dependency Updated: docker-client.x86_64 2:1.13.1-203.git0be3e21.el7.centos docker-common.x86_64 2:1.13.1-203.git0be3e21.el7.centos
Complete!
[root@4f48bae0b96d ~]# docker -v
Docker version 1.13.1, build 0be3e21/1.13.1

このアップデートでインスタンス毎のバージョン違いを吸収して、最新のバージョンに統一できます。

docker composeのインストール

今回はできるだけ短時間でWordPressの実行環境を構築したいので、Docker Composeを使用します。

Docker Composeは、Webアプリケーションなどの構築に必要なコンテナ構築に必要な手順などをファイルに記載して一気に実行できます。

一般的に、WordPressの構築には、Linux、Apache、MySQL(MariaDB)、PHPの4つが必要です(LAMP環境と呼ばれます)。ちなみに、ApacheはNginx、MySQL(MariaDB)はPostgreSQLで運用する場合もあります。

コンテナを使用せず、LinuxサーバーでWordPressを使うには、それ以外の3つを導入する必要があり、それぞれが連携するように設定しなくてはいけません。

WordPressの構築に必要な環境はコンテナでも用意されており、Docker Composeを使えば、連携を設定した上でコンテナの導入ができるので手間がかかりません。

Docker Composeの詳細についてはまた別途解説しようと思いますが、基本的には一定の書式に従ったテキストファイルを用意するだけでOKです。

Docker Composeのインストール

標準ではDocker Composeはインストールされていないため、yumコマンドでインストールします。

[root@4f48bae0b96d ~]# docker-compose --help
-bash: docker-compose: command not found
[root@4f48bae0b96d ~]# yum install docker-compose
(中略)
Installed: docker-compose.noarch 0:1.18.0-4.el7
Dependency Installed: libtirpc.x86_64 0:0.2.4-0.16.el7 python3.x86_64 0:3.6.8-18.el7 python3-libs.x86_64 0:3.6.8-18.el7 python3-pip.noarch 0:9.0.3-8.el7 python3-setuptools.noarch 0:39.2.0-10.el7 python36-PyYAML.x86_64 0:3.13-1.el7 python36-cached_property.noarch 0:1.5.1-2.el7 python36-chardet.noarch 0:3.0.4-1.el7 python36-docker.noarch 0:2.6.1-3.el7 python36-docker-pycreds.noarch 0:0.2.1-2.el7 python36-dockerpty.noarch 0:0.4.1-18.el7 python36-docopt.noarch 0:0.6.2-8.el7 python36-idna.noarch 0:2.10-1.el7 python36-jsonschema.noarch 0:2.5.1-4.el7 python36-pysocks.noarch 0:1.6.8-7.el7 python36-requests.noarch 0:2.14.2-2.el7 python36-six.noarch 0:1.14.0-2.el7 python36-texttable.noarch 0:1.6.2-1.el7 python36-urllib3.noarch 0:1.25.6-2.el7 python36-websocket-client.noarch 0:0.47.0-2.el7 

結構な数の依存ファイルがインストールされますが、大半がPython関連のものです。

念のためdocker-composeのバージョンも確認しましょう。

$ docker-compose -v
docker-compose version 1.26.0, build unknown
$ docker-compose version
docker-compose version 1.26.0, build unknown
docker-py version: 4.4.0
CPython version: 3.8.5
OpenSSL version: OpenSSL 1.1.1i 8 Dec 2020

docker-compose.ymlファイルを準備しよう

わかりやすいので、Docker HubのWordPress公式に記載されているサンプルファイル使います。

参考 wordpress – Docker Official Images – How to use this imageDocker Hub

以下の内容を、エディタを使いdocker-compose.ymlというファイル名で作成します。

KatacodaはWebブラウザでファイルのドラッグアンドドロップは受け付けていないので、viでdocker-compose.ymlファイルを作成します。

# vi docker-compose.yml

vi起動後、下記の内容をコピペしてviを終了します。これで準備OK。

version: '3.1'
services: wordpress: image: wordpress restart: always ports: - 8080:80 environment: WORDPRESS_DB_HOST: db WORDPRESS_DB_USER: exampleuser WORDPRESS_DB_PASSWORD: examplepass WORDPRESS_DB_NAME: exampledb volumes: - wordpress:/var/www/html db: image: mysql:5.7 restart: always environment: MYSQL_DATABASE: exampledb MYSQL_USER: exampleuser MYSQL_PASSWORD: examplepass MYSQL_RANDOM_ROOT_PASSWORD: '1' volumes: - db:/var/lib/mysql
volumes: wordpress: db:

Docker Compose自体、LinuCの試験範囲外のようなので、今回は書式についての細かい解説はしませんが、眺めてみるとなんとなく何を設定しているのかわかるのではないでしょうか。

大文字で記載されているところは、WordPressがデータの格納先になるMySQLと接続するための設定になります。

エスパくん

ポート設定を80から8080にしているところも要チェックです。ちなみに、Katacodaはサンドボックス環境なのでポートは80のままでも良いですし、ウェルノウンポート以外であれば何番にしても問題ないとおもいます。

Docker-Composeを実行しよう

# docker-compose up -d

を実行すると、docker-compose.ymlに記載された内容で、WordPressとMySQLのコンテナイメージが取得され、それぞれが連携するように自動的に設定が行われます。

[root@4f48bae0b96d ~]# docker-compose up -d
Creating network "root_default" with the default driver
Creating volume "root_wordpress" with default driver
Creating volume "root_db" with default driver
Pulling wordpress (wordpress:latest)...
Trying to pull repository registry.access.redhat.com/wordpress ...
Trying to pull repository docker.io/library/wordpress ...
(中略)
Status: Downloaded newer image for docker.io/wordpress:latest
Pulling db (mysql:5.7)...
Trying to pull repository registry.access.redhat.com/mysql ...
Trying to pull repository docker.io/library/mysql ...
(中略)
Status: Downloaded newer image for docker.io/mysql:5.7
Creating root_wordpress_1 ... done
Creating root_db_1 ... done

特にエラーが表示されていなければこれで導入は完了です。

WordPressの動作チェック

ブラウザ左上の+ボタン(WebPreview)をクリックして「Select port to view on Host 1」を選択し、####に8080を入力してDisplay Portボタンをクリックします。

下の画像が表示されたらWordPressの導入に成功しています。

以降は、WordPressの設定になります。

日本語を選択して、

必須事項を記入して下のインストールボタンを押せば設定完了。設定したアカウントでログインすればWordPressのダッシュボードが表示されます。

エスパくん

Katacodaのインスタンス自体、短時間で消滅してしまうのであくまで必須事項は適当な物で良いでしょう。ただ、ユーザー名やパスワードををadminやdockerなど、単純なものにするとWebブラウザが漏洩しているとして警告してくることがあります。

ダッシュボード左上のタイトルにマウスオーバーして「サイトを表示」をクリックすれば実際のブログの画面が表示されます。

WordPressの使い方については、趣旨と異なるのでここではこれ以上解説しませんが、DockerとDocker Composeでこんなに簡単に、しかもクラウド環境の元でWordPressのようなCMS環境が構築できることがおわかりいただけたのではないでしょうか。

本当に5分で環境構築できるか動画にしてみました

途中もたついているところもありますが、4分ちょっとでインストール前まで行けたことがおわかりいただけると思います。