Docker Composeとは|仕組み・使い方・YAMLファイルの書き方を徹底解説!

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • Docker Composeとは何か知りたい
  • docker-compose.ymlファイルの書き方について知りたい
目次

Docker Composeとは・仕組み

Docker Composeとは、複数のコンテナを一気に実行・停止・破棄できるツールです。

複数のコンテナで構成されたアプリケーションを構築する際、コマンド文を1つずつ実行していくと、コマンド入力に手間を感じるでしょう。加えて、コマンド入力文字が複雑化することでタイプミスが増加したり、エラー遭遇率も高まります。

このような課題を解決してくれるのがDocker Composeです。

複数コンテナを有するアプリケーション構築に際して、関連するコマンド文を1つのテキストファイルに書き込むことで、一気に実行・停止・破棄ができるようになるのです。これがDocker Composeのメリットです。

Docker Composeでは、アプリケーション構築に関連するコマンド文をYAML(YAML Ain’t a Markup Language)形式のテキストファイルdocker-compose.ymlに記述し、そのファイルをコマンドプロンプト(Windows)やターミナル(Mac)から読み込み実行することで、ファイルの中身を一括実行・停止・削除できるようになります。

【参考】Docker ComposeとDockerfileの違い

よく比較される「Docker Compose」と「Dockerfile」についても言及します。それぞれ役割が明確に異なります。以下、違いを押さえておきましょう。

Docker Compose

Docker Composeとは、「docker run ○○○」コマンドの集合体と捉えることができます。Docker Composeをもとにイメージをダウンロードしたり、コンテナ・ネットワーク・ボリュームの作成ができます。

Dockerfile

Dockerfileとは、Dockerイメージの作成を目的としたファイルです。そのため、ネットワークやボリュームが作成できない点がDocker Composeとの違いです。Dockerfileについて詳しく知りたい方はこちらの記事もご覧ください。

Docker Compose|使い方

Docker Composeを活用するには、まず、①ホスト側にYAMLファイルを格納します。この時、YAMLファイルのファイル名は決まっており、必ず「docker-compose.yml」にする必要があります。

続いて、②コマンドプロンプトやターミナルにコマンドを入力し、Docker ComposeからDocker Engineに対して命令を送ります。これにより、Docker Engine上にコンテナと周辺環境が作成されるのです。

Docker Compose|YAMLファイルの記述方法

Docker ComposeのYAMLファイルの書き方について解説していきます。

ファイル形式

Docker Compose活用時に読み込むYAMLファイルについて、ファイルの拡張子は.ymlとし、ファイル名はdocker-compose.ymlとする必要があります。

拡張子.yml(YAML形式)
ファイル名称docker-compose.yml

YAMLファイルの記述方法

YAMLファイルは、最初にDocker Composeのバージョン「version」を記述します。

続いて、「services」と呼ばれるコンテナの集合体、ネットワーク「networks」、ボリューム「volumes」の順で記載します。これがYAMLファイルの大枠となります。

YAMLファイルのひな型文

YAMLファイルは、「version」「services」「networks」「volumes」の4つの大項目から構成されます。

version: "3"
services:
  コンテナ1:
  コンテナ2:
  ...
networks:
  ネットワーク名1:
  ネットワーク名2:
  ...
volumes:
  ボリューム名1:
  ボリューム名2:
  ...

それぞれの大項目について1つずつ詳しく見ていきましょう。

バージョン(version)

「version」では、Docker Composeで使用するバージョンを指定します。

version: "3"

サービス(services)

サービスとは、コンテナの集合体を指します。

サービス項目内には、コンテナ作成に必要な設定情報を中項目として定義していきます。

services内のひな型文

services:
  コンテナ1:
    image: <イメージ名>
    container_name: <コンテナ名>
    networks:
        - <ネットワーク名>
    volumes:
        - <ボリューム名>
    ports:
        - <ポート番号>
    environment:
        <キー1>: <バリュー1>
        <キー2>: <バリュー2>
        ...
    depends_on:
        - <依存関係にあるサービス>
    restart: <コンテナ停止時の対応>
    command: <実行するコマンド>
  コンテナ2:
  ...

