Docker

Windows11にDocker-composeでWordPress環境を構築する

Windows11にdocker-composeを使ってWordPress環境を構築していきます。

前提条件として「Docker Desktop for Windows」をインストールをしている必要があるので、事前に入れておいてください。

手順は下記の記事を参照ください。

Version

  • OS:Windows11
  • docker:version 20.10.17
  • docker-compose:version v2.10.2

フォルダ構成

まず、環境を構築するためのフォルダを作成してください。

自分の場合は「D:\app\docker\wordpress-dev」を作成しました。ここをルートディレクトリとします。
ディレクトリ構成は以下の通りです。

 ディレクトリ
ルートディレクトリ(D:\app\docker\wordpress-dev)
├─ web
│ ├─ wordpress
│ │ └─ [WordPressのファイル群]
│ ├─ Dockerfile
│ ├─ vhttpd.conf
│ ├─ php.ini
└─ docker-compose.yml

docker-compose

必要な設定ファイルの準備をしていきます。

docker-compose.yml

docker-compose.ymlを作成します。

サービスは「web」と「mysql」、「phpmyadmin」の3つ。「web」でCeontOS7とApacheを入れて、データベースとして「mysql」を、データベースをブラウザで操作するため「phpmyadmin」を入れています。

version: "3"
services:
  web:
    container_name: wordpres_dev
    build: ./web
    ports:
      - 80:80
    volumes:
      - ./web/wordpress/:/var/wordpress/
      - ./web/vhttpd.conf:/etc/httpd/conf.d/vhttpd.conf
  mysql:
    image: mysql:5.7
    volumes:
      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf
      - db_data:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=wordpress_db
      - MYSQL_USER=wordpress_USER
      - MYSQL_PASSWORD=wordpress_PASS
    command: --innodb-use-native-aio=0
  phpmyadmin:
    depends_on:
      - mysql
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_HOST: mysql
    restart: always
    ports:
      - "8080:80"
volumes:
    db_data: {}

注意点として、mysqlのvolumesの設定でローカルのフォルダをマウントすることが難しいらしいので、外だししてDockerのボリューム(db_data)とコンテナの/var/lib/mysqlを紐づけるようにします。

Dockerfile

Dockerfileファイルを作成します。内容は以下の通りです。

# CentOS-7, Apache 2.6, PHP 7.3
FROM centos:centos7
RUN yum -y update && \
    yum -y install \
        epel-release \
        httpd \
        libfreetype6-dev libjpeg62-turbo-dev libpng12-dev libmcrypt-dev \
        git \
        vim \
        less \
        unzip

# PHP 7.3
RUN yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && \
    yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm && \
    yum -y install yum-utils && \
    yum-config-manager --enable remi-php74 && \
    yum -y install \
        php74-php \
        php74-php-common \
        php74-php-devel \
        php74-php-mysqlnd \
        php74-php-mbstring \
        php74-php-soap \
        php74-php-gd \
        php74-php-iconv \
        php74-php-mcrypt \
        php74-php-ldap \
        php74-php-pear \
        php74-php-pdo \
        php74-php-intl \
        php74-php-xml \
        php74-php-oci8 \
        php74-php-xdebug \
        php74-php-pear \
        libaio && \
    sed -i 's/;error_log = syslog/error_log = \/dev\/stderr/' /etc/opt/remi/php74/php.ini && \
    ln -sf /dev/stdout /var/log/httpd/access_log && \
    ln -sf /dev/stderr /var/log/httpd/error_log && \
    ln -sf /usr/bin/php74-pear /usr/bin/pear && \
    ln -sf /opt/remi/php74/root/usr/share/php /usr/share/php && \
    chmod -R g+w /opt/remi/php74/root/usr/share/php && \
    ln -sf /var/opt/remi/php74/lib/php /var/lib/php && \
    chmod -R g+w /var/www/html && \
    yum clean all && \
    rm -rf /var/cache/yum && \
    rm -f /etc/httpd/conf.d/{userdir.conf,welcome.conf} && \
    sed -i 's/Listen 80/Listen 80/' /etc/httpd/conf/httpd.conf

COPY ./php.ini /etc/opt/remi/php74/php.d/overrides.ini

# Set composer
RUN curl -sS https://getcomposer.org/installer | /opt/remi/php74/root/usr/bin/php -- --install-dir=/usr/local/bin --filename=composer
RUN ln -s /usr/bin/php74 /usr/bin/php

# Set ports
EXPOSE 80
ENV HOME /var/www/html

COPY ./vhttpd.conf /etc/httpd/conf.d/vhttpd.conf
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
RUN mkdir -p /var/wordpress/

WORKDIR /var/wordpress/

VirtualHostの設定

VirtualHostの設定として、vhttpd.confを作成していきます。

<VirtualHost *:80>
    Serveradmin webmaster@localhost
    ServerName wordpress_dev.com
    ServerAlias www.wordpress_dev.com

    DocumentRoot /var/wordpress/

    <Directory /var/wordpress/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    LogLevel warn
    ErrorLog logs/web_error.log
    CustomLog logs/web_access.log combined env=!nolog

</VirtualHost>

hostsの編集

hostsファイルにドメイン名を追加します。

hostsファイルの場所は「C:\Windows\System32\drivers\etc」。(hostsの場所)

以下の通りにIPアドレスが「127.0.0.1」でドメイン名が「wordpress_dev.com」を追記します。

# localhost name resolution is handled within DNS itself.
#	::1             localhost
127.0.0.1       localhost
127.0.0.1       wordpress_dev.com  # ←追記

ローカル環境セットアップ

Dockerのビルド

パワーシェルで以下のコマンドを実行。

