クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

Compose ファイルの2つのサービス

このレッスンのあとで: 1つの Compose ファイルで、連携する2つのサービスを書き表すことができる。

55分のレッスンコマンド4件Docker 入門ラボ:止まったサービスを直して、コンテナー、ログ、再起動を学ぶ

先にキャッシュ、次にサイト

通販サイトには、Web サーバーとキャッシュが要ります。手で1つずつ起動すると、長いコマンドを、正しい順に、正しい名前で打つことになります。

3回目に、だれかが順番を逆にして起動します。1つのファイルなら、1度書けば全員に通じます。

このレッスンのゴール

メモ

1つの Compose ファイルで、連携する2つのサービスを書き表すことができる。

大事な言葉

ことばいみれい
サービスCompose ファイルの1つのプログラム。1つ以上のコンテナで動く
Compose ファイルサービスとそのつながりを書いたテキストファイル
公開ポートコンテナの入り口を、ホストで開いたもの8080:80
depends_onあるサービスが別のサービスを待つ決まり
ヘルスチェックサービスが応答するかを、Docker が繰り返す確認

学生が入力するセルは、このプレビューでは空白です。

ラボにできないこと

メモ

ラボの端末に docker compose のコマンドはありません。ラボは3つのサービスを、ファイルを編集で開ける Compose ファイルから起動しました。このレッスンのファイルは私たちのマシンで動かしました。あなたは読み、ラボのファイルが何をしたかを見て、課題で起動順を確かめます。

1つのファイルがすべてのサービスを書く

services: の下に、各サービスの名前と、動かすイメージを書きます。ほかのキーが、つながりを決めます。入り口、設定、保存するボリューム、待つ相手です。

docker compose up はファイルを読み、すべてを正しい順に起動します。Web サーバーとキャッシュの例です。

1つの Compose ファイルの2つのサービス

コード: bash
services:
  web:
    image: nginx:1.27-alpine
    ports:
      - "8080:80"
    environment:
      CACHE_HOST: cache
    depends_on:
      cache:
        condition: service_healthy
  cache:
    image: valkey/valkey:8.1-alpine
    healthcheck:
      test: ["CMD", "valkey-cli", "ping"]
      interval: 3s
    volumes:
      - cache-data:/data
volumes:
  cache-data:

サービス名で cache を見つける

コマンド
docker exec web getent hosts cache

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

どのサービスがいつ起動したか

コマンド
docker inspect --format '{{.Name}} {{.State.StartedAt}}' web cache worker

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

例: 各キーの働き

キー働き見えたこと
image動かすイメージを決めるラボは nginx と valkey を動かす
depends_onあるサービスに別のサービスを待たせるラボでは、worker が web と cache の数秒後に起動した
healthcheckサービスの確認のしかたを Docker に教えるcache は valkey-cli ping に答えるので healthy
environmentプログラムに設定を渡すprintenv CACHE_HOST は cache と出た
volumesコンテナの外にフォルダを残すサービスを消しても cache-data は残る

学生が入力するセルは、このプレビューでは空白です。

公開ポートは入り口を開ける

ネットワークの中では、サービスは名前で届き合います。ホストにいる訪問者には、入り口が要ります。

"8080:80" は、ホストのポート 8080 をコンテナのポート 80 に向ける、という意味です。ホスト側が先です。私たちのマシンでは curl http://localhost:8080 が 200 を返しました。ラボの web には公開ポートがありません。届くのは、ほかのサービスと、ラボの開くボタンだけです。

よくある間違い

注意

depends_on は、相手のプログラムの準備ができるまで待つ、と考える人がいます。それだけでは、相手のコンテナが起動するまでしか待ちません。相手にヘルスチェックをつけ、condition: service_healthy を使います。すると web は、cache が答えるときにだけ起動します。

web で共有フォルダに書ける?

コマンド
docker inspect --format '{{range .Mounts}}{{.Destination}} {{.RW}}{{end}}' web

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

worker では?

コマンド
docker inspect --format '{{range .Mounts}}{{.Destination}} {{.RW}}{{end}}' worker

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

もう一歩先へ

例のファイルに3つ目のサービスを足しましょう。web と cache の両方に依存する worker です。書くのは3行だけです。名前、イメージ、depends_on です。

そのあと、Compose が3つをどの順に起動するかを考えます。課題は、どんなリストでも同じことを尋ねます。

このラボとソースについて: Docker 入門ラボ:止まったサービスを直して、コンテナー、ログ、再起動を学ぶ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。