docker-composeを使ってWordPressを構成してみよう

こんにちはー!ニアです。

今回は、docker-composeという機能を使ってWordPress環境をPC上で作っていくお話です。

1. docker-composeとは

docker-composeは、アプリで必要な複数のDockerコンテナをまとめて管理する機能です。

例えば今回扱うWordPressをDockerで構築するとなると、

  • WordPressコンテナ
  • MySQLコンテナ

の2つのコンテナを使うことになりますが、docker-composeを利用すれば、

  • コンテナをまとめて作成・起動・停止・削除
  • 各コンテナにて必要に応じて環境変数やポートフォワードを設定、ボリュームのマウント
  • Dockerのブリッジネットワークを利用することで、コンテナ間だけの通信

ができて便利です。

docker-composeは基本的に1つのYAMLファイルで定義します。もちろんテキスト形式なので、ソース管理も楽々だよ!

2. WordPressのdocker-compose.ymlを作る

まずは、docker-compose .ymlファイルを作成します。

touch docker-compose.yml

次に、WordPressコンテナとMySQLコンテナにて、環境変数やポートフォワード、ボリュームのマウントなどを設定をdocker-compose .ymlに記述します。

Nia12.png
基本的にdocker runコマンドで使うオプションが利用できます。
version: "3"
services:
  # WordPressコンテナ(PHP)
  wordpress:
    image: wordpress          # Dockerイメージ名を指定します。
    container_name: wp_app    # Dockerコンテナ名を定義します。( --name オプションと同じ )
    networks:
      - wp_net
    # ↓エラーなどでコンテナが終了した時、自動でコンテナを再起動させます。
    restart: always
    # 環境変数の設定( -e オプションと同じ )
    environment:
      # WordPressに設定するDB情報を設定します。
      WORDPRESS_DB_HOST: wp_db:3306
      WORDPRESS_DB_USER: nia
      WORDPRESS_DB_PASSWORD: niatan
      WORDPRESS_DB_NAME: nia_wp
    # ポートフォワードの設定( -p オプションと同じ )
    ports:
      - 80:80
    # ボリュームのマウント( -v オプションと同じ )
    volumes:
      # WordPressのファイル
      - ./wordpress/data:/var/www/html

  # MySQLコンテナ
  db:
    image: mysql:5.6 
    container_name: wp_db
    networks:
      - wp_net
    restart: always
    environment:
      TZ: Asia/Tokyo
      MYSQL_ROOT_PASSWORD: password
      # WordPressで使用するデータベースユーザーとデータベースを設定します。
      MYSQL_USER: nia
      MYSQL_PASSWORD: niatan
      MYSQL_DATABASE: nia_wp
    ports:
      - 3306:3306
    volumes:
      # 初回起動時に実行するシェルスクリプト
      - ./db/init/init.sh:/docker-entrypoint-initdb.d/init.sh:ro
      # MySQLのデータの保存場所
      - ./db/data:/var/lib/mysql

# ブリッジネットワーク
# ここで定義したネットワーク名を各コンテナから指定することで、
# ホスト名にコンテナ名を指定するだけで、コンテナ間の通信ができます。
networks:
  wp_net:
    driver: bridge

docker-compose.ymlを作成したら、そのファイルのディレクトリ上で、以下のwordpress/dataとdb/dataディレクトリを作成します。

mkdir -p wordpress/data
mkdir -p db/data

WordPressコンテナからMySQLコンテナのDBへアクセスできるように、MySQLコンテナの初回起動時、$MYSQL_USERに権限を付与するシェルスクリプトをdb/initに配置します。

mkdir db/init
cat << EOS > db/init/init.sh
> (
> mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF
>     GRANT ALL ON *.* TO '$MYSQL_USER'@'%';
> EOF
> )
> EOS

これで準備は完了です!docker-compose upコマンドを実行して、WordPressとMySQLコンテナを起動します。

docker-compose up -d
Creating network "wordpress_wp_net" with driver "bridge"
Creating wp_app ... done
Creating wp_db  ... done
Nia02.png
WordPressとMySQLはバックグラウンドで動かすので、-dオプションを付けます。

少し待ってから、ブラウザでlocalhostにアクセスすると、WordPressのインストール画面が表示されます。

WordPressのサイト情報とユーザーアカウントを設定してインストールすれば、構築完了です!

3. docker-composeでよく使うコマンド

docker-compose up -d
docker-compose down
docker-compose start
docker-compose stop
docker-compose ps
docker-compose logs

4. おわりに

今回はdocker-composeを使って、WordPressの環境を構築し、コンテナをまとめて管理していきました。

実際に私は業務で、オンラインゲームのサーバーサイドの開発環境(ローカル上)構築にWebコンテナと DBコンテナ、キャッシュ用コンテナからなるdocker-composeを使っています。起動や停止、環境の再構築などが速くて便利なので開発が捗りまする。
また、開発環境で使用するPCを移行したことが一度あるのですが、docker-compose一式を移行するだけで、簡単に新PC上で環境構築できました。

ちなみにコンテンの管理には他にも、Kubernetesというオーケストレーションツールを使って、複数のホストを横断したコンテナのデプロイや管理をする方法があります。

せっかくMacを2つ持っているので、ちょっとやってみたいなと思いました。

それでは、See you!

コメント

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