search
LoginSignup
111

More than 3 years have passed since last update.

posted at

updated 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

スクリーンショット 2017-02-26 4.57.46.png
※わたしはwordpress 4.7.2-php7.1-apacheも使っているため3つあります。

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

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

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

$ docker container ls -a

スクリーンショット 2017-02-26 4.57.22.png

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

localhost:{設定したアクセスポート番号}をURLに入力してアクセスすると、WordPressの初期設定画面が出てくる。
スクリーンショット 2017-02-23 14.10.32.png

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
111