docker-composeとは?基礎知識と8つのファイル項目を細かく解説!
- システム
エンジニア - docker-composeとは、どのようなことができるのでしょうか?
- プロジェクト
マネージャー - 複数のdockerコンテナを容易に管理できるツールです。
docker-composeとは?
docker-composeは、複数のdockerコンテナを定義・実行するツールです。複雑なアプリケーションを構築するときには、複数のdockerコンテナを用意し、コンテナ間で通信させることがよくあります。しかし、複数のコンテナを管理することは容易ではありません。docker-composeを使うことで、複数のコンテナを容易に管理することができます。
設定方法
docker-composeでは、管理する複数のコンテナの詳細などを、docker-compose.yamlというyamlファイルで定義します。そうすることにより、複数のコンテナを同時に実行することが可能になります。完成したdocker-compose.yamlファイルがあるディレクトリで、docker-compseの各コマンドを実行することで、アプリケーションの起動・終了・削除などができます。
基本的なyamlファイルの記述方法
下記のリンクにある例を用いて、基本的なyamlファイルの書き方について説明します。簡単に以下の表にまとめたうえで、それぞれの項目について詳しく説明しています。
項目説明
version | docker-composeのバージョン |
services | 管理する各コンテナ |
services.〇〇 | コンテナの名称 |
services.〇〇.build | コンテナのDockerfileがあるパス |
services.〇〇.ports | コンテナに開けるポート番号 |
services.〇〇.volumes | コンテナとホストマシン間のボリュームマウント |
services.〇〇.links | コンテナを他のサービスにリンク |
volumes | トップレベルのボリュームマウント |
version
docker-composeには、バージョンという概念が存在します。2020年4月時点での最新バージョンは3です。バージョンによってyamlの書き方が異なることや、同じyamlでも異なる挙動をすることがあります。バージョンの違いには十分に注意しましょう。
services
docker-composeで管理する各アプリケーションは、サービスと呼ばれます。1つのサービスに対して1つのdockerコンテナが対応します。サービスは複数定義できるので、servicesは複数の子要素を持ちます。今回の例では、webとredisがサービスとして定義されています。
services.〇〇
各サービスの名称です。今回の例では、webとredisがサービスの名称です。サービスの名称は単なる名前だけでなく、コンテナ間が通信する際のエンドポイントの役目も果たします。例えば、webコンテナ内から「ping redis」と実行すると、redisコンテナと通信していることが確認できます。
services.〇〇.build
各サービスで起動するdockerコンテナのDockerfileのパスです。相対パスを指定する場合は、yamlファイルからの相対パスで考えます。webには「.」が指定されているので、yamlファイルと同じディレクトリに、webのコンテナ情報を記述したDockerfileが存在する、ということになります。
services.〇〇.ports
コンテナがコンテナ外(ホストマシン)と通信する際に公開するポートです。「ホストマシンのポート:コンテナのポート」というように、コロンで区切って記述します。今回の例では、webに「5000:5000」と記述されているので、ホストマシンでlocalhost:5000にアクセスすることで、コンテナのポート5000にアクセスすることができます。
services.〇〇.volumes
ホストマシンとコンテナ内でボリュームマウントをする際に使用します。先程のportsと同様に「ホストマシンのパス:コンテナのパス」というように、コロンで区切って記述します。今回の例では、webに「.:/code」と記述されているので、ホストマシンのyamlファイルがあるディレクトリが、コンテナの/codeにマウントされます。
services.〇〇.links
コンテナを他のサービスにリンクさせます。docker-composeのバージョン2では、depends_onというものと同じ役割をします。これらは、コンテナ間の起動の順番を制御します。今回の例では、webはlinksにredisを指定しているので、webはredisが起動した後に起動します。起動順が変わるだけで、サービスの準備が整うまで待つわけではないので、注意が必要です。
volumes
services.〇〇.volumesでは各コンテナに対してマウントしますが、トップレベルにvolumesを置くことで、複数のコンテナでマウントするディレクトリを共有することができます。複数のコンテナにマウントしたい場合は、それぞれのサービスの中で記述せずにこちらを採用しましょう。
docker-composeの操作
docker-composeには複数のコマンドがあり、それぞれを適切に実行することにより便利な操作を可能にします。以下では、よく行う操作について、それに対応するコマンドを説明します。
サービスをビルドする
最初に、docker-compose.yamlファイルがあるディレクトリで、以下のコマンドを実行します。$ docker-compose buildこのコマンドは、各サービスをビルドするコマンドです。Dockerfileをイメージ化などが行われます。Dockerfileでなく、使用するイメージを直接指定した場合などは、プルなども行います。
コンテナを作成する
build後は以下のコマンドを実行します。$ docker-compose createこのコマンドは、ビルドされたサービスを元にコンテナを作成するコマンドです。ここで1つ注意したいことは、このコマンドはコンテナを作成するだけで、コンテナの起動はしません。起動するには、次に説明するコマンドを実行する必要があります。
サービスを開始する
最後に以下のコマンドでサービスを開始します。$ docker-compose startこのコマンドにより、yamlに記載したサービス群が一斉に起動します。注意点は、既にコンテナが存在している状態でないと、エラーを吐いてしまうという点です。必ずcreateコマンドでコンテナを作成してから、startコマンドでサービスを開始しましょう。
サービスを確認する
起動したサービスを確認するには、以下のコマンドを実行します。$ docker-compose psこのコマンドを実行すると、docker-composeが管理している各コンテナの状態などを確認することができます。各コンテナが起動しているか、どのポートを開いているかなどを確認したい場合に重宝します。
ログを確認する
起動したサービスが出力するログを確認したい場合は、以下のコマンドを実行します。$ docker-compose logsこのコマンドは、サービス全てのログをまとめて出力するので、少し見づらい場合があります。特定のサービスのログを確認したい場合は、logsの後にサービス名を追加して実行することで、そのサービスだけのログを出力できます。
サービスを停止する
startコマンドによって開始したサービスを停止するには、以下のコマンドを実行します。$ docker-compose stopサービスを起動したままにすると、もちろんホストマシンに負荷がかかります。必要のない場合はstopを実行することで、負荷を軽減できます。また、このコマンドはサービスを停止するだけなので、再度startコマンドを実行することで、すぐにサービスを再開できる便利なコマンドです。
コンテナを削除する
コンテナを削除するには以下のコマンドを実行します。$ docker-compose downこのコマンドは、サービスの削除(コンテナの削除)を行います。一度削除してしまうと、サービスのビルドからやり直す必要があり時間がかかるので、このコマンドを実行する際は十分に注意しましょう。
- システム
エンジニア - これならdocker-composeの操作ができそうな気がします!
- プロジェクト
マネージャー - そうですね。複数のコンテナの管理がしやすくなるので、ぜひ導入してみましょう!
docker-composeを導入してみよう
docker-composeの設定方法や、実際の操作について解説してきました。docker-composeを利用することで、複数のコンテナの管理がしやすくなります。docker-composeの導入を検討している場合は、ぜひこの記事を参考に実際に取り入れてみましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)