WordPress開発環境で使用する Docker 仮想ドライブ (WSL2)のサイズをできるだけ小さくしたいため、以下の構成で構築する。
– Docker ホストOS として Alpine を使用する。
– Docker イメージは、Alpine 上で稼働するものを使用する。
– 外部ボリュームは使用せず、全て仮想ドライブ内にデータを保持する。
– Webサーバは、nginxを使用する。
– WordPressは、Ver.5.9 + PHP 7.4 で稼働するものを使用する。(本サイトの環境と同一にするため)
– DBは、MariaDB を使用する。(本サイトの環境と同一にするため)
使用する Docker イメージ
WordPress
wordpress:6-php7.4-fpm-alpine
wordpress - Official Image | Docker Hub
The WordPress rich content management system can utilize plugins, widgets, and themes.
以下、サイト記載の docker-compose.yml サンプル。
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
また、fpm イメージを使用して nginx に接続する場合には、以下に記載されている内容を、 /etc/nginx/conf.d/default.conf にコピーしてやる必要があるようだ。
https://gist.github.com/md5/d9206eacb5a0ff5d6be0
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass fpm:9000;
fastcgi_index index.php;
}
}
Nginx
nginx:stable-alpine
nginx - Official Image | Docker Hub
Official build of Nginx.
以下、サイト記載の docker-compose.yml サンプル。
web:
image: nginx
volumes:
- ./templates:/etc/nginx/templates
ports:
- "8080:80"
environment:
- NGINX_HOST=foobar.com
- NGINX_PORT=80
MariaDB
yobasystems/alpine-mariadb
https://hub.docker.com/r/yobasystems/alpine-mariadb/
以下、サイト記載の docker-compose.yml サンプル。
mysql:
image: yobasystems/alpine-mariadb
environment:
MYSQL_ROOT_PASSWORD: hguyFtgfR4r9R4r76
MYSQL_DATABASE: wordpressdb
MYSQL_USER: wordpressuser
MYSQL_PASSWORD: hguyFt6S95dgfR4ryb
expose:
- "3306"
volumes:
- /data/example/mysql:/var/lib/mysql
restart: always
docker compose による 環境構築
以下の2ファイルを同一フォルダに用意する。
– docker-compose.yml
– nginx.conf
その後、以下のコマンドを打てば、http://localhost で動作を確認することができる。
# docker compose up -d
docker-compose.yml
version: '3.9'
services:
web:
image: nginx:stable-alpine
depends_on:
- wp
ports:
- "80:80"
restart: always
volumes:
- ./html:/var/www/html
- ./nginx.conf:/etc/nginx/nginx.conf
wp:
image: wordpress:5.9-php7.4-fpm-alpine
depends_on:
- db
restart: always
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=wordpressuser
- WORDPRESS_DB_PASSWORD=wordpresspassword
- WORDPRESS_DB_NAME=wordpressdb
volumes:
- ./html:/var/www/html
db:
image: yobasystems/alpine-mariadb
expose:
- "3306:3306"
restart: always
environment:
- MYSQL_DATABASE=wordpressdb
- MYSQL_USER=wordpressuser
- MYSQL_PASSWORD=wordpresspassword
- MYSQL_ROOT_PASSWORD=root
volumes:
- ./mysql:/var/lib/mysql
nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
root /var/www/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass wp:9000;
fastcgi_index index.php;
}
}
}