docker-composeとは?docker-compose.yamlのシンプルな説明

Docker

docker-composeとは

docker-composeは、Docker(Docker Engine)とは別のソフトウェアで、Dockerアプリケーションをもっと使いやすくするためのツール

通常は、Dockerでサービスを立ち上げるために、Dockerfileでイメージを作成した後、コマンドでネットワークやボリュームの設定を行う。しかし、複数のコンテナを立ち上げる必要がある時には正直面倒。。

そこで、複数のコンテナの立ち上げを簡単にしたのがdocker-composeで、YAMLファイルの設定に基づいて、サービスの作成・起動を行なってくれる

ちなみに・・・
DockerfileはDockerイメージを作るためのファイルです。

docker-compose.yamlの解説

コメントにざっと説明書いてます。

version: "3" # Compose ファイルフォーマットのバージョン指定

services:
  mongo:
    image: mongo:5.0 # 使用するイメージを指定。Dockerfileで作成したイメージを指定する場合は書き方が異なるので注意。
    restart: always # コンテナが停止したときにリスタートするか
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: password
    volumes:
      - mongodata:/var/lib/mongo

  app:
    image: node:16 # 使用するイメージ指定。イメージ検索:https://hub.docker.com/search?type=image
    env_file: .env # envファイルのパス
    environment:
      - NODE_ENV=production
    ports:
      - "8080:80" # コンテナ内のTCPポート80を、Dockerホストのポート8080にマッピング
    volumes:
      - ./src:/app
    working_dir: /app # コンテナ内での実行ディレクトリ
    command: "yarn dev"
    depends_on: # 依存するコンテナ。コンテナの起動順を制御できる。mongo→appの順に起動される。
      - mongo

volumes:
  mongodata # 名前付きボリューム

その他補足

ports

ポートやポート同士のマッピングを設定できる。

“8080:80″の場合、コンテナ内のTCPポート80を、Dockerホストのポート8080にマッピングすることを意味する。
その他、UDP接続したい場合や、IPアドレスを指定したい場合は、ここに指定例が載っている

networks

そのコンテナを接続するネットワークを指定する。
デフォルトでは、dockerインストール時に自動作成されるbridgeネットワークに接続される。

volumes

ボリュームとは、そのコンテナがマウントできるストレージ。データの保存などができる。
オプションでホスト上のパス指定や、アクセス権限などを設定できる(設定詳細)。

複数のサービスに同じボリュームを再利用する場合は、最上位のvolumesキーにおいて名前つきボリュームを定義する必要がある。また、複数のサービスで共有しない場合でも、名前付きボリュームを使用する際は、トップレベルのvolumesで定義する必要がある。

dockerにおけるマウントとは
あるストレージに接続して書き込み可能にした状態のこと。
作成と破棄が繰り返されるコンテナでも、外部にデータを保存し再利用ができる。

 

ちなみに、実際にNode.jsとMongoDB, Mongo Expressを使ったdocker-composeファイルは下記記事で公開してます。

タイトルとURLをコピーしました