8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

docker composeとdocker-composeの違いは?Compose V1/V2の違いを整理する

8
Last updated at Posted at 2024-04-26

この記事は2024年に公開した内容を、現在のDocker Composeの状況に合わせて見直したものです。

docker-composeはCompose V1、docker composeはCompose V2以降で利用するコマンドです。

現在、Compose V1はメンテナンスされていないため、新しく利用する場合はdocker composeを使用します。

Docker Composeを使っていると、

docker-compose up

と

docker compose up

という2種類の書き方を見かけます。

「ハイフンがあるかないかだけ?」と思ったので、違いを整理します。

Docker Composeとは

Docker Composeは、複数のコンテナで構成されるアプリケーションを定義・実行するためのツールです。

Composeファイルに、

  • services
  • networks
  • volumes

などを定義して、複数のコンテナをまとめて管理できます。

たとえば、

docker compose up

を実行すると、Composeファイルに定義したサービスを作成・起動できます。

docker-composeとdocker composeの違い

結論からいうと、

コマンド Compose
docker-compose Compose V1
docker compose Compose V2以降

です。

Compose V1

Compose V1はPythonで実装された独立したツールで、

docker-compose

というコマンドで実行していました。

docker-compose up
docker-compose down
docker-compose ps

のように使います。

Compose V1は現在メンテナンスされておらず、Compose V2へ置き換えられています。

Compose V2

Compose V2ではDocker CLIに統合され、

docker compose

という形式になりました。

docker compose up
docker compose down
docker compose ps

となります。

つまり、

Compose V1
docker-compose up

        ↓

Compose V2以降
docker compose up

という変化です。

なぜハイフンがなくなった?

Compose V1では、docker-composeはDocker CLIとは別のコマンドでした。

docker
docker-compose

Compose V2ではDocker CLIのプラグインとして統合されたため、

docker compose

というDockerのサブコマンドとして実行する形になりました。

他のDockerコマンドと並べてみると分かりやすいです。

docker image
docker container
docker network
docker compose

単にコマンド名からハイフンを削除したわけではなく、Docker CLIへ統合されたことによる違いでした。

コンテナ名にも違いがあった

Compose V1からV2への移行では、生成されるコンテナ名の区切り文字にも変更がありました。

Compose V1では、

myproject_web_1

のようにアンダースコア(_)が使われていました。

Compose V2では、

myproject-web-1

のようにハイフン(-)が使われます。

これは、アンダースコアがDNSのホスト名として有効な文字ではないことなどを考慮した変更です。

Compose V2には、V1との互換性を考慮するための--compatibilityオプションもあります。

ただし、基本的にはV2以降の挙動を前提として移行する方がよさそうです。

Composeファイルのversionとの違い

ここで混乱しやすいのが、

version: "3.8"

など、Composeファイルに書かれていたversionです。

これは、

Compose V1 / V2

というCompose CLIのバージョンとは別の話です。

以前はComposeファイルにも、

2.x
3.x

などのファイルフォーマットのバージョンがありました。

現在はこれらがCompose Specificationへ統合されています。

そのため、現在のComposeではトップレベルのversionによってファイルフォーマットを選択する必要はありません。

services:
  web:
    image: nginx

のように記述できます。

Compose V2とversion: "2"は別のものです。

  • Compose V2 → Compose CLIの世代
  • version: "2" → 以前のComposeファイルフォーマット

と分けて考えると理解しやすいです。

現在はどちらを使う?

現在、新しくDocker Composeを利用する場合は、

docker compose

を使用します。

Compose V1の、

docker-compose

はメンテナンスが終了しています。

古い記事や既存プロジェクトではdocker-composeという記述を見ることがありますが、

docker-compose
      ↓
Compose V1時代のコマンド

docker compose
      ↓
現在利用するコマンド

と考えると分かりやすいです。

Compose V5は?

Docker Composeには2025年にCompose V5も登場しています。

ただし、Compose V5でもCLIのコマンドは、

docker compose

のままです。

Compose V5はCompose V2と機能的には同じで、大きな違いは公式のGo SDKが導入されたことです。

そのため、通常Docker Composeを利用するときに、

docker-compose

へ戻ったり、

docker compose5

のような新しいコマンドを使ったりするわけではありません。

まとめ

docker-composeとdocker composeの違いを整理すると、

docker-compose docker compose
世代 Compose V1 Compose V2以降
実装 Python Go
Docker CLI 独立したコマンド Docker CLIに統合
現在 メンテナンス終了 こちらを使用

最初は、

docker-compose
docker compose

= ハイフンの有無だけ?

と思っていましたが、

Compose V1
独立したdocker-composeコマンド
        ↓
Compose V2以降
Docker CLIに統合
        ↓
docker compose

という経緯があることが分かりました。

古い記事を読むときにも、docker-composeが出てきたら「Compose V1の情報かもしれない」と意識しておくとよさそうです。

参考

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?