Edited at

docker-composeでwordpress環境をサクッと構築する


環境

OSX El Capitan

docker Version 1.13.1


Docker for Macをインストールする

DockerをMacにインストールする


wordpress用のディレクトリを作る

好きな名前のディレクトリを作る

$ mkdir { my-wordpress-dir-name }

ディレクトリに移動する
$ cd { my-wordpress-dir-name }


docker-composeの準備をする


docker-compose.ymlをつくる


公式のdocker-compose.yml

version: '2'

services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress

wordpress:
image: wordpress:latest
depends_on:
- db
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:



container名をつける

  db:

image: mysql:5.7
container_name: {my-container-name-db}

-略-

wordpress:
image: wordpress:latest
container_name: {my-container-name}

上記のようにすることで任意のcontainer名がつけられる。

何も指定しないとwp_wordpress_1・wp_db_1などという名前にされてしまってわかりづらくなるので、指定するのがおすすめ。

dbとWordPressで別々のcontainerが必要になるので、dbの方は末尾に-dbをつけるなどして区別すると良い。

同様にしてnetwork名も明示的につけると良い。

    networks:

- {my_wordpress_network}


開発を行うディレクトリをcontainerに同期する

Dockerでは、ローカルPCのディレクトリをcontainer内のディレクトリに同期(マウント)できる。このときマウントされる領域を volume と呼ぶ。

ローカル環境でwordpressを編集しながらcontainerに同期させるためには、以下のように記述する。

    volumes:

- "$PWD:/var/www/html"
- "$PWD/.docker/backup:/tmp/backup"
- "$PWD/.docker/log:/tmp/log"


アクセスポートを変更する

デフォルトで"8000:80"になっているので、すでにlocalhost:8000を使っている場合は変更する。

ポートが重複しているとbuild時にエラーが出てbuildが止まる。

buildが途中で止まってしまったときは、妙なcontainerが出来ていたりするので下記を参照にしてまっさらにしてやり直す。


環境変数は.envにまとめて読み込む

以下のように記述することで外部の.envファイルを読み込むようにできる。

    env_file: .env

全体のサンプルは下記。


おれおれdocker-compose.yml

version: "2"

services:
wordpress:
image: wordpress:latest
container_name: "{my-container-name}"
volumes:
- "$PWD:/var/www/html"
- "$PWD/.docker/backup:/tmp/backup"
- "$PWD/.docker/log:/tmp/log"
ports:
- {"my-port-number"}
depends_on:
- db
environment:
WORDPRESS_DB_HOST: "db:3306"
networks:
- {my_wordpress_network}
env_file: .env

db:
image: mysql:5.7
container_name: "{my-container-name-db}"
volumes:
- "db-data:/var/lib/mysql"
networks:
- {my_wordpress_network}
env_file: .env

volumes:
db-data:

networks:
{my_lwordpress_network:}



.envのサンプル

WORDPRESS_DB_NAME=wordpress

WORDPRESS_DB_USER=admin
WORDPRESS_DB_PASSWORD=pass

MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=wordpress
MYSQL_USER=admin
MYSQL_PASSWORD=pass



docker-compose.ymlを使ってbuildする


buildのコマンドを叩く

// imageを呼び出してcontainerをbuildする

$ docker-compose up -d

こんな感じのメッセージが出て、wordpressがbuildされる。

Creating network "{my-network-name}" with the default driver

Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
efd26ecc9548: Pull complete
a3ed95caeb02: Pull complete
...
Digest: sha256:34a0aca88e85f2efa5edff1cea77cf5d3147ad93545dbec99cfe705b03c520de
Status: Downloaded newer image for mysql:5.7
Pulling wordpress (wordpress:latest)...
latest: Pulling from library/wordpress
efd26ecc9548: Already exists
a3ed95caeb02: Pull complete
589a9d9a7c64: Pull complete
...
Digest: sha256:ed28506ae44d5def89075fd5c01456610cd6c64006addfe5210b8c675881aff6
Status: Downloaded newer image for wordpress:latest
Creating my_wordpress_db_1
Creating my_wordpress_wordpress_1


imageが作られたことを確認する

// image一覧を見る

$ docker image ls



※わたしはwordpress 4.7.2-php7.1-apacheも使っているため3つあります。


containerが立ち上がったことを確認する

// 起動しているcontainerの一覧を見る

$ docker container ls

起動していないcontainerも含めて一覧を見るコマンドはこちら。意図したcontainerが立ち上がっていなかったら、このコマンドでbuildが失敗していないか確認する。

$ docker container ls -a


localhost:8000にアクセスして確認する

localhost:{設定したアクセスポート番号}をURLに入力してアクセスすると、WordPressの初期設定画面が出てくる。

何て簡単なのでしょう...!


buildに失敗したとき


関連するcontainerを停止した上に削除する

// buildしたcontainerを停止した上で削除する

$ docker-compose down -v


失敗したconatainerとnetworkが残っていないか確認する

// 起動していないcontainerも含めて一覧で見る

$ docker container ls -a

// 存在するnetworkのlistを見る
$ docker network ls

何らかの原因でdocker-compose down -vしても失敗したcontainerや不要なnetworkを削除できないときは、以下のコマンドで対処する。

1.不要なcontainerが存在するが、起動はしていなかった場合

// 起動していないcontainerを一括削除する

$ docker container prune

2.不要なcontainerが存在し、起動している場合

// containerを停止する

$ docker stop {containerのハッシュ値}

// 対象のcontainerを削除する
$ docker rm {containerのハッシュ値}

3.不要なnetworkが残っている場合

// networkを削除する

$ docker network rm {networkのハッシュ値}


参考にさせていただいた記事

https://docs.docker.com/compose/wordpress/

https://tech.recruit-mp.co.jp/infrastructure/post-11266/

http://qiita.com/muk-ai/items/3350122d9e09473723c6