Docker の使い方(その6:Docker Compose)

この記事は最終更新日から 2年以上 が経過しています。

前回、「Docker の使い方(その5:ネットワーク)」の続きです。今回は Docker Compose についてです。

Docker Compose とは?

ここまで Docker の基本的な操作について説明してきました。 コンテナを使ってアプリケーションを起動するためには、 コンテナイメージからコンテナを起動し、そのコンテナに必要な環境変数を指定し、ボリュームを作成し、ネットワークを作成し、ポートを公開する必要があります。

お気付きになったことはありませんか? 必要な設定が多いのです。 これらの設定を1つ1つ行っていくのはかなり大変です。 1つのコンテナを使った環境ですら作るのが大変なのに、複数のコンテナを使って連携させる環境を作るならなおさらです。 そこで登場するのが、Docker Compose です。

Docker Compose を使用すると、コンテナの構成に関する様々な内容を、構成ファイル(Compose ファイル)という形で一括して記載することができます。 その Compose ファイルを使うことによって、複雑な環境を簡単に作成したり削除したりすることができるようになります。 複数のコンテナを一括して操作できるようになりますし、他のユーザーさんと環境を共有することも簡単になるでしょう。

Compose ファイル

Compose ファイルは、docker-compose.yml という名前のファイルです。 拡張子からわかるように YAML 形式になります。 YAML 形式なのでコメントも書けます。

このファイルをプロジェクトのルートディレクトリなどに作成します。 Git などのバージョン管理ツールに登録しておくと良いでしょう。 そうすることで、そのファイルを使って他のユーザーさんも同じ環境を作れるようになります。

Compose ファイルにはいくつかバージョンがありますので、作成する際はバージョンを定義することから始めましょう。 その次に、作成したいサービス(コンテナ)の一覧を定義します。

デフォルトでは、専用のネットワークが自動的に作成されます。 定義したコンテナ同士はデフォルトで接続できる状態になりますので、それで問題ない場合はネットワークを自分で定義する必要はありません。

Compose ファイルの詳しい書き方については、ここでは記載しません。 あまりにも大量にありますので、公式のドキュメントを見てもらった方が良いと思います。

書式と簡単な例だけ記載しておきます。

書式
version: "バージョン番号"

services:
  コンテナ構成の一覧
例:Compose ファイルのバージョン「3.7」の形式で、
Apache HTTPサーバーと、MySQLサーバーを使用して2つのコンテナを作成する
docker-compose.yml
version: "3.7"

services:

  # httpd コンテナ
  # コンテナイメージ「httpd:2.4」をベースとする
  # ポートマッピングはホスト側ポート「8080」、コンテナ側ポート「80」とする
  httpd:
    image: httpd:2.4
    ports:
      - 8080:80

  # mysql コンテナ
  # コンテナイメージ「mysql:5.7」をベースとする
  # ポートマッピングはホスト側ポート「3306」、コンテナ側ポート「3306」とする
  # 名前付きボリューム「todo-mysql-data」を使用する
  mysql:
    image: mysql:5.7
    ports:
      - 3306:3306
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data:

構成の一覧を表示する

構成の一覧を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。

Docker Desktop で構成の一覧を表示する

Docker Desktop で構成の一覧を表示するには、Docker Desktop の左メニューの「Containers / Apps」をクリックします。 コンテナの一覧も一緒に表示されます。

ls.png

コマンドで構成の一覧を表示する

コマンドで構成の一覧を表示するには、docker compose ls コマンドを使用します。 オプション無しで実行した場合は、動作中の構成のみ表示され、停止中の構成は表示されません。

書式
docker compose ls
出力内容
NAME                STATUS
test-proj           running(2)

全ての構成の一覧を表示する

停止中の構成も含めた全ての構成の一覧を表示するには、 docker compose ls コマンドに -a オプションを付けて実行します。

書式
docker compose ls -a

新しい構成を作成する

新しい構成を作成するには、docker compose create コマンドと docker compose up コマンドの2つがあります。 この2つのコマンドの違いは、新しい構成を作成した後に、構成の起動を行うかどうかです。

コマンド 説明
docker compose create コマンド 新しい構成を作成し、その構成を起動しません
docker compose up コマンド 新しい構成を作成し、その構成を起動します

新しい構成を作成する

新しい構成を作成するには、 Compose ファイルを置いてあるディレクトリで docker container create コマンドを実行します。

docker container create コマンドは、新しい構成を作成しますが、その構成の起動は行いません。 構成の作成のみを行います。

書式
docker compose create

新しい構成を作成して起動する

新しい構成を作成して起動するには、 Compose ファイルを置いてあるディレクトリで docker compose up コマンドを実行します。

docker compose up コマンドは、新しい構成を作成し、その構成を起動します。 構成を作成した後にいちいち構成を起動させるのがメンドウな場合は、こちらのコマンドを使った方が便利です。 docker compose create コマンドの後に docker compose start コマンド(後述)を実行するのと同じです。

-d オプションを付けると、全てのコンテナがデタッチモード(バックグラウンド)で起動します。 忘れずに付けておきましょう。

