Docker Composeを使ってWordPressを構築

IT技術

はじめに

Docker Composeの概要やインストール、そしてDocker Composeを使ってWordPressを構築するまでを記載します。

Docker Composeとは

複数のDockerコンテナ(例えば、WEBサーバ+DBサーバの組み合わせ)からなるシステムを簡単に作成・起動するツールです。

標準の「docker run」コマンドを使う場合、コンテナ1つ1つ作成・起動するに使用するポート番号やボリュームなど多数のオプション指定があり複雑です。
また、個別にネットワーク作成(docker networkコマンド)や、ボリューム作成(docker volumeコマンド)を事前に実施しておく必要があります。

Docker Composeを使うと、設定ファイル(YMLファイル)を用意しておけば、単純なコマンドでこれら一連の作成・起動処理を実行することができます。

Docker Composeのインストール

まずはDocker Composeをインストールします。
※事前にDocker本体をインストールしておくことが前提です。
(参考:Oracle CloudのVM上にDockerをインストールしてみた。

公式ドキュメントを参考に、インストールします。
※今回は執筆時点の最新バージョン1.29.2をインストールしました。

[root@testserver ~]# curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   633  100   633    0     0   1571      0 --:--:-- --:--:-- --:--:--  1574
100 12.1M  100 12.1M    0     0  5875k      0  0:00:02  0:00:02 --:--:-- 5657k
[root@testserver ~]#

実行権限を付与します。

[root@testserver ~]# ll /usr/local/bin/docker-compose
-rw-r--r--. 1 root root 12737304 Jul 23 23:42 /usr/local/bin/docker-compose
[root@testserver ~]# chmod +x /usr/local/bin/docker-compose
[root@testserver ~]# ll /usr/local/bin/docker-compose
-rwxr-xr-x. 1 root root 12737304 Jul 23 23:42 /usr/local/bin/docker-compose
[root@testserver ~]#

インストールできました!

[root@testserver ~]# docker-compose --version
docker-compose version 1.29.2, build 5becea4c
[root@testserver ~]#

Docker Composeを使ってWordPressを構築

では、Docker Composeを使ってWordPressを構築してみます。
今回構築する環境は下図です。

設定ファイル「docker-compose.yml」の作成

任意のディレクトリに、設定ファイル「docker-compose.yml」を作成します。

[root@testserver ~]# mkdir -p ~/dockertest/wordpress
[root@testserver ~]# cd ~/dockertest/wordpress
[root@testserver wordpress]# vi docker-compose.yml
version: '3'
services:
  wp-db:
    image: mysql:8.0.26
    networks:
      - wp-network
    volumes:
      - ./wp-data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wp-root-pass
      MYSQL_DATABASE: wp-data
      MYSQL_USER: wp-user
      MYSQL_PASSWORD: wp-pass
  wp-webapp:
    depends_on:
      - wp-db
    image: wordpress:5.8.0-php7.4-apache
    networks:
      - wp-network
    volumes:
      - ./wp-htdocs:/var/www/html
    ports:
      - "8080:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: wp-db
      WORDPRESS_DB_NAME: wp-data
      WORDPRESS_DB_USER: wp-user
      WORDPRESS_DB_PASSWORD: wp-pass
networks:
  wp-network:
[root@testserver wordpress]#

設定の解説です。

  • version
    「docker-compose.yml」のフォーマットバージョンを定義します。
    ComposeとDockerの互換性マトリックスもご参照ください。
  • services
    作成するコンテナを定義します。
    今回WordPressを構築するため、「wp-db」と「wp-webapp」の2つのコンテナを設定しました。
  • image
    コンテナの作成元となるDockerイメージとそのバージョンを指定します。
    ここで指定したイメージをDocker Hubからpullされます。
  • networks
    作成するコンテナ間を結ぶネットワークを定義します。
  • volumes
    コンテナ内のファイルを永続的に保管するボリュームを定義します。
    ボリューム定義の種類はいくつか存在しますが、今回はその中でbind mounts方式(Dockerホストのディレクトリをコンテナでマウント)にしました。
    MySQLのデータベースファイル(/var/lib/mysql)や、WordPressのコンテンツデータ(/var/www/html)をDockerホストから確認できるようになっています。
    「<Dockerホストのディレクトリ>:<コンテナのマウントポイント>」となっています。
  • restart
    何らかの障害でコンテナが停止した際の挙動を定義します。
    今回は「always」を指定したので、明示的に停止する以外でコンテナが停止した場合、自動で再起動されます。
  • environment
    環境変数を設定します。
    今回はMySQLデータベースのユーザ/パスワードなどを設定しました。
  • depends_on
    他のコンテナとの依存関係を定義します。
    ここで指定したコンテナが先に起動/停止する順序になります。
  • ports
    ポートマッピングを定義します。
    「<Dockerホストのポート番号>:<コンテナのポート番号>」となっています。

また、volumesで指定したディレクトリを作成しておきます。

[root@testserver wordpress]# mkdir -p ./wp-data
[root@testserver wordpress]# mkdir -p ./wp-htdocs

「docker-compose up」コマンドで作成・起動

作成した設定ファイル「docker-compose.yml」のディレクトリに移動し、「docker-compose up」コマンドでWordPress環境を作成・コンテナを起動します。

[root@testserver wordpress]# docker-compose up -d
Creating network "wordpress_wp-network" with the default driver
Pulling wp-db (mysql:8.0.26)...
Trying to pull repository docker.io/library/mysql ... 
8.0.26: Pulling from docker.io/library/mysql
33847f680f63: Pull complete
5cb67864e624: Pull complete
1a2b594783f5: Pull complete
b30e406dd925: Pull complete
48901e306e4c: Pull complete
603d2b7147fd: Pull complete
802aa684c1c4: Pull complete
715d3c143a06: Pull complete
6978e1b7a511: Pull complete
f0d78b0ac1be: Pull complete
35a94d251ed1: Pull complete
36f75719b1a9: Pull complete
Digest: sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd
Status: Downloaded newer image for mysql:8.0.26
Pulling wp-webapp (wordpress:5.8.0-php7.4-apache)...
Trying to pull repository docker.io/library/wordpress ... 
5.8.0-php7.4-apache: Pulling from docker.io/library/wordpress
33847f680f63: Already exists
ba03c99d34ed: Pull complete
5f637ed06e1a: Pull complete
ecfd84713df3: Pull complete
75835d9b84b3: Pull complete
8514983ec064: Pull complete
ec742b42e20a: Pull complete
87e4502f1c5f: Pull complete
9acd2f346ce4: Pull complete
e731089e158e: Pull complete
968b8c54362f: Pull complete
bb1e68da18ad: Pull complete
0075936788b5: Pull complete
c19ec64049d7: Pull complete
11f9c7b15750: Pull complete
141c3a66d84d: Pull complete
9cca4c551350: Pull complete
03eedc21602c: Pull complete
86f52f45a1a0: Pull complete
e0fceeb1625b: Pull complete
c4fc93c7c6ab: Pull complete
Digest: sha256:c252b341cd1f2daa876b2c90ba08dba9ea87a7cd85d439f1b10794d8e80b771c
Status: Downloaded newer image for wordpress:5.8.0-php7.4-apache
Creating wordpress_wp-db_1 ... done
Creating wordpress_wp-webapp_1 ... done
[root@testserver wordpress]#

作成・起動後の確認

作成・起動したWordPress環境の状態を確認してみます。

コンテナ

「wp-db」と「wp-webapp」が作成され、起動(State=Up)できています。

[root@testserver wordpress]# docker-compose ps -a
        Name                       Command               State          Ports        
-------------------------------------------------------------------------------------
wordpress_wp-db_1       docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp 
wordpress_wp-webapp_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp
[root@testserver wordpress]#

Network

「wp-network(★部)」が作成されています。

[root@testserver wordpress]# docker network ls
NETWORK ID          NAME                   DRIVER              SCOPE
7535d534366c        bridge                 bridge              local
2f5209f19850        host                   host                local
1d109924e0af        none                   null                local
d4b6fe6ec9e8        wordpress_wp-network   bridge              local ★
[root@testserver wordpress]#

Volume

今回はbind mounts方式でVolumeを作成したので、Dockerホストでlsコマンドを実行し確認します。
WordPressのhtmlファイルやphpファイル、MySQLのデータベースファイルが作成されています。

[root@testserver wordpress]# ls ./wp-htdocs/
index.php    wp-activate.php     wp-comments-post.php  wp-config-sample.php  wp-includes        wp-login.php     wp-signup.php
license.txt  wp-admin            wp-config-docker.php  wp-content            wp-links-opml.php  wp-mail.php      wp-trackback.php
readme.html  wp-blog-header.php  wp-config.php         wp-cron.php           wp-load.php        wp-settings.php  xmlrpc.php
[root@testserver wordpress]# 
[root@testserver wordpress]# ls ./wp-data/
auto.cnf       binlog.000004  client-cert.pem    ib_buffer_pool  ibtmp1        performance_schema  server-key.pem  wp@002ddata
binlog.000001  binlog.index   client-key.pem     ibdata1         #innodb_temp  private_key.pem     sys
binlog.000002  ca-key.pem     #ib_16384_0.dblwr  ib_logfile0     mysql         public_key.pem      undo_001
binlog.000003  ca.pem         #ib_16384_1.dblwr  ib_logfile1     mysql.ibd     server-cert.pem     undo_002
[root@testserver wordpress]#

WordPressページにWEBアクセス

設定ファイル「docker-compose.yml」の中で、「wp-webapp」のポート番号を8080に設定しました。
そのため、「http://<ホストのIPアドレス>:8080/」にWEBアクセスします。

無事にアクセスできました!!

「docker-compose stop」コマンドで停止

「docker-compose stop」コマンドでコンテナを停止します。

[root@testserver wordpress]# docker-compose ps -a
        Name                       Command               State          Ports        
-------------------------------------------------------------------------------------
wordpress_wp-db_1       docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp 
wordpress_wp-webapp_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp
[root@testserver wordpress]# 
[root@testserver wordpress]# docker-compose stop
Stopping wordpress_wp-webapp_1 ... done
Stopping wordpress_wp-db_1     ... done
[root@testserver wordpress]# docker-compose ps -a
        Name                       Command               State    Ports
-----------------------------------------------------------------------
wordpress_wp-db_1       docker-entrypoint.sh mysqld      Exit 0        
wordpress_wp-webapp_1   docker-entrypoint.sh apach ...   Exit 0        
[root@testserver wordpress]#

【注意】「docker-compose」コマンドの「down」と「stop」の違い
「down」を実行した場合、コンテナ停止と同時に「docker-compose」コマンドで作成した環境全体(コンテナ、ネットワーク、ボリュームなど)が削除されます。再び起動する予定があるのであれば、停止時は「stop」を使いましょう。(「up」ではなく「start」でも起動できます。)

ちなみに「down」を実行すると以下のようになります。

[root@testserver wordpress]# docker-compose ps -a
        Name                       Command               State          Ports        
-------------------------------------------------------------------------------------
wordpress_wp-db_1       docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp 
wordpress_wp-webapp_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp
[root@testserver wordpress]# 
[root@testserver wordpress]# docker-compose down
Stopping wordpress_wp-webapp_1 ... done
Stopping wordpress_wp-db_1     ... done
Removing wordpress_wp-webapp_1 ... done
Removing wordpress_wp-db_1     ... done
Removing network wordpress_wp-network
[root@testserver wordpress]# 
[root@testserver wordpress]# docker-compose ps -a
Name   Command   State   Ports
------------------------------
[root@testserver wordpress]#

「Stopping・・・」と後に「Removing・・・」と表示されており、削除されているのが分かります。

今回のまとめ

  • Docker Composeにより、環境構成情報を設定ファイルに定義できる。
  • 起動オプションがシンプルになる。
  • 停止時は「stop」オプションを利用すること。
タイトルとURLをコピーしました