W

WordPress用のDocker環境を柔軟にバージョン変更できる構成

公開: 2025年07月15日 19時22分
更新: 2025年07月20日 10時38分

WordPress、PHP、MySqlのバージョンを柔軟に変更できるDocker環境です。

ディレクトリ構成

/
├── .env # 環境変数ファイル
├── cmd.md # コンテナ操作コマンド例
├── docker-compose.yml # Docker Compose設定
├── plugins/ # WordPressプラグインマウントディレクトリ
├── themes/ # WordPressテーママウントディレクトリ
└── wordpress/ # wordpressコンテナ構築用ファイル群
    ├── Dockerfile-5.6 # PHP 5.6環境
    ├── Dockerfile-7.4 # PHP 7.4環境
    ├── Dockerfile-8.3 # PHP 8.3環境
    ├── docker-entrypoint.sh # コンテナ起動直後のスクリプト
    └── php.ini # PHP設定ファイル

.env

環境変数は使わなくてもよいですが、便利です

DB_NAME=wordpress
DB_USER=wordpress_user
DB_PASSWORD=wordpress_password
DB_ROOT_PASSWORD=root_password

※他にも使いたい環境変数があれば追加してください

cmd.md

無くてもよいですが、Docker環境ではコマンド使うこと多いのでおすすめです

## ホストからコンテナに入る
```bash
docker exec -it wordpress-wordpress-1 bash
```

## ホストからコンテナと関連イメージとボリューム全削除
```bash
docker-compose down --rmi all --volumes --remove-orphans
```

docker-compose.yml

services:
  wordpress:
    build:
      context: ./wordpress
      dockerfile: Dockerfile-8.3 # PHP Version 8.3
      # dockerfile: Dockerfile-7.4 # PHP Version 7.4
      # dockerfile: Dockerfile-5.6 # PHP Version 5.6
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: ${DB_USER} # .env より取得
      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD} # .env より取得
      WORDPRESS_DB_NAME: ${DB_NAME} # .env より取得
    volumes:
      - ./themes:/var/www/blog.ryukyuhub.co.jp/wp-content/themes # テーマファイル群をホストとコンテナ間でマウント
      - ./plugins:/var/www/blog.ryukyuhub.co.jp/wp-content/plugins # プラグインファイル群をホストとコンテナ間でマウント
      - wordpress_data:/var/www/html # 'themes'と'plugins'以外はホストの'Docker Volume'に保存するので、ディレクトリではない
    depends_on:
      - mysql # mysqlコンテナが起動してからwordpressコンテナを起動する

  mysql:
    image: mysql:8.0
    # image: mysql:5.5.62
    environment:
      MYSQL_DATABASE: ${DB_NAME} # .env より取得
      MYSQL_USER: ${DB_USER} # .env より取得
      MYSQL_PASSWORD: ${DB_PASSWORD} # .env より取得
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} # .env より取得
    volumes:
      - mysql_data:/var/lib/mysql # データベースはホストの'Docker Volume'に保存するので、ディレクトリではない
    ports:
      - "3308:3306"

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - "8081:80"
    environment:
      PMA_HOST: mysql # mysqlコンテナ名
      PMA_PORT: 3306
      PMA_USER: ${DB_USER} # .env より取得
      PMA_PASSWORD: ${DB_PASSWORD} # .env より取得
    depends_on:
      - mysql # mysqlコンテナが起動してからphpmyadminコンテナを起動する

volumes:
  wordpress_data:
  mysql_data:

plugins

  • 最初は空でよく、Wordpressにプラグインをインストールするとここにファイルが入ってくる
  • プラグインをバージョン管理する必要がなければ不要

themes

  • 最初は空でよく、Wordpressをインストールすると初期テーマのディレクトリが入ってくる

wordpress/Dockerfile-5.6

FROM php:5.6-apache

# Fix Debian Stretch repositories (archived) and disable GPG verification
RUN echo "deb [trusted=yes] http://archive.debian.org/debian stretch main" > /etc/apt/sources.list \
    && echo "deb [trusted=yes] http://archive.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list

