こんにちは、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】Dockerfileとは|書き方・コマンド一覧・イメージ作成手順を徹底解説
「Dockerfile」について知りたい方向けに「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, -v | YAMLファイルのvolumesに記述のボリューム削除 |
–remove-orphans | YAMLファイルのサービスに定義していないコンテナも削除 |
【参考】Docker関連記事・おすすめ学習法
【厳選】Dockerの学習におすすめの教材
Dockerについて詳しく学習したいという方向けにおすすめの教材をご紹介します。厳選した教材をこちらにまとめていますため併せてご覧下さい。
Docker・Kubernetesの学習におすすめ入門本・動画教材7選|マイクロサービス基盤「コンテナ」の理解促進
次世代のアプリケーションアーキテクチャとして注目度の高いマイクロサービスの基盤であるコンテナ技術Dockerおよびコンテナオーケストレーション技術のKubernetesについて詳しく学びたい方向けに、厳選したおすすめ教材を紹介します。
Docker関連記事一覧
当サイトではDockerに関する記事を多数投稿しています。是非ご覧ください。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら