今回はDocker Composeを使ってローカルでwordpressを動かす方法をご紹介します。
Docker Composeを使うと1つのコマンドで
- wordpressを動かす環境をローカルに作る
- wordpressを動かす環境を終了する
ことができるので、爆速で開発に着手できます。
開発環境構築に時間をかけるのではなく、開発に時間をかけていきましょう。
dockerでの開発環境構築は基本なので不安がある方は、次の書籍が良書なのでおすすめです。
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.
https://docs.docker.com/compose/
Composeは複数のコンテナのDockerアプリケーションを定義して実行するためのツールです。ComposeではYAMLファイルを使ってアプリケーションのサービスを設定します。そして、1つのコマンドで、設定した内容からすべてのサービスを作成し、起動します。
Docker Composeのインストール
まずはDocker DesktopをインストールしてDocker Composeを使えるようにしましょう。
こちらのDockerのドキュメントからインストールができます。
Macの方はこちらからインストールできます。
https://docs.docker.com/docker-for-mac/install/
Windowsの方はこちらからインストールできます。
https://docs.docker.com/docker-for-windows/install/
すでに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_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を使うことで数十分の時間の節約になります。
開発環境の構築は爆速で終わらせて、開発により時間をかけれるようになったらうれしいです。
コメント