docker-composeでwordpressの開発環境を爆速構築する

wordpress
スポンサーリンク
language

今回はDocker Composeを使ってローカルでwordpressを動かす方法をご紹介します。

Docker Composeを使うと1つのコマンドで

  • wordpressを動かす環境をローカルに作る
  • wordpressを動かす環境を終了する

ことができるので、爆速で開発に着手できます。

りーほー
りーほー

開発環境構築に時間をかけるのではなく、開発に時間をかけたい!

Docker Composeとは、YAMLファイルを使って複数のコンテナのDockerアプリケーションを設定します。
そして、1つのコマンドでそのすべてのアプリケーションが作成され起動します。
終了するときも1つのコマンドで終了できます。

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.

Composeは複数のコンテナのDockerアプリケーションを定義して実行するためのツールです。ComposeではYAMLファイルを使ってアプリケーションのサービスを設定します。そして、1つのコマンドで、設定した内容からすべてのサービスを作成し、起動します。

https://docs.docker.com/compose/
スポンサーリンク

Docker Composeのインストール

まずはDocker DesktopをインストールしてDocker Composeを使えるようにしましょう。
こちらのDockerのドキュメントからインストールができます。

Macの方はこちらからインストールできます。

Install Docker Desktop on Mac
How to install Docker Desktop on Mac

Windowsの方はこちらからインストールできます。

Install Docker Desktop on Windows
How to install Docker Desktop for Windows

すでにDockerがインストールされている方は以下のコマンドでDocker Composeをインストールできます。
GitHubのComposeリポジトリのリリースページから最新のComposeをインストールします。

$ curl -L https://github.com/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
docker-compose version 1.29.1, build c34c88b2

Docker Composeの設定のサンプル

使用するコンテナイメージは

  • wordpress(最新)
  • mysql:5.7
  • phpmyadmin

を使ってwordpressを動かします。
これらはdocker composeの設定ファイルに記述することで自動的にダウンロードされます。

プロジェクトのルートディレクトリに以下のdocker-compose.ymlを置いてください。

version: "2"
services:
  wordpress:
    image: wordpress:latest
    container_name: "wordpress"
    ports:
      #localhost:8080でwordpressにアクセスできる
      - "8080:80"
    volumes:
      # テーマをマウント
      - "$PWD/[theme]:/var/www/html/wp-content/themes/[theme]"
      - "$PWD/.docker/backup:/tmp/backup"
      - "$PWD/.docker/log:/tmp/log"
      # プラグインをマウントしたい場合
      # - "./plugins:/var/www/html/wp-content/plugins"
      # アップロード画像をマウントしたい場合
      # - "./uploads:/var/www/html/wp-content/uploads"
    depends_on:
      - db
    environment:
      WORDPRESS_DB_HOST: "db:3306"
    networks:
      - flat-network
    env_file: .docker.env
  db:
    image: mysql:5.7
    container_name: "database"
    ports:
      - 3306:3306
    volumes:
      - "db-data:/var/lib/mysql"
      #サンプルデータのsqlダンプを読み込む
      # - "./sample_data.sql:/docker-entrypoint-initdb.d/sample_data.sql"
    networks:
      - flat-network
    env_file: .docker.env
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: "phpmyadmin"
    env_file: .docker.env
    links:
      - db
    ports:
      - 8081:80
    volumes:
      - "./phpmyadmin/sessions:/sessions"
    networks:
      - flat-network
volumes:
  db-data:
networks:
  flat-network:

テーマ開発とマウントする

開発したいテーマをDocker上のwordpressのテーマとマウント(同期)するには、以下の部分を編集してください。

[theme]を開発環境のテーマのディレクトリ名に変更すると、Docker上のwordpressのテーマとマウントします。

# テーマをマウント
- "$PWD/[theme]:/var/www/html/wp-content/themes/[theme]"

Docker Composeの設定のカスタマイズ

docker-composeの設定のサンプルを開発環境に合わせカスタマイズする方法をご紹介します。

開発するテーマ以外にもdocker上のwordpressに

  • プラグインをマウントする
  • アップロードした画像をマウントする
  • wordpressに初期データを読み込ませる
  • ユーザー名、パスワードを変更する

をマウント(同期)したりwordpressの初期データを読み込ませたりできます。

プラグインをマウントする

