Amazon Linux 2023にDocker Composeを入れる

まずは、dnfでdockerを入れます。

$ sudo dnf -y install docker

インストールしたら、dockerのサービスを有効にします。

$ sudo systemctl enable --now docker

次に、ec2-userでdockerコマンドを利用できるようにします。

$ sudo usermod -aG docker ec2-user

一度、ログアウトして、ログインし直します。

docker composeのリリースサイトを確認して、アーキテクチャを確認して、インストールします。今回は、x86_64版をインストールします。

$ sudo mkdir -p /usr/local/lib/docker/cli-plugins
$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
$ sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose

あとは、docker composeが利用できるか確認します。

$ docker compose version

gpg: keyserver receive failed: Cannot assign requested address

docker buildしたら、Dockerfile内でのgpgコマンドが以下のようなエラーになる場合がある。

+ gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys E3FF2839C048B25C084DEBE9B26995E310250568
gpg: keybox '/tmp/tmp.SUXH22yiuV/pubring.kbx' created
gpg: keyserver receive failed: Cannot assign requested address

どうやら、Docker内でha.pool.sks-keyservers.netにIPv6で接続しにいこうとして、失敗しているらしい。この場合は、Dockerfile内のha.pool.sks-keyservers.netをipv4.pool.sks-keyservers.netに置き換えて、IPv4で接続するようにしたら解決した。

Dockerfileで特定のRUN以降のキャッシュを無効にする

docker buildでキャッシュを使わないようにするときには、–no-cacheをつければ良いけど、開発時にこまめにdocker buildしたいときにベースパッケージのインストールなど、開発に関係ないところはキャッシュを使いたいケースなどがある。なので、特定のRUN以降はキャッシュを無効にするにはどうするのが良いかを考えると、単純にARGで毎回変わるようにしておけばよい。

Dockerfileにはキャッシュを無効にしたい箇所で

ARG CACHEBUST=1
RUN git clone ...

みたいにARGを加えて、docker build時には

$ docker build -t tagname --build-arg CACHEBUST=$(date +%s) .

という感じで、–build-argオプションで日付とかで毎回変わるように値を入れておけばよい。