ゴール
DockerでWordPress実行環境を構築、通常の開発が出来る状態をゴールとします。
なぜこの記事を書いたか
Docker公式サイトをはじめいくつか同じような事を解説しているサイトがありましたが、個人的に下記の点が足りませんでした。
・画像(Media)がアップロード出来ない。
・PhpMyAdminなどのコンソールでDB(MySQL)にアクセス出来ない。
・ファイル同期出来ない(ホストPC(本体)とゲストPC(Docker container)でマウントの設定が出来ていない。)
これらがクリアー出来ていないと開発/運用に支障があるので色々調べた結果をまとめました。
前提環境
・mac OS X 10.9.5
・docker-compose を使える。
構築手順
1.プロジェクト フォルダを作成。
今回は下記のパスに「docker_wp」というフォルダを作成。
/Users/user/develop/docker_wp/
2.ターミナルで移動
cd /Users/user/develop/docker_wp/
3.書き込み権限のあるWordPress用Docker image を作成
(このステップを行う事でMediaのアップロードが可能になります。)
・下記内容でDockerfileを作成。
FROM wordpress:latest
RUN usermod -u 1000 www-data \
&& groupmod -g 1000 www-data
「FROM wordpress:latest」として最新のWordPress用imageを元にしています。
・下記コマンドでimageを作成
docker build -t wordpress:auth .
「wordpress:auth」でimageの名前とタグを指定しています。
実行後「docker images」コマンドで正常にimageが作成されているか確認します。
4.下記内容でdocker-compose.yml を作成。
version: '2'
services:
db:
image: mysql:5.7
ports:
- "3306:3306"
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
privileged: true
wordpress:
depends_on:
- db
image: wordpress:auth
ports:
- "80:80"
restart: always
working_dir: /var/www/html
volumes:
- /Users/user/develop/docker_wp/:/var/www/html/
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
privileged: true
volumes:
db_data:
赤字の部分に注目して頂きたいのですがdbのportを指定する事でPhpMyAdminなどの外部からの接続が可能になります。
またDBのvolumesを指定する事でホストPC(mac)とdockerコンテナー間のファイル同期が可能となります。
5.コンテナー作成〜稼働
docker-compose up -d
完了後、「docker ps」にて作成したコンテナーが動いているか確認します。
このように2つのコンテナーが起動していればOKです。
>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a9d3770ee0d wordpress:auth "docker-entrypoint.sh" 3 minutes ago Up 3 seconds 0.0.0.0:80->80/tcp dockerwp_wordpress_1
3980a9064e38 mysql:5.7 "docker-entrypoint.sh" 3 minutes ago Up 5 seconds 0.0.0.0:3306->3306/tcp dockerwp_db_1
5-2. wp-config.php のDB接続情報を修正する
上記の docker-compose.yml の例でいくと下記の通りに設定します
define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress') );
define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'root') );
define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'wordpress') );
6.ブラウザからアクセスする
下記でwordpressの設定画面が表示されます。
http://localhost
ここまでくれば環境構築は無事完了です!
7.DBにアクセスする
今回はSequel Proでアクセスします。
8.クリーンアップ
開発が完了した時などDockerを終了する時は下記コマンドでコンテナーを削除します。
docker-compose down
コンテナーを削除してもDBデータは残っています。
下記コマンドでDBデータも全て削除可能です。
docker-compose down --volumes
<参考サイト>
https://docs.docker.com/compose/wordpress/