構成について
- wordpressコンテナは、Node.jsを入れられるようにdockerfileからimageをインストールするようにした。
- DBの接続情報は、.envファイルに記述して外部ファイル化させた。
- プラグインとテーマファイルはホスト側からもいじれるように、wp-contentディレクトリをbindマウントさせた。
- DBをホスト側からいじりたい場面もないと思うのでvolumeマウントさせた。
- MySQLはバージョン5.7じゃないとうまく動かないらしいので、バージョン指定。
- その他のイメージファイルやNode.jsのバージョンも本当は固定した方がいいんでしょうけど、今回はしない。
以下の構成で組んだ。
myapp/
├ docker/
| └ wordpress/
| └ dockerfile
├ wordpress/
| └ wp-content/ # 自動生成
├ .env
└ docker-compose.yml
構成ファイルの中身
docker-compose.yml
version: '3.8'
services:
db:
image: mysql:5.7
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWD}
volumes:
- type: volume
source: mysql_vol
target: /db:/var/lib/mysql
networks:
wp_network:
ipv4_address: 172.20.0.2
web:
build: ./docker/wordpress
container_name: wordpress
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: ${DB_USER}
WORDPRESS_DB_PASSWORD: ${DB_PASSWD}
WORDPRESS_DB_NAME: ${DB_NAME}
restart: always
depends_on:
- db
ports:
- "80:80"
volumes:
- ./wordpress/wp-content:/var/www/html/wp-content/
networks:
wp_network:
ipv4_address: 172.20.0.3
phpmyadmin:
image: phpmyadmin:latest
container_name: phpmyadmin
restart: always
depends_on:
- db
ports:
- 8080:80
networks:
wp_network:
ipv4_address: 172.20.0.4
networks:
default:
name: bridge
wp_network:
name: wp_network
driver: bridge
ipam:
driver: default
config:
- subnet: 172.20.0.0/24
volumes:
mysql_vol:
.env
DB_NAME=wp_dbname
DB_USER=wp_user
DB_PASSWD=wp_passwd
DB_ROOT=wp_root
./docker/wordpress/dockerfile
FROM wordpress:latest
RUN apt-get update -y && apt-get upgrade -y
WORKDIR /tmp
RUN curl -sL https://deb.nodesource.com/setup_lts.x | bash -
RUN apt install -y nodejs
RUN npm install -g browser-sync
WORKDIR /var/www/html
起動
myappディレクトリで、docker-compose up -d
で起動。
WordPressには、80番ポートで立ち上げているので、http://{FQDN or IPアドレス}
で接続できるはず。
phpmyadminには、8080番ポートで立ち上げてるので、http://{FQDN or IPアドレス}:8080
で接続できるはず。
終了
myappディレクトリで、docker-compose down
で終了。
ホスト側にマウントさせた情報は残ります。