Amazon Linux 2023 ARM64 EC2にDockerとDocker Composeをインストールする方法
要約: Amazon Linux 2023 ARM64(aarch64) EC2でdnfを使ってDockerをインストールし、サービスの有効化とdockerグループの権限設定までをまとめます。Docker Composeプラグインのインストールとバージョン固定、permission denied・arm64 manifestエラーの解決、ログ容量の制限とディスク整理まで併せて扱います。

概要
Amazon Linux 2023ベースのEC2でDockerとDocker Composeを動作させるための最小限のインストール手順をまとめます。
パッケージのインストール
dnfはRHEL系(例:Fedora、RHEL、Amazon Linux 2023)で使用されるパッケージマネージャーです。
Ubuntu/Debianのapt-getやCentOSのyumと同じ役割を果たします。
リポジトリからパッケージをダウンロードしてインストールし、依存関係を自動的に処理します。
パッケージの更新
1sudo dnf update -y
Dockerのインストール
1sudo dnf install -y docker
基本設定
Dockerサービスの有効化
Dockerデーモン(dockerd)が実際に実行されていないと、dockerコマンドは動作しません。
enable --nowは今すぐ起動し、再起動後も自動起動するように登録します。
1sudo systemctl enable --now docker
現在のユーザーにDocker権限を付与
デフォルトでは、Dockerソケット(/var/run/docker.sock)にはroot権限が必要です。
dockerグループにユーザーを追加すると、毎回sudoを付けなくてもDockerを使用できます。
newgrp dockerは現在のセッションにグループ変更を即座に反映するためのコマンドです。
ログアウト後に再ログインしても同様に適用されます。
1sudo usermod -aG docker $USER
2newgrp docker
Dockerの動作確認
1docker version
Amazon Linux 2023環境では、Dockerのインストールだけでdocker composeが一緒に提供される場合があります。
1docker compose version
Docker Composeを別途インストールする必要がある場合
docker compose versionが失敗した場合は、以下の方法でCLIプラグインをインストールします。
ディレクトリの作成
1mkdir -p ~/.docker/cli-plugins
インストール:ARM64(aarch64)
1curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-aarch64 \
2 -o ~/.docker/cli-plugins/docker-compose
x86_64の場合
1curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 \
2 -o ~/.docker/cli-plugins/docker-compose
実行権限の追加
1chmod +x ~/.docker/cli-plugins/docker-compose
Docker Composeのインストール確認
1docker compose version
よくある問題
permission denied while trying to connect to the Docker daemon socket
usermod -aG dockerは実行したものの、現在のシェルにグループが反映されていない状態です。
1# 現在のシェルが認識しているグループを確認
2id -nG
リストにdockerがなければ、newgrp dockerで現在のシェルに反映します。newgrpはそのシェルにのみ適用されるため、新しくSSHセッションを開くか、ログアウト後に再接続すれば以降は自動的に適用されます。
no matching manifest for linux/arm64/v8
ARM64インスタンスでamd64専用イメージを実行したときに発生します。A1やGraviton系でよく遭遇します。
まず、そのイメージがarm64に対応しているか確認します。
1docker manifest inspect {イメージ名} | grep architecture
選択肢は3つあります。
- arm64に対応したタグを使用する。ほとんどの公式イメージはマルチアーキテクチャに対応しています。
docker buildxで自分でマルチアーキテクチャイメージをビルドする。--platform linux/amd64でエミュレーション実行する。QEMUエミュレーションが必要でパフォーマンス低下が大きいため、一時的な対処としてのみ使用します。
再起動後にコンテナが起動しない
systemctl enable --now dockerはDockerデーモンのみを自動起動します。コンテナには別途再起動ポリシーを指定する必要があります。
1docker run -d --restart unless-stopped {イメージ名}
Composeを使う場合は、サービスにrestart: unless-stoppedを指定します。
運用前に整理しておくとよいこと
コンテナログ容量の制限
デフォルトのjson-fileドライバーは、ログを無制限に蓄積します。これはEC2のディスクが一杯になるよくある原因です。
1# /etc/docker/daemon.json
2{
3 "log-driver": "json-file",
4 "log-opts": {
5 "max-size": "10m",
6 "max-file": "3"
7 }
8}
設定後、デーモンを再起動します。すでに実行中のコンテナには適用されないため、再作成する必要があります。
1sudo systemctl restart docker
Docker Composeのバージョン固定
先ほど使用したreleases/latestのアドレスは、ダウンロードする時点によって異なるバージョンを取得します。再現可能な環境が必要な場合は、バージョンを固定します。
1# リリースページで確認したバージョンを指定します
2COMPOSE_VERSION={使用するバージョン}
3
4curl -SL https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-aarch64 \
5 -o ~/.docker/cli-plugins/docker-compose
6
7chmod +x ~/.docker/cli-plugins/docker-compose
8docker compose version
ディスクの整理
1# 使用量の確認
2docker system df
3
4# 未使用リソースの整理
5docker system prune
6
7# 未使用イメージまで整理
8docker system prune -a
prune -aは、実行中でないコンテナが参照しているイメージまで削除します。運用サーバーでは、削除対象を確認してから実行してください。