書式
docker compose up -d

構成を起動する

既に作成されている構成を起動します。 構成を起動するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。

Docker Desktop で構成を起動する

Docker Desktop で構成を起動するには、Docker Desktop の「Containers / Apps」から起動したい構成の「START」ボタンをクリックします。

start.png

コマンドで構成を起動する

コマンドで構成を起動するには、 Compose ファイルを置いてあるディレクトリで docker compose start コマンドを使用します。

書式
docker compose start

構成のログ表示する

構成したコンテナの中で何が起こっているのかを確認したい場合は、構成のログを表示して確認しましょう。 全てのコンテナで発生したログが一か所にまとめて表示されるので便利です。 構成のログを表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。

Docker Desktop で構成のログを表示する

Docker Desktop で構成のログを表示するには、Docker Desktop の「Containers / Apps」からログを表示したい構成をクリックします。

logs.png logs2.png

コマンドで構成のログを表示する

コマンドで構成のログを表示するには、 Compose ファイルを置いてあるディレクトリで docker compose logs コマンドを使用します。

書式
docker compose logs

ログをリアルタイムで表示する

ログをリアルタイムで表示するには、 Compose ファイルを置いてあるディレクトリで docker compose logs コマンドに -f オプションを付けて実行します。

書式
docker compose logs -f

構成を停止する

構成を停止するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。

Docker Desktop で構成を停止する

Docker Desktop でコンテナを停止するには、Docker Desktop の「Containers / Apps」から停止したい構成の「STOP」ボタンをクリックします。

stop.png

コマンドで構成を停止する

コマンドで構成を停止するには、 Compose ファイルを置いてあるディレクトリで docker compose stop コマンドを使用します。

書式
docker compose stop

構成を再起動する

構成を再起動するには、 Compose ファイルを置いてあるディレクトリで docker compose restart コマンドを使用します。

書式
docker compose restart

構成を削除する

構成を削除するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。

Docker Desktop で構成を削除する

Docker Desktop で構成を削除するには、Docker Desktop の「Containers / Apps」から削除したい構成の「DELETE」ボタンをクリックします。 構成が動作中の場合でも削除できるので注意してください。

delete.png

コマンドで構成を削除する

コマンドで構成を削除するには、 Compose ファイルを置いてあるディレクトリで docker compose rm コマンドを使用します。 構成を削除するには、その構成を先に停止しておく必要があります。

書式
docker compose rm

構成の停止と削除を同時に行う

構成を削除するには、その構成を先に停止しておく必要がありますが、 Compose ファイルを置いてあるディレクトリで docker compose down コマンドを実行すると、 構成の停止と削除を1つのコマンドで同時に行うことができます。

書式
docker compose down

参考サイト

関連記事

最近では、アプリケーションの実行環境の構築に Docker を使うことも珍しくなくなりました。Docker は便利ではあるのかもしれませんが、難しく感じて敬遠されている人もいるのではないでしょうか。その感覚はおそらく間違っていません。実際、知れば知るほど奥が深い技術だと感じてしまいます。もはや沼というか深淵を覗いている ...
前回、「Docker の使い方(その1:概要)」の続きです。今回はコンテナについてです。コンテナの一覧を表示するコンテナの一覧を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。Docker Desktop でコンテナの一覧を表示するDocker Desktop でコンテ ...
前回、「Docker の使い方(その2:コンテナ)」の続きです。今回はコンテナイメージについてです。コンテナイメージの一覧コンテナイメージの一覧を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。Docker Desktop でコンテナイメージの一覧を表示するDocker ...
前回、「Docker の使い方(その3:コンテナイメージ)」の続きです。今回はボリュームについてです。ボリュームコンテナは作り直すと中身が初期状態に戻ってしまいます。ですが、コンテナの中のアプリケーションが作成したファイルなど、残しておいてほしいファイルもあると思います。例えばデータベースに保存されているデータなどです ...
前回、「Docker の使い方(その4:ボリューム)」の続きです。今回はネットワークについてです。複数のコンテナを連携させるこれまでは1つのコンテナについて説明してきましたが、複数のコンテナを連携させたい場合はどうすればよいでしょうか。例えば、Webサーバーコンテナと、DBサーバーコンテナを通信させたいような場合です。 ...
Docker は、構成を気軽に組み替えたりできるので、とても便利ですよね。Windows で Docker を使って開発している方も多いと思うのですが、個人的にはどうしても気が乗らない理由がありました。それは処理速度です。遅い。遅すぎる。めちゃくちゃ遅い。つらい。耐えられない。。。ということで調査しました。いろいろと調 ...

記事検索

最新記事

人気記事

RSSフィード

お知らせ

フィードバック

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

匿名でフィードバックする
匿名でフィードバックする

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

なお、このフォームから入力された内容について、管理者から返信はできませんので注意してください。 もし、管理者からの返信が必要であれば、X(Twitter) もしくは、お問い合わせより、お願いします。

  • フィードバックの送信が完了しました。