メールテスト可能な最強のWordPress開発環境をDockerで構築する

メールテスト可能な最強のWordPress開発環境をDockerで構築する

はじめに

Dockerのことを知っておかないと恥ずかしい世の中になってきたので、学習がてらWordPressの開発環境を構築してみました。

さまざまなサイトを参考にさせていただき良いとこ取りをして、過去の経験を元にWordPressの開発に最低限必要なものを網羅しました。

また、DockerはVagrantで動かしています(Docker環境をVagrantで構築する)。

前提

  • docker-composeを利用
  • Dockerイメージは公式を利用
  • ローカルメールテストができる(MailHogを利用できる)

ファイル構成

wp/
├─ docker-compose.yml
├─ Dockerfile
├─ .env
├─ php/
│   └─ php.ini
└─ db-data/

docker-compose.yml

docker-compose.ymlの記述は以下のとおり。

version: "3"
services:

  # WordPress
  wordpress:
    build: $PWD
    restart: always
    container_name: my-container-name
    volumes:
      - $PWD/themes:/var/www/html/wp-content/themes
      - $PWD/php/php.ini:/usr/local/etc/php/php.ini
    ports:
      - "8080:80"
    depends_on:
      - db
    environment:
      WORDPRESS_DB_HOST: "db:3306"
    networks:
      - my_wordpress_network
    env_file: .env

  # MySQL
  db:
    image: mysql:5.7
    restart: always
    container_name: my-container-name-db
    volumes:
      - db-data:/var/lib/mysql
      # Import SQL Data
      #- $PWD/db-data/mysql.dump.sql:/docker-entrypoint-initdb.d/install_wordpress.sql
    networks:
      - my_wordpress_network
    env_file: .env

  # MailHog
  mailhog:
    image: mailhog/mailhog
    restart: always
    container_name: my-container-name-mailhog
    ports:
      - "8025:8025"
      - "1025:1025"
    networks:
      - my_wordpress_network

volumes:
  db-data:

networks:
  my_wordpress_network:

Dockerfile

Dockerfileの記述は以下のとおり。

FROM wordpress:latest

# 必要なツールをインストール
RUN apt-get update
RUN apt-get -y install unzip

# WP プラグイン (zip) ダウンロード
WORKDIR /tmp/wp-plugins
RUN curl -O https://downloads.wordpress.org/plugin/wp-multibyte-patch.2.8.1.zip

# Zip ファイルを解凍してインストール
RUN unzip './*.zip' -d /usr/src/wordpress/wp-content/plugins

# 不要になった一時ファイルを削除
RUN apt-get clean
RUN rm -rf /tmp/*

# サーバが読めるように wp-content 以下の所有者を変更
RUN chown -R www-data:www-data /usr/src/wordpress/wp-content

# MailHog でメールを受信できるように設定
RUN curl --location --output /usr/local/bin/mhsendmail https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64
RUN chmod +x /usr/local/bin/mhsendmail
RUN echo 'sendmail_path="/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025 --from=no-reply@docker.dev"' > /usr/local/etc/php/conf.d/mailhog.ini

WORKDIR /var/www/html

.env

.envの記述は以下のとおり。

WORDPRESS_DB_NAME=wordpress
WORDPRESS_DB_USER=admin
WORDPRESS_DB_PASSWORD=pass

MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=wordpress
MYSQL_USER=admin
MYSQL_PASSWORD=pass

php.ini

php.iniの記述は以下のとおり。

[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

Dockerコンテナの操作

コンテナを操作するコマンドのメモです。

# Docker コンテナのシェルの中に入る
docker exec -it {コンテナ名} bash
# docker exec -it my-container-name bash

# mysqldump でバックアップをする
docker exec -it {dbコンテナ名} sh -c 'mysqldump {データベース名} -u {データベースユーザ名} -p{データベースパスワード} 2> /dev/null' > $PWD/db-data/mysql.dump.sql
# docker exec -it my-container-name-db sh -c 'mysqldump wordpress -u admin -ppass 2> /dev/null' > $PWD/db-data/mysql.dump.sql

GitHubで公開

上記までの一式をGitHubで公開しています。
Beacats/coreos-vagrant-docker-wordpress

参考サイト

開発環境カテゴリの最新記事