services内の項目一覧

項目意味
image指定するイメージ
build指定するDockerfile
container_name指定するコンテナ名
networks接続するネットワーク
volumesマウント設定
volumes_fromコンテナ間でマウントする際、マウント先のコンテナを指定
portsマッピングするポート番号
environment設定する環境変数
depends_on依存関係にある別のサービス
restartコンテナが停止した際の再試行設定
– always(必ず再起動)
– no (何もしない)
command実行するコマンド
env_file実行時に読み込みたい環境設定ファイル
entrypoint実行時に上書きするENTRYPOINT
loggingログを出力するパス
external_links設定する外部リンク
network_modeネットワークモード設定

ネットワーク(networks)

networksの大項目直下には、作成するネットワーク名をそれぞれ定義します。

networks:
  ネットワーク名1:
  ネットワーク名2:

ボリューム(volumes)

volumesの大項目直下には、作成するボリューム名をそれぞれ定義します。

volumes:
  ボリューム名1:
  ボリューム名2:
  ...

【参考】YAMLファイルの記述ルール

YAMLファイルを記述する際、準拠すべきルールがいくつか存在します。ルールを間違えると、コマンド実行の際にエラーが発現するため、必ず目を通しておきましょう!

  • 「version」→「services」→「networks」→「volumes」の順で記述すること
  • 項目名の直後には「:」をつけた上で、後続に任意の値または文字列を記述すること
  • 「:」の後ろには空白を含めること(改行する場合は不要)
  • 大項目と中項目の関係は、スペースを字下げして表すこと
  • スペースで字下げする際、同じ数・倍数のスペースを入れること
  • コメント文は先頭に「#」をつけること
  • 文字列はシングルクォート’ ‘ または ダブルクォート” “で囲むこと

Docker Composeの操作コマンド

コマンドプロンプト(Windows)やターミナル(Mac)から実行するDocker Composeの代表的な操作コマンドについて解説します。

一括作成・実行(UP)

YAMLファイルの内容に従い、イメージをダウンロードしたり、コンテナ・ボリューム・ネットワークを作成・実行する場合、次のコマンドを実行します。

docker-compose -f <YAMLファイルのパス> up -d
  • YAMLファイルのディレクトリは、-fオプションで指定します。
  • -dオプションは、バックグラウンドで実行の際に指定します。

一括停止・削除(Down)

YAMLファイルの内容に従い、コンテナやネットワーク停止・削除する場合、次のコマンドを実行します。

docker-compose -f <YAMLファイルのパス> down

※上記の場合、ボリュームとイメージは削除されません。併せてボリュームとイメージも削除したい場合、以下のオプション追加した上でコマンド実行する必要があります。

docker-compose -f <YAMLファイルのパス> down --rmi all --volumes
–rmi <all or local>イメージを削除する場合に指定。
– all:利用した全イメージ削除
– local:imageにカスタムタグがないイメージのみ削除
–volumes, -vYAMLファイルのvolumesに記述のボリューム削除
–remove-orphansYAMLファイルのサービスに定義していないコンテナも削除

【参考】Docker関連記事・おすすめ学習法

【厳選】Dockerの学習におすすめの教材

Dockerについて詳しく学習したいという方向けにおすすめの教材をご紹介します。厳選した教材をこちらにまとめていますため併せてご覧下さい。

Docker関連記事一覧

当サイトではDockerに関する記事を多数投稿しています。是非ご覧ください。

【Docker】記事タイトル
Dockerとは|仮想化技術との違い・基本的仕組み・できること
Dockerイメージ・コンテナの仕組みと違い
イメージの取得・一覧表示・削除
コンテナの実行・一覧表示・停止・削除
Dockerfileとは|書き方・コマンド一覧・イメージ作成手順
イメージ作成・DockerHubへの公開手順
マウント方法|ボリューム・バインド・tmpfsマウント
Docker Compose|概要・使い方・YAMLファイルの記述方法
【実践】Docker Composeを用いてWordpress構築

最後に

この記事が気に入ったら
フォローしてね!

目次