1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Docker】docker-compose.yml 学習メモ

1
Posted at

1. services: volumes:

.yaml
services:
  web:
    build:
      context: ./web
      dockerfile: Dockerfile
    depends_on:
      - app
    ports:
      - "8080:80"
    environment:
      APP_SERVER: http://app:80

  app:
    build:
      context: ./app
      dockerfile: Dockerfile
    depends_on:
      - db
    environment:
      REDIS_HOST: db
      REDIS_PORT: 6379
      REDIS_DB: 0

  db:
    image: redis:5.0.6-alpine3.10
    volumes:
      - c5kvs_redis_volume:/data

volumes:
  c5kvs_redis_volume:
    driver: local
  • services:
    →実行したいコンテナ単位の論理サービス群を定義する。キー名(web, app, db など)がサービス名=Compose 内 DNS 名になる。
  • volumes:
    →名前付きボリュームの宣言セクション。ここで定義したボリュームを任意のサービスでマウントする。

補足:プロジェクト名(デフォルトは「Compose ファイルがあるディレクトリ名」)でネットワークやボリュームの実体名に接頭辞が付き、他プロジェクトと衝突しにくくなる(-p や COMPOSE_PROJECT_NAME で上書き可能)。


2. services:web(フロント/プロキシ)

.yaml
web:
  build:
    context: ./web
    dockerfile: Dockerfile
  depends_on:
    - app
  ports:
    - "8080:80"
  environment:
    APP_SERVER: http://app:80
  • build:
     →context: ビルドの基準ディレクトリ
     →dockerfile: 使用する Dockerfile のファイル名を明示する。

  • depends_on:
    → web を app より後に起動するように指定。

  • ports: "8080:80"
    →ホスト:コンテナの順でポートを公開する。
     →ローカルの 8080 に来た HTTP はコンテナの 80 に届く。

  • environment:
    →コンテナ内の環境変数。例では APP_SERVER=http://app:80 を注入し、サービス名 app を DNS 名として参照する。Compose はデフォルトで単一ネットワークを作り、各サービスは互いをサービス名で解決できる。

補足:同一ネットワーク内での相互通信は expose の有無に関係なく可能。ホスト公開はportsのみ


3. services:app(Flask API)

.yaml
app:
  build:
    context: ./app
    dockerfile: Dockerfile
  depends_on:
    - db
  environment:
    REDIS_HOST: db
    REDIS_PORT: 6379
    REDIS_DB: 0
  • build:
    →web: と同様。
  • depends_on: - db
    →app を db(Redis)より後に起動するように指定。
  • environment:
    →コンテナ内の環境変数。例ではREDIS_HOST=db のようにサービス名で接続する(db:6379)。Compose の同一ネットワーク内で自動解決される。

4. services:db(Redis)

.yaml
db:
  image: redis:5.0.6-alpine3.10
  volumes:
    - c5kvs_redis_volume:/data
  • image:
    →公開イメージをタグ固定で使用する。
  • volumes:
    →名前付きボリューム c5kvs_redis_volume をコンテナの /data にマウントする。

補足:redis:5.0.6-alpine3.10 は学習用としては問題ないが、実用では**現行のサポートタグ(例:redis:7-alpine)**などを使う方が安全


参考

公式ドキュメントサイト

伊藤裕一著『たった1日で基本が身に付く Docker/Kubernetes超入門』技術評論社

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?