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"
あああああ
いいいいいい