Docker上のwordpressでインストールしたプラグインをプロジェクトのルートディレクトリにマウント(同期)できます。
マウントされるとルートディレクトリにpluginsファイルができます。

以下の部分のコメントアウトを取り除くと開発環境にpluginsをマウントします。

# プラグインをマウントしたい場合
# - "./plugins:/var/www/html/wp-content/plugins"

アップロードした画像をマウントする

Docker上のwordpressでアップデートした画像をプロジェクトのルートディレクトリにマウント(同期)できます。
マウントされるとルートディレクトリにuploadsファイルができます。

以下の部分のコメントアウトを取り除くと開発環境のuploadsファイルとwordpressのuploadsをマウントします。

# アップロード画像をマウントしたい場合
# - "./uploads:/var/www/html/wp-content/uploads"

wordpressに初期データを読み込ませる

wordpressに初期データを読み込ませるためのサンプルデータがある場合は、以下の部分のコメントアウトを取り除くと起動時にサンプルデータを読み込みます。

#サンプルデータのsqlダンプを読み込む
# - "./sample_data.sql:/docker-entrypoint-initdb.d/sample_data.sql"

ユーザー名、パスワードを変更する

wordpressやphpMyAdminはデータベースに接続する必要があります。
そのためのユーザー名とパスワードを設定します。

wordpressにログインするユーザー名、パスワードではありません。

それぞれのユーザー名とパスワードは必要に応じて編集してください。

WORDPRESS_DB_NAME=wordpress
WORDPRESS_DB_USER=mysql_user
WORDPRESS_DB_PASSWORD=mysql_password

MYSQL_ROOT_PASSWORD=root_password
MYSQL_DATABASE=wordpress
MYSQL_USER=mysql_user
MYSQL_PASSWORD=mysql_password

PMA_ARBITRARY=1
PMA_HOST=db
PMA_USER=mysql_user
PMA_PASSWORD=mysql_password

この.docker.envファイルはdocker-compose.ymlに読み込まれてdocker内で設定が反映します。

wordpressを起動する

Docker内にwordpressを起動するコマンドは以下のとおりです。

$ docker-compose up
Creating database ... done
Creating phpmyadmin ... done
Creating wordpress  ... done

-dオプションを付けるとバッググランドで起動します。

$ docker-compose up -d


このコマンド1つでdocker-compose.ymlで設定した複数のコンテナが起動します。
コンテナを起動するDockerイメージがない場合は、自動的にインストールします。

起動後はlocalhost:8080でDocker内のwordpressにアクセルすることができます。

また、phpMyAdminはlocalhost:8081でアクセスできます。

wordpressを終了する

Docker内のwordpressを終了するコマンドは以下のとおりです。

$ docker-compose down
Stopping wordpress  ... done
Stopping phpmyadmin ... done
Stopping database   ... done
Removing wordpress  ... done
Removing phpmyadmin ... done
Removing database   ... done

-vオプションをつけるとボリュームを削除して終了します。

$ docker-compose down -v
Stopping wordpress  ... done
Stopping phpmyadmin ... done
Stopping database   ... done
Removing wordpress  ... done
Removing phpmyadmin ... done
Removing database   ... done
Removing network flat-network
Removing volume db-data

ネットワーク、ボリューム、イメージを削除して終了する場合は以下のコマンドでできます。

$ docker-compose down -v --rmi all
Stopping wordpress  ... done
Stopping phpmyadmin ... done
Stopping database   ... done
Removing wordpress  ... done
Removing phpmyadmin ... done
Removing database   ... done
Removing network flat-network
Removing volume db-data
Removing image mysql:5.7
Removing image wordpress:latest
Removing image phpmyadmin/phpmyadmin

wordpressのデータをダンプする

Docker内のwordpressで作ったデータを吐き出したい場合は、以下のコマンドでダンプすることができます。

$ docker exec -it database sh -c 'mysqldump wordpress -u mysql_user -pmysql_password 2> /dev/null' > sample_data.sql

.docker.envで

  • MYSQL_USER
  • MYSQL_PASSWORD

を編集した場合は設定した値を入れてコマンドを実行してください。

まとめ

Docker Composeはとても便利なツールでコマンド一つで複数のDockerコンテナを操作できます。

Docker Composeを使うことで数十分の時間の節約になります。
開発環境の構築は爆速で終わらせて、開発により時間をかけれるようになったらうれしいです。

タイトルとURLをコピーしました