KUSANAGI RoDの使い方(3)(Dockerコラム)

宮﨑悟

今回の記事では、プロビジョニングツール「KUSANAGI RoD」を使用して生成される、ターゲットディレクトリ以下のファイルとその設定内容について詳しく解説しています。特にDocker環境での設定ファイル「docker-compose.yml」について、具体的なコードと共に、各サービスごとの設定内容やロールを説明しています。また、前回の記事で誤った記述があったことを謝罪し、正確な情報を提供しています。次回は環境設定ファイルについて詳しく説明する予定です。

前回は、KUSANAGI RoD(以下RoD)で環境を生成するためのオプションについて説明しました。今回は、プロビジョン後に生成されるターゲットディレクトリ以下のファイルについて説明しようと思います。

provisionで生成したファイル

RoDでWordPressをプロビジョンした場合、ターゲットディレクトリ以下に、ファイル・ディレクトリが生成されます。

  • docker-compose.yml
    RoD環境でのdocker-compose の設定ファイルです
  • .git/、.gitignore
  • Git管理用ディレクトリおよびファイルです
  • ターゲットディレクトリ以下のファイルはすべてGit管理対象です
  • 環境設定ファイル
    docker-compose.yml で使用する環境変数をファイル内に格納します
  • .kusanagi
  • .kusanagi.db
  • .kusanagi.httpd
  • .kusanagi.mail
  • .kusanagi.mysql
  • .kusanagi.php
  • .kusanagi.wp
  • contents/
    コンテナボリューム内にある、/home/kusanagi/ターゲット名/ ディレクトリの中身をコピーしたものです
  • wpcli/
    wpcli 用のDockerイメージ作成用ディレクトリです
    WordPressをプロビジョニングしたときに作成されます

docker-compose.yml

docker-compose.yml の内容は以下のとおりです。

networks

bridgeとして1つのネットワークを作成します

   version: '3'

   networks:
     default:
       driver: bridge
       driver_opts:
         com.docker.network.driver.mtu: 9000
         com.docker.network.enable_ipv6: "true"
  • ネットワークを少しでも高速にするため、MTUを9000としています
  • このネットワークではIPv6をサポートします

volumes

パーシスタンスボリューム(PV)の定義です。

   volumes:
     kusanagi:
     database:
  • /home/kusanagi 用と、データベーステーブル用のPVを用意しています
  • この文はファイルの末尾に配置しています

httpd

httpd のサービスです。

   services:
     httpd:
       container_name: wordpress_httpd
       image: primestrategy/kusanagi-nginx:1.17.6-r0
       restart: always
       env_file:
         - .kusanagi
         - .kusanagi.httpd
       volumes:
         - kusanagi:/home/kusanagi
         - kusanagi:/etc/letsencrypt
         - kusanagi:/var/www/html/.well-known
       ports:
         - "80:8080"
         - "443:8443"
       extra_hosts:
         - "a300.gpm.local:127.0.0.1"
  • プロビジョン時のオプションで、nginx/httpdから指定した際のイメージが設定されます
  • nginx/httpdイメージの内部使用ポートは8080と8443で、プロビジョン時に指定したポートからポートフォワードします
  • /home/kusanagi およびcertbot用のディレクトリをPVとし、kusanagiボリュームを使用します

certbot

certbot により、let’s encrypt からSSL鍵を取得するサービスですが、現在は実験中の状態です。

     certbot:
       container_name: wordpress_certbot
       image: certbot/certbot:v1.0.0
       restart: always
       network_mode: "service:httpd"
       env_file:
         - .kusanagi.httpd
       volumes:
         - kusanagi:/var/www/html/.well-known
         - kusanagi:/etc/letsencrypt
       command:
         - --version

config

コンテナ内ファイル・DBへの操作を行うサービスです。
WordPressとそれ以外では作成する内容が異なります。

   ## CONFIG
     config:
       container_name: wordpress_config
       restart: always
       build:
           context: ./wpcli
       user: "1000:1001"
       env_file:
         - .kusanagi
         - .kusanagi.wp
         - .kusanagi.db
       volumes:
         - database:/var/run/mysqld
         - kusanagi:/home/kusanagi
       command: wp --version
  • WordPress用は、wpcli ディレクトリでビルドしたイメージを使用します
  • wpcliイメージはWordPressの正式イメージである wordpress:cli をベースにしてるため、wpコマンドが使用可能です
  • socketファイルの位置をDBサービスに合わせて、/var/run/mysqld/mysqld.sock としてあります
   ## CONFIG
     config:
       container_name: lamp_config
       image: primestrategy/kusanagi-config:1.0.1-r0
       restart: always
       user: "1000:1001"
       env_file:
         - .kusanagi
         - .kusanagi.db
       volumes:
         - database:/var/run/mysqld
         - kusanagi:/home/kusanagi
  • WordPress以外は、kusanagi-config を使用します

php

php-fpmのサービスです。

     php:
       container_name: wordpress_php
       image: primestrategy/kusanagi-php:7.3.12-r0
       restart: always
       env_file:
         - .kusanagi
         - .kusanagi.php
         - .kusanagi.mail
       network_mode: "service:httpd"
       volumes:
         - database:/var/run/mysqld
         - kusanagi:/home/kusanagi
  • httpdと同じネットワークに接続し、コンテナ外からの接続を行いません
  • /home/kusanagi およびDB用のディレクトリをPVとし、kusanagi、databaseボリュームを使用します
  • databaseボリュームを使用するのは、DBのUNIX socketを使用して通信するためです

DB

データベースサービスです。

   ## MYSQL 
     db:
       container_name: wordpress_db
       image: mariadb:10.4.11-bionic
       restart: always
       user: "999:999"
       env_file:
         - .kusanagi.mysql
       network_mode: "service:httpd"
       volumes:
         - database:/var/run/mysqld
         - database:/var/lib/mysql
  • DB用のディレクトリをPVとし、databaseボリュームを使用します
  • プロビジョン時に選択肢たオプションにより、mariadb もしくは postgresql のどちらかを使用します
  • httpd のネットワークに接続していますが、DB接続にUNIX Socketを使用する場合は不要です

ftp

WordPressのときのみ使用されるftpサービスです

   ## FTPD
     ftp:
       container_name: wordpress_ftp
       image: primestrategy/kusanagi-ftpd:1.0.2-r0
       restart: always
       network_mode: "service:httpd"
       env_file:
         - .kusanagi
         - .kusanagi.wp
       volumes:
         - kusanagi:/home/kusanagi
  • httpdと同じネットワークに接続し、コンテナ外からの接続を行いません
  • /home/kusanagi をPVとし、kusanagiボリュームを使用します

終わりに

今回は、プロビジョン後に生成されるターゲットディレクトリ以下のファイルについて説明しました。次回は、今回説明できなかった環境設定ファイルについて説明しようと思います。次回をお楽しみに。

訂正とお詫び

前回の記事で以下の間違いがありましたので、修正させていただきます。

言語説明
ja_JP(偽) → ja(真)日本語
<< KUSANAGI RoDの使い方(2)KUSANAGI RoDの使い方(4) (高速Dockerの話) >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解