# Install dependencies for PHP 5.6
RUN apt-get update && apt-get install -y \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libmcrypt-dev \
    curl \
    wget \
    unzip \
    zip \
    vim \
    && rm -rf /var/lib/apt/lists/*

# Configure and install PHP extensions for PHP 5.6
RUN docker-php-ext-install -j$(nproc) \
        mysqli \
        pdo_mysql \
        mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

# Enable Apache rewrite module
RUN a2enmod rewrite

# Copy configuration files (commented out as files don't exist)
COPY .bashrc /root/.bashrc
COPY .vimrc /root/.vimrc

# Copy custom PHP configuration
COPY php.ini /usr/local/etc/php/php.ini

WORKDIR /var/www/html

# Copy and set up startup script to fix permissions on mounted volumes
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/docker-entrypoint.sh

CMD ["/usr/local/bin/docker-entrypoint.sh"]

wordpress/Dockerfile-7.4

FROM php:7.4-apache

# Install dependencies for PHP 7.4
RUN apt-get update && apt-get install -y \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libzip-dev \
    git \
    curl \
    wget \
    unzip \
    zip \
    vim \
    && rm -rf /var/lib/apt/lists/*

# Configure and install PHP extensions for PHP 7.4
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) \
        gd \
        mysqli \
        pdo_mysql \
        zip

# Enable Apache rewrite module
RUN a2enmod rewrite

# Copy configuration files
COPY .bashrc /root/.bashrc
COPY .vimrc /root/.vimrc

# Copy custom PHP configuration
COPY php.ini /usr/local/etc/php/php.ini

WORKDIR /var/www/html

# Copy and set up startup script to fix permissions on mounted volumes
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/docker-entrypoint.sh

CMD ["/usr/local/bin/docker-entrypoint.sh"]

wordpress/Dockerfile-8.3

FROM php:8.3-apache

# Install dependencies for PHP 8.3
RUN apt-get update && apt-get install -y \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libzip-dev \
    libwebp-dev \
    libavif-dev \
    git \
    curl \
    wget \
    unzip \
    zip \
    vim \
    && rm -rf /var/lib/apt/lists/*

# Configure and install PHP extensions for PHP 8.3
RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp --with-avif \
    && docker-php-ext-install -j$(nproc) \
        gd \
        mysqli \
        pdo_mysql \
        zip \
        opcache

# Enable Apache rewrite module
RUN a2enmod rewrite

# Copy configuration files
COPY .bashrc /root/.bashrc
COPY .vimrc /root/.vimrc

# Copy custom PHP configuration
COPY php.ini /usr/local/etc/php/php.ini

WORKDIR /var/www/html

# Copy and set up startup script to fix permissions on mounted volumes
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN chmod +x /usr/local/bin/docker-entrypoint.sh

CMD ["/usr/local/bin/docker-entrypoint.sh"]

docker-entrypoint.sh

#!/bin/bash

# WordPressがインストールされていない場合はインストールする
# '/var/www/html'に'wp-config-sample.php'が無いことを条件にする
if [ ! -f /var/www/html/wp-config-sample.php ]; then
    echo "Wordpressがインストールされていないので、インストールします..."

    # curlでダウンロードするファイルを変更することでWordpressのバージョンを変更できる
    curl -o wordpress.tar.gz -fSL "https://wordpress.org/wordpress-6.8.1.tar.gz"
    # curl -o wordpress.tar.gz -fSL "https://wordpress.org/wordpress-4.4.33.tar.gz"

    tar -xzf wordpress.tar.gz --strip-components=1
    rm wordpress.tar.gz

    chown -R www-data:www-data /var/www/html

    chmod -R 755 /var/www/html

    echo "Wordpressのインストールが完了しました。"
fi

# ファイルの所有者をwww-dataに変更する
chown -R www-data:www-data /var/www/html

# ファイルのパーミッションを755に変更する
chmod -R 755 /var/www/html

# Apacheを起動する
exec apache2-foreground

php.ini

; Custom PHP configuration for WordPress
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
max_input_time = 300

; Error reporting
display_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/apache2/php_errors.log

; Date timezone
date.timezone = Asia/Tokyo

; Session
session.save_path = "/tmp"
公開: 2025年07月15日 19時22分
更新: 2025年07月20日 10時38分

1件のコメント

  1. あああああ
    いいいいいい

candy への返信

キャンセル

メールアドレスが公開されることはありません。