前回はUbuntuサーバにDockerを導入し、コンテナイメージの取得からコンテナの起動、コンテナの停止・削除を行いました。今回はコンテナでWordPressの環境を構築する方法について解説します。
目次
実施環境・構成
■Dockerホスト
OS | Ubuntu Server 20.10 |
---|---|
Docker | 20.10.3 |
Docker Compose | 1.28.2 |
■Webサーバ
Nginx | 1.18 |
---|---|
PHP | 8.0 |
WordPress | 5.6.1 |
■DBサーバ
MySQL | 8.0.23 |
---|
今回はWebサーバをDockerfileから作成し、DBサーバはMySQL公式のイメージを使用します。
前提条件
今回はUbuntuサーバ上でDockerのインストールが完了している想定で進めます。Dockerのインストールが終わっていない方は下記の記事にてインストールをお願いします。
・UbuntuサーバにDockerを導入し、コンテナの起動から停止・削除までを行う方法
Docker Composeのインストール
初めにDocker Composeをインストールします。今回はcurlコマンドを使用した方法でインストールを行います。
・Docker Compsoeをインストールし、実行権限を付与する
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.28.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
Docker Composeのインストール後、バージョン確認を行いバージョンが表示されることを確認します。
・Docker Compsoeのバージョンを確認する
$ docker-compose --version
docker-compose version 1.28.2, build 67630359
各種設定ファイル、WordPressの準備
Docker Composeのインストール完了後、今回作成するWordPressの準備およびNginxの設定ファイル、サービスを複数起動するsupervisorの設定ファイルを作成します。今回のフォルダ構成は以下の通りとなります。
hoge ─┬─ Dockerfile
├─ docker-compose.yml
└─ cp_file ─┬─ server.conf
├─ supervisord.conf
└─ wordpress ─┬─ wp-config.php
└─ --- 省略 ---
各ファイルの概要は以下の通りです。
server.conf | Nginxのサーバの設定ファイル |
---|---|
supervisord.conf | supervisorの設定ファイル |
wordpress | WordPress本体、今回はwp-config.phpを事前に設定しておく |
初めに、Nginxのサーバの設定を行うserver.confを作成します。
・作業用フォルダを作成し、server.confを作成する
$ mkdir cp_file
$ vi cp_file/server.conf
■server.conf
------------------------------------------------------------
server {
listen 80;
root /var/www/html/wordpress;
index index.php;
server_name localhost;
location / {
try_files $uri $uri/ /index.php?$args =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
}
}
------------------------------------------------------------
server.conf作成後、supervisord.confを作成します。
・supervisord.confを作成する
$ vi cp_file/supervisord.conf
■supervisord.conf
------------------------------------------------------------
[supervisord]
nodaemon=true
[program:nginx]
command=/bin/bash -c "nginx"
[program:php8.0-fpm]
command=/bin/bash -c "service php8.0-fpm start"
------------------------------------------------------------
supervisord.conf作成後、WordPressをダウンロードしwp-config.phpに今回使用するデータベースの設定をします。
・WordPressをダウンロードしwp-config.phpを設定する
$ cd cp_file
$ wget https://wordpress.org/latest.tar.gz
$ tar zxf latest.tar.gz
$ rm -rf latest.tar.gz
$ cp wordpress/wp-config-sample.php wordpress/wp-config.php
$ vi wordpress/wp-config.php
■wp-config.php
------------------------------------------------------------
<省略>
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'wordpress' );
/** MySQL database password */
define( 'DB_PASSWORD', 'PasSw@rD' );
/** MySQL hostname */
define( 'DB_HOST', 'db' );
<省略>
------------------------------------------------------------
コンテナ間通信用のネットワーク作成
設定ファイルの準備後、WebサーバとDBサーバ間で通信可能にするためネットワークを作成します。ネットワークの作成は「docker network create」コマンドを使用します。
・コンテナ間通信用のネットワークを作成する
$ docker network create wp-network
「docker network ls」コマンドでネットワークが作成されたことを確認します。
・ネットワークを確認する
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
<省略>
73d56a4cf18c wp-network bridge local
Webサーバのイメージ作成、DBサーバのイメージ取得
ネットワークの作成後、Webサーバのイメージを作成します。WebサーバのイメージはUbuntu公式が提供している「ubuntu/nginx」イメージをベースにDockerfileから作成します。
・cp_fileから1つ上の階層に戻りWebサーバのDockerfileを作成する
$ cd ..
$ vi Dockerfile
■Dockerfile
------------------------------------------------------------
FROM ubuntu/nginx
# デフォルトのシェルをbashにする
SHELL ["/bin/bash", "-c"]
# Nginxのデフォルトの設定ファイルを削除し、server.confをコピーする
RUN rm -rf /etc/nginx/sites-available/default
RUN rm -rf /etc/nginx/sites-enabled/default
COPY cp_file/server.conf /etc/nginx/sites-available/
RUN ln -s /etc/nginx/sites-available/server.conf server.conf
RUN mv server.conf /etc/nginx/sites-enabled/
# PHP8.0とsupervisorをインストールする
RUN apt update -y
RUN apt -y install software-properties-common
RUN add-apt-repository -y ppa:ondrej/php
RUN apt update -y
RUN apt -y install php8.0-fpm php8.0-mysql supervisor
COPY cp_file/supervisord.conf /etc/supervisor/conf.d/
# WordPressをコピーし、フォルダの所有者を変更する
COPY cp_file/wordpress /var/www/html/wordpress
RUN chown -R www-data.www-data /var/www/html/wordpress
# Webサーバのポート(80番)を設定する
EXPOSE 80
STOPSIGNAL SIGTERM
# supervisordを起動する
CMD ["/usr/bin/supervisord"]
------------------------------------------------------------
Dockerfile作成後、「docker build」コマンドを使用し、Webサーバのイメージを作成します。
・Webサーバのイメージを作成する
$ docker build -t wp-web .
Webサーバのイメージ作成後、「docker pull」コマンドを使用しDBサーバのイメージを取得します。今回はMySQL 8.0.23のイメージを取得します。
・MySQL 8.0.23のイメージを取得する
$ docker pull mysql:8.0.23
コンテナイメージを確認し、WebサーバのイメージとMySQLのイメージがあることを確認します。
・WebサーバとDBサーバのコンテナイメージを確認する
$ docker image ls
wp-web latest 006f648a8f79 6 minutes ago 398MB
mysql 8.0.23 2933adc350f3 13 days ago 546MB
ubuntu/nginx latest 3554108decf2 2 months ago 143MB
docker-compose.ymlの作成
コンテナイメージの作成後、docker-compose.ymlファイルを作成します。コンテナ削除後もWordPressのデータを保持するために、WebサーバとDBサーバに永続化ボリュームの設定も行います。
・docker-compose.ymlを作成する
$ vi docker-compose.yml
■docker-compose.yml
------------------------------------------------------------
version: "3"
services:
db:
image: mysql:8.0.23
networks:
- wp-network
volumes:
- db_vol:/var/lib/mysql
restart: always
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: SO7fO4hHw
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: PasSw@rD
web:
depends_on:
- db
image: wp-web
networks:
- wp-network
volumes:
- web_vol:/var/www/html/wordpress
ports:
- 8080:80
restart: always
networks:
wp-network:
external: true
volumes:
db_vol:
web_vol:
------------------------------------------------------------
コンテナの起動・動作確認
docker-compose.ymlの作成後、コンテナを起動します。
・docker-compose.ymlの設定からコンテナを起動する
$ docker-compose up -d
コンテナ起動後、WebサーバのコンテナとDBサーバのコンテナが起動されたことを確認します。
・コンテナを確認する
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
47763484d68c wp-web "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:8080->80/tcp hogehoge_web_1
332bec14df27 mysql:8.0.23 "docker-entrypoint.s…" 5 seconds ago Up 3 seconds 3306/tcp, 33060/tcp hogehoge_db_1
コンテナ起動後「http://<サーバのIPアドレス>:8080/」にアクセスし、WordPressの初回設定画面が表示されることを確認します。

コンテナの停止・削除
docker-composeコマンドで起動したコンテナを停止・削除するには、「docker-compose down」コマンドを使用します。
・docker-composeで起動したコンテナを停止・削除する
$ docker-compose down