compose コマンドと docker-compose の互換性

Docker CLI の compose コマンドは、 docker-compose コマンドとフラグの大部分をサポートします。このコマンドは、いずれ docker-comopse を置き換えるものとして期待されています。

compose コマンド内で利用できない Compose 機能が見つかれば、 Compose GitHub リポジトリに issue を作成してください。そうすると、私たちが優先度付けします。

未実装のコマンドやフラグ

以下のコマンドは未実装ですが、後に実装される可能性があります。みなさんの利用例で、各コマンドの優先度が高ければ、私たちに教えてください。

compose build --memory :このオプションは buildkit で未実装です。フラグはサポートしていますが、既存の Compose の使用を中断しないよう、隠されています。何ら影響も与えません。

実装されないフラグ

以下のリストに含まれるフラグは、 Docker CLI の Compose 内でサポートする計画がありません。理由は既に docker-compose で非推奨になっているだけでなく、Docker CLI の Compose には対応する機能が無いからです。

  • compose ps --filter KEY-VALUE - service コマンドに相当する機能が無く、かつ、 docker-compose でも対応するドキュメントが無いため

  • compose rm --all - docker-compose で非推奨

  • compose scal - docker-compose で非推奨(代わりに compose up --scale を使う)

グローバル フラグ:

  • --compatibility は Docker Compose V2 で廃止済み。つまり、 V2 で実行するコマンドの挙動は V1 を使うのと同じ。

    • 1つの違いは、コンテナ名の単語をつなぐ文字。 V1 は _ をセパレータとして使ったが、 V2 では - を使い、ホスト名に近い名前を維持する。つまり --compatibility Docker Compose は、再び _ を使う。どちらか一方に固定しないと、 Docker Compose はコンテナをサービスの実態として認識できなくなる。

config コマンド

config コマンドが意図するのは、 Docker Compose によって実行している、実際のプロジェクトが使う設定情報の表示です。知っての通り、 Compose ファイルの一部には短い形式と長い形式があります。たとえば、 ports エントリです。以下の例では、 config コマンドによって ports セクションが拡張されているのが分かります。

docker-compose.yml:

services:
  web:
    image: nginx
    ports:
      - 80:80

これを使い、 $ docker compose config で帰ってくる結果を見ると、

services:
  web:
    image: nginx
    networks:
      default: null
    ports:
    - mode: ingress
      target: 80
      published: 80
      protocol: tcp
networks:
  default:
    name: workspace_default

このような結果にあるように、 Docker Compose がプロジェクトを実行するためにつかわれる、全ての設定情報を表示します。

Compose v2 で導入された新しいコマンド

コピー

cp コマンドはサービス コンテナとローカル ファイルシステム間で、ファイルやフォルダをコピーする目的があります。 このコマンドは双方向のコマンドであり、 fromto でサービス コンテナから、あるいは、サービス コンテナにコピーできます。

サービス コンテナからローカル ファイルシステムにファイルをコピーします:

$ docker compose cp my-service:~/path/to/myfile ~/local/path/to/copied/file

また、ローカル ファイルシステム上から、サービスとして実行中の全コンテナにもコピーできます:

$ docker compose cp --all ~/local/path/to/source/file my-service:~/path/to/copied/file

一覧

ls コマンドは Compose プロジェクトの一覧を表示する目的があります。デフォルトでは、このコマンドは実行中のプロジェクトのみ表示します。フラグを追加すると、停止しているプロジェクトも表示でき、次の例にあるように json 形式に出力の状態を変えれば、フィルタも可能です。

$ docker compose ls --all --format json

Compose コマンドで --project-name を使う

Compose の GA(一般提供開始)バージョンは、いずれも同じようにコマンドを実行できます。

  • プロジェクトの compose ファイルを含むディレクトリの外

  • あるいは、 --file フラグで Compose のパスを指定しない場合

  • あるいは、 --project-directory フラグでプロジェクトのディレクトリを指定しない場合

Compose プロジェクトを一度読み込めば、 -p--project-name を使ってプロジェクトを参照できます。

$ docker compose -p my-loaded-project restart my-service

このオプションは startstoprestartdown でも機能します。

参考

Compose command compatibility with docker-compose

https://docs.docker.com/compose/cli-command-compatibility/