PS D:\app\docker\wordpress_dev> 
PS D:\app\docker\wordpress_dev> cd D:\app\docker\wordpress_dev\ 
PS D:\app\docker\wordpress_dev> docker-compose build 
[+] Building 11.1s (13/20) 
 => [internal] load build definition from Dockerfile               1.5s 
 => => transferring dockerfile: 5.55kB                             0.1s 
 => [internal] load .dockerignore                                  1.8s 
 => => transferring context: 2B                                    0.0s 
 => [internal] load metadata for docker.io/library/centos:centos7  2.8s 
 => [ 1/16] FROM docker.io/library/centos:centos7@sha256:c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407      0.0s 
 => [internal] load build context                  0.9s 
 => => transferring context: 7.76kB                0.1s 
 => CACHED [ 2/16] RUN yum -y update &&     yum -y install         epel-release         httpd         libfreetype6-dev libjpeg62-turbo-dev libpng12-dev lib     0.0s 
 => CACHED [ 3/16] RUN yum -y install nodejs npm   0.0s 
 => CACHED [ 4/16] RUN npm install -g n            0.0s 
 => CACHED [ 5/16] RUN yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm &&     yum -y install https://rpms.remirepo.ne  0.0s
 => CACHED [ 6/16] COPY ./php.ini /etc/opt/remi/php74/php.d/overrides.ini    0.0s 
 => CACHED [ 7/16] RUN curl -sS https://getcomposer.org/installer | /opt/remi/php74/root/usr/bin/php -- --install-dir=/usr/local/bin --filename=composer     0.0s 
 => CACHED [ 8/16] RUN ln -s /usr/bin/php74 /usr/bin/php     0.0s 
 => [ 9/16] RUN mkdir -p /etc/httpd/ssl                      3.3s 
 => [10/16] RUN a2enmod ssl

Docker コンテナの起動

以下のコマンドを実行してください。

PS D:\app\docker\wordpress_dev> docker-compose up -d 
[+] Running 4/4 
 - Network wordpress_dev_default         Created     0.3s 
 - Container wordpress_dev-mysql-1       Started     8.3s 
 - Container wordpres_dev                Started     7.6s 
 - Container wordpress_dev-phpmyadmin-1  Started     7.2s 
PS D:\app\docker\wordpress_dev>

起動が上手くいったらDockerDesktopが以下の通りになっています。

・コンテナ

OKパターン

NGパターン

コンテナの作成が失敗していた場合は上図のようにアイコンが橙色になっていますね。

Runningも「2/3」なっており詳細を見てみるとwordpress_devのコンテナ作成に失敗しているのが分かります。

・イメージ

データベースの構築

「http://wordpress_dev.com:8080/」にアクセスします。

上図のような画面が出るのでユーザ名とパスワードをrootでログインします。

docker-compose.ymlでは下図のようにデータベースとアカウントを作成するように記述していることで、Dockerのビルド時に作成されているはずです。

    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=wordpress_db
      - MYSQL_USER=wordpress_USER
      - MYSQL_PASSWORD=wordpress_PASS

上記を記載していない場合は、別途データベースとアカウントを作成しておく必要がるのでご注意ください。
補足としてデータベースの作成とアカウント作成のクエリを下記に載せておきます。

$ mysql -uroot -p
-- データベース作成
--  CREATE DATABASE [データベース名]; 
mysql> CREATE DATABASE wordpress_db;
-- データベース一覧
mysql> select SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME from INFORMATION_SCHEMA.SCHEMATA; 

-- アカウント作成例
-- create user '[ユーザ名]'@'localhost' identified by '[パスワード]';	 
mysql> create user 'wordpress_USER'@'localhost' identified by 'wordpress_PASS';
-- ユーザに全権限を付与する 
-- grant all on `[データベース名]`.* to '[ユーザ名]''@'localhost'; 
mysql> grant all on `wordpress_db`.* to 'wordpress_USER'@'localhost';

phpmyadminでアカウントを作成する場合は、「トップページ > ユーザアカウント > ユーザアカウントを追加する」リンクをクリックしてください。

上図の必須項目を入力してください。

続いてアカウント権限周りの設定です。

「データ」、「構造」、「管理」にチェックを入れて、「実行」ボタンをクリックしてください。

WordPressの初回セットアップ

「http://wordpress_dev.com」をブラウザに入力。すると以下の画面が出ると思います。

「さあ、始めましょう!」のボタンをクリック。

まずは、データベースの情報を入力していきます。

データベース名は上記の手順で作成したデータベースの情報を記載してください。

データベース名やテーブルの接頭辞はなるべく推測されにくいものにするとセキュリティ対策になります。

そのままwordpressやwp_を使うと推測されて不正なアクセスや攻撃をされるきっかけになりかねないので、なるべく避けてください。

  • データベース名: wordpress_db
  • ユーザ名: wordpress_USER
  • パスワード: wordpress_PASS
  • データベースのホスト: localhost
  • テーブルの接頭辞: wpdev_

入力できたら「送信」ボタンをクリックしてください。

「インストール実行」をクリックしてください。

今度はサイトの基本情報を入力していきます。

  • サイトのタイトル:サイトのタイトル
  • ユーザ名: WordPressの管理画面のユーザ名
  • パスワード:WordPressの管理画面のパスワード
    (ここで入力した内容で以後ログインする)
  • メールアドレス:メールアドレス
    (今回はテスト環境なので適当でOK)
  • 検索エンジンの表示:チェックを外す
    (チェックを入れるとサイトがGoogleなどの検索エンジンにインデックスされなくなります。テスト環境なのでチェックは無し)

「WordPressをインストール」をクリックします。

これで必要な情報が作成され、初回セットアップは完了です。

-Docker