LoginSignup
0
1

【Docker】Composeファイルってどうやって書くの?

Last updated at Posted at 2023-12-16

DockerコンテナでのPostgreSQLの立ち上げを例にdocker-compose.ymlの書き方をまとめました。

この記事から得るもの

  • docker-compose.ymlの基本的な書き方

前提知識

  • dockerの基礎知識
  • 何のためにdocker-compose.ymlが必要なのか知っていること

※この記事はdocker-compose.ymlの書き方を説明したものであり、docker-compose.ymlの役割や必要性については言及していません。

最終的な成果物

この記事を最後まで読むと、以下のdocker-compose.ymlを自分で理解しながら書けるようになります。

docker-compose.yml
version: '3'
services:
  db:
    image: postgres:15-alpine
    container_name: postgres-db-qiita
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    ports:
      - "55001:5432"
    volumes:
      - ./data:/var/lib/postgresql/data
      - ./init:/docker-entrypoint-initdb.d

"version"とは

docker-compose.yml
version: '3'

docker-compose.ymlのバージョンを指定します。

※公式ドキュメントでは記述不要とありますが、実際のプロジェクトではversion指定している場合が多くあるので今回は説明のために記述しています。

"services"の中に書くもの

docker-compose.yml
services:
  <サービス名1>:
    image: 使用するコンテナイメージ名
    container_name: コンテナ名
    environment:
      コンテナで使用する環境変数
    ports:
      - localhostのポート番号:コンテナのポート番号
    volumes:
      - ホストOS内のパス:コンテナ内のパス
  
  <サービス名2>:
    ...
    ...

servicesの中には起動するサービス群を記述します。サービス名の中にネストして詳細を記述していきます。

image

docker-compose.yml
services:
  db:
    image: postgres:15-alpine

imageには使用するコンテナイメージ名を記述します。今回はpostgres:15-alpineを使用します。
コンテナイメージはdocker hubから探すことができます。

container_name

docker-compose.yml
version: '3'
services:
  db:
    image: postgres:15-alpine
    container_name: postgres-db-qiita

container_nameにはコンテナ名を記述します。
コンテナ名は自由に決めることができますが、何のコンテナかわかりやすい名前にしましょう。
記述していない場合は自動で名前が設定されます。

environment

docker-compose.yml
services:
  db:
    image: postgres:15-alpine
    container_name: postgres-db-qiita
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass

environmentはコンテナ内で使用する環境変数を記述します。今回はPostgreSQLのユーザ名とパスワードを設定しています。
POSTGRES_USERやPOSTGRES_PASSWORDはコンテナイメージによって決まった環境変数ですが、独自の環境変数を設定することもできます。

ports

docker-compose.yml
version: '3'
services:
  db:
    image: postgres:15-alpine
    container_name: postgres-db-qiita
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    ports:
      - "55001:5432"

portsではlocalhostで使用するポート番号(:の左側)とコンテナのポート番号(:の右側)を紐付けることができます。
PostgreSQLの場合はポート番号がデフォルトで5432になっています。localhostから接続するポート番号を指定したい場合に自分でポート番号を設定します。

volume

docker-compose.yml
services:
  db:
    image: postgres:15-alpine
    container_name: postgres-db-qiita
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    ports:
      - "55501:5432"
    volumes:
      - ./data:/var/lib/postgresql/data
      - ./init:/docker-entrypoint-initdb.d

volumesはホストOSのパス(:の左側)とコンテナ内のパス(:の右側
)で同期をとりたい場合に記述します。ボリュームやバインドマウントといいます。
PostgreSQLの場合データの永続化のためなどに使用することがあります。

参考記事

0
1
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
0
1