Docker Compose V2

Docker Compose V2

Docker は WordPress のテーマ開発に使っているだけですのであまり、いや、まったく詳しくはないのですが、Docker Compose に V2 云々という記事が目につきましたので少し調べてみました。

01Docker Compose V2

Docker や Docker Compose とは何かといったことは書いていませんし、書けません(笑)。それまで LAMP(Apache…)でローカルサーバー環境を構築してきたものが Docker 一発でできることを知り、こりゃ便利だと、この 1、2年使ってきた程度です。

Docker Compose も「クィックスタート: Compose と WordPress」を参考にして WordPress を立ち上げているレベルです。

で、最近 Docker Compose が V2 になったという記事を目にし(かなり遅いのですが…)こりゃいかんと少し調べた結果です。

02現在の環境

まず自分の環境を調べてみます。

$ docker version
Client: Docker Engine - Community
 Version:           25.0.2
 API version:       1.44
 Go version:        go1.21.6
 Git commit:        29cf629
 Built:             Thu Feb  1 00:23:19 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          25.0.2
  API version:      1.44 (minimum version 1.24)
  Go version:       go1.21.6
  Git commit:       fce6e0c
  Built:            Thu Feb  1 00:23:19 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.28
  GitCommit:        ae07eda36dd25f8a1b98dfbf587313b99c0190bb
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

まず、Docker Engine のバージョンです。OS は Ubuntu ですので特に気にすることなく最新バージョンになっています。

$ docker-compose version
docker-compose version 1.26.0, build d4451659
docker-py version: 4.2.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
$ docker compose version
Docker Compose version v2.24.5

続いて、Docker Compose のバージョンです。すでに V2 がインストールされています。V1 は自分でインストールしたものですが、V2 は Docker と同時にインストールされるようです。

なお、V2 の起動コマンドはハイフンなしの docker compose です。

03Docker Compose V1 と V2

詳しくは Docker Docs にありますが、V1 は 2023年7月でサポートが終了しています。

最新の Docker Desktop を使用している場合は、すでに V2 がデフォルトになっており、コマンドの docker-compose も V2 のエイリアスになっているとあります。

Linux にも Docker Desktop があるようですが、私の場合は Docker を自分で入れており、その場合は、Docker をリポジトリからバージョンアップしていれば自動で入りますし、そうでなければ手作業でインストールすることになります。

整理しますと、Compose V1 は単独のプログラムでしたが、Compose V2 は Docker CLI に統合されているということです。言語も Python から Docker と同じ Go に変わっています。

その他、変更点が Compose V2 への移行 に書かれていますが、基本的には下位互換が図られているようです。私の場合で言えば、docker-compose.yml がそのまま使えるかどうかの確認で問題なさそうです。

04V2 の Compose ファイル(YAML)

実際に試してみます。

実際に使っているのはこのままではありませんが、クィックスタート: Compose と WordPress にある docker-compose.yml で試してみます。

$ docker-compose up -d
Creating network "sample_default" with the default driver
Creating sample_db_1 ... done
Creating sample_wordpress_1 ... done
$ docker-compose down
Stopping sample_wordpress_1 ... done
Stopping sample_db_1        ... done
Removing sample_wordpress_1 ... done
Removing sample_db_1        ... done
Removing network sample_default

V1 のコマンド docker-compose up -d で立ち上げ、確認後停止、削除しています。もちろん問題ありません。続いて、V2 で立ち上げてみます。

$ docker compose up -d
[+] Running 2/3
 ⠧ Network sample_default        Created         2.8s 
 ✔ Container sample-db-1         Started         0.5s 
 ✔ Container sample-wordpress-1  Started         2.6s 
$ docker compose down
[+] Running 3/3
 ✔ Container sample-wordpress-1  Removed         1.3s 
 ✔ Container sample-db-1         Removed         1.7s 
 ✔ Network sample_default        Removed         0.1s 

問題ないようです。ただし、これも下位互換で実行されているわけですので、この際 V2 しように変更しておこうと思います。

05V2 の Compose ファイルは compose.yaml

V2 の推奨 Composeファイルは compose.yaml です。下位互換として docker-compose.yml も使えますが、両方存在する場合は compose.yaml が読み込まれます。

また、docker-compose.yml の最初に書いていた

version: '3' # 非推奨

は非推奨になりました。バージョンを書く必要はなくなりました。その他については問題はなさそうです。ですので、Docker で WordPress を立ち上げる V2 compose.yaml は、

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:

ということになります。