Docker Compose の依存関係とトラブルシューティング

Docker 中級

Mike Metzger

Data Engineering Consultant

依存関係とは

  • 依存関係はリソース起動順を決める
  • リソース(コンテナ)は他のリソースを必要とする場合がある
  • Webアプリの例
    • データベース postgresql が最初に起動

コンテナの依存関係例 - postgres

Docker 中級

依存関係とは

  • 依存関係はリソースの順序を定義
  • リソース(コンテナ)は他のリソースを必要とする場合がある
  • Webアプリの例
    • データベース postgresql が最初に起動
    • 次に python_app

コンテナの依存関係例 - python_app

Docker 中級

依存関係とは

  • 依存関係はリソースの順序を定義
  • リソース(コンテナ)は他のリソースを必要とする場合がある
  • Webアプリの例
    • データベース postgresql が最初に起動
    • 次に python_app
    • 最後に Web サーバー nginx

コンテナの依存関係例 - 全体

Docker 中級

depends_on

  • depends_on 属性で依存関係を定義
  • 例のように依存を連鎖可能
  • 1つのリソースに複数の依存も可
  • compose.yaml の記述順は影響しない
services:
  postgresql:
    image: postgresql:latest

python_app: image: custom_app depends_on: - postgresql
nginx: image: nginx/latest depends_on: - python_app
Docker 中級

アプリの停止

  • アプリの停止は逆順で行われる
  • nginx リソースを停止

コンテナの依存関係例 - 全体

Docker 中級

アプリの停止

  • アプリの停止は逆順で行われる
  • nginx リソースを停止
  • 次に python_app リソースを停止

コンテナの依存関係例 - python_app

Docker 中級

アプリの停止

  • アプリの停止は逆順で行われる
  • nginx リソースを停止
  • 次に python_app リソースを停止
  • 最後に postgresql リソースを停止

コンテナの依存関係例 - postgres

Docker 中級

その他のオプション

  • Docker Compose には他の依存オプションもある
  • condition: はリソースの準備完了条件を定義
    • service_started - 通常起動した
      • 既定の動作
    • service_completed_successfully - 初期設定などが正常終了
    • service_healthy - healthcheck の基準を満たす
services:
  nginx:
    image: nginx/latest
    depends_on:
      python_app:
        condition: service_started

python_app: image: custom_app depends_on: postgresql: condition: service_healthy
Docker 中級

Docker Compose のトラブルシューティングツール

  • Docker Compose にはトラブルシューティング用ツールもある
  • docker compose logs - アプリ内すべてのリソースの出力を収集
    redis-1  | * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    redis-1  | * Running mode=standalone, port=6379.
    redis-1  | * Server initialized
    redis-1  | * Ready to accept connections tcp
    web-1    | * Serving Flask app 'app.py'
    web-1    |  * Running on all addresses (0.0.0.0)
    web-1    |  * Running on http://172.20.0.2:5000
    web-1    | Press CTRL+C to quit
    
  • docker compose logs <resourcename>
Docker 中級

docker compose top

  • docker compose top はアプリ内リソースの状態を表示
composetest-redis-1
UID   PID    PPID   C    STIME   TTY   TIME       CMD
999   2767   2726   0    01:16   ?     00:03:27   redis-server *:6379

composetest-web-1
UID    PID    PPID   C    STIME   TTY   TIME       CMD
root   2768   2740   0    01:16   ?     00:00:23   /usr/local/bin/python /usr/local/bin/flask run
Docker 中級

Let's practice!

Docker 中級

Preparing Video For Download...