docker-compose.ymlの解説

目次

はじめに

さて、こちらの記事は前回の【Mac】dockerでWordPressを構築内で案内していた、docker-compose.ymlの書き方についての解説記事です。

Docker初心者には特に難解ですが、少しでも理解が深まれば今後の発展に役立つはずです。

この記事だけで理解し切るのは無理だと思うので、ご自身で他記事などを見ながら理解を深めましょう。

あわせて読みたい
【Mac】dockerでWordPressを構築 【はじめに】 Web制作の現場では以前からDockerを使われてる方々が多くいましたが、遅ればせながら、この度私もMAMPからDockerへ移行を始めました! \Docker先生よろし...

今回使うdocker-compose.yml

【Mac】dockerでWordPressを構築から来た方にも分かりやすいよう、前回の記事でも使ったdocker-compose.ymlをそのまま使います。

version: "3.3"

services:
  db:
    image: mysql:8.0
    container_name: wp_db_docker
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:6.0.1
    container_name: wp_docker
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes: 
      - "$PWD:/var/www/html"
      - "$PWD/.docker/backup:/tmp/backup"
      - "$PWD/.docker/log:/tmp/log"

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    depends_on:
      - db
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOSTS=db
      - PMA_USER=wordpress
      - PMA_PASSWORD=wordpress
    ports:
      - "8001:80"
    volumes:
      - ./docker/phpmyadmin/sessions:/sessions

volumes:
  db_data: {}

解説

versionとは?

docker-compose(コマンド)で使用するバージョンを定義します。

ここではバージョン3を指定していますが、他のバージョンだとdocker-compose.ymlの書き方が異なるので、バージョン3以外を使う場合は、それぞれのバージョンに合わせた書き方を調べてください。

Servicesとは?

開発するアプリケーション(ここではWordPress)を実行するための各要素をServiceと呼びます。

ここでのServiceとは、db:wordpress:phpmyadmin:の3つが挙げられます。

つまりService(要素)をまとめるので、Services(複数形)となるのです。

このService名は他のServiceとの関連付けで使用するキーであり、任意で決めることができます。

Serviceで指定しているイメージは以下のとおりです。

  • db:がMySQL 8.0
  • wordpress:がWordPress 6.0.1
  • phpmyadmin:がphpMyAdmin

そしてServiceごとに、使用するイメージや、イメージの設定(下記のimageなど)を記述します。

imageとは

各Service内にimage: ○○○○と記述されている箇所があります。

これはServiceで使用するイメージを指定します。

イメージはDocker Hub(要ログイン)で見つけることができます。

あわせて読みたい
Docker Hub Container Image Library | App Containerization Welcome to the world's largest container registry built for developers and open source contributors to find, use, and share their container images. Build, push ...

例で言えば、image: wordpress:6.0.1と記述されている場所の、wordpressがイメージ名6.0.1がイメージのバージョンです。

container_nameとは?

指定したイメージごとに設定したものです。

いろいろとごっちゃになって理解しにくいですが、Serviceの中身=コンテナと覚えてもらえば分かりやすいかもしれません。

つまりcontainer_nameとは、イメージに設定を施したコンテナ名のことです。

volumesとは?

これまた理解するのに難しい厄介な存在ですが、例えばDockerを使ってホームページを作ったとします。

このとき、index.htmlやstyle.cssを作成してソースコードを記述していくのですが、これらのファイルが存在する場所は、あくまでもローカルのプロジェクトフォルダ内です。

ですがDockerの開発環境で実行(ブラウザで表示させる)するときに参照されるのは、プロジェクトフォルダではなく、コンテナ(仮想のプロジェクトフォルダのようなもの)の中身を参照しているのです。

なので普通は実行してもコンテナ内には何もファイルが存在しないので、ブラウザで表示することができません。

そこで、volumesを指定してあげることで、ローカルのプロジェクトフォルダをコンテナ内にマウントすることができます。

マウントすることで、コンテナ内でローカルのプロジェクトフォルダが同期され、コンテナを参照されても(ショートカットのように)ファイルを読み込むことができるのです。

要するに、ローカルのどこを参照するか指定しているのです。

restartとは?

手動や何らかのエラーにより、対象のコンテナが停止した際の再起動の挙動を指定します。

ここではalwaysと指定しますが、その他の挙動については以下のとおりです。

スクロールできます
restart policy挙動
no再起動しません。※デフォルト値
on-failure[:max-retries]プロセスが0以外のステータスで終了した場合に、:max-retries(最大再試行回数)の分だけ再起動を試みます。
on-failure[10]と指定すれば、10回再起動を試み、それまでに起動が成功すれば、処理を中断します。
なお、1回ごとに100msずつ遅延処理時間が増加します。
always明示的にstop($ docker-compose stop)されない限り、常に再起動を行います。
unless-stopped最後にdocker deamonが起動していた際に、ステータスが終了状態であれば、再起動しません。
なお、それ以外ではalwaysと同じ挙動をします。
restart policy

environmentとは?

environmentとはそのコンテナに対して渡す環境変数を指定します。

# db:(Service)内より
environment:
 MYSQL_ROOT_PASSWORD: somewordpress

上ではMYSQL_ROOT_PASSWORD: somewordpressと指定されていますが、ここではMySQLのルート用のパスワードをsomewordpressと指定しています。

その他にもwordpress:なら接続するDBのホストやログイン用のユーザー名、パスワードなどを指定しています。

depends_onとは?

名前の通り、depends(依存する)の関係を指定します。

wordpress(Service)では- dbと指定されています。

これは、「wordpressのコンテナを起動するために、dbを先に起動させろ」ということです。

なお、dockerを停止(stop)させた場合は、起動の逆でwordpress→dbの順番で停止します。

なお、依存先の指定方法は-(ハイフン)+スペースに続けてサービス名を指定します。

services:
  service1:
   image: sample_image1
  service2
    image: sample_image2
    depends_on:
      - service1 # 依存先のService名

# 起動:service2 → service1
# 停止:service1 → service2

portsとは?

MAMPを触ったことがある人なら何となく分かるかと思いますが、portsで指定したポート番号からアクセスすることができます。

wordpressでは- "8000:80"と指定していますので、http://localhost:8000と打ち込めば、WordPressへアクセスすることができます。

このあたりを触ることができれば、お名前.comなどで取得したドメインを使うこともできます。

phpmyadminでは- "8001:80"と指定していますので、http://localhost:8001でphpMyAdminの見慣れた画面へアクセスできます。

最後に

ここまで如何でしたでしょうか。

少しはみなさんの理解を深めることに貢献できたでしょうか。

今後も皆さんの役に立つ情報を発信していきますので、今後ともよろしくお願いいたします。

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次