【EC2】Amazon Linux 2 (aarch64)にDocker EngineとDocker Composeをインストール

はじめに

ARMアーキテクチャベースのAWS Graviton2プロセッサを搭載したEC2インスタンスは、従来のインスタンスタイプよりも料金が割安です。
参考: AWS Graviton

現在個人環境で使用しているEC2インスタンスのリプレースとコンテナ化を検討しており、上記インスタンス上で動作するAmazon Linux 2 (aarch64)でDocker EngineおよびDocker Composeのインストールを試してみました。

前提条件

以下条件のEC2インスタンスで検証しています。

  • インスタンスタイプ: t4g.micro
  • AMI: amzn2-ami-kernel-5.10-hvm-2.0.20230307.0-arm64-gp2
  • ネットワーク: インターネットに接続可能なパブリックサブネット
  • ソフトウェアバージョン
    • Docker Engine 20.10.17
    • Docker Compose 2.16.0

OSとカーネルのバージョンは以下の通りです。

$ cat /etc/system-release
Amazon Linux release 2 (Karoo)

$ uname -r
5.10.167-147.601.amzn2.aarch64

Docker Engine

パッケージインストール

Amazon Linux 2のExtras Libraryでインストール可能なDocker Engineのバージョンを確認します。

$ sudo amazon-linux-extras list
  0  ansible2                 available    [ =2.4.6  =2.8  =stable ]
  1  httpd_modules            available    [ =1.0  =stable ]
  2  memcached1.5             available    \
        [ =1.5.1  =1.5.16  =1.5.17 ]
  5  postgresql10             available    [ =10  =stable ]
  7  R3.4                     available    [ =3.4.3  =stable ]
  8  rust1                    available    [ =stable ]
 14  libreoffice              available    [ =5.3.6.1  =stable ]
 16  docker=latest            enabled      \
        [ =18.06.1  =18.09.9  =stable ]
 17  mate-desktop1.x          available    [ =stable ]
 18  GraphicsMagick1.3        available    \
        [ =1.3.29  =1.3.32  =1.3.34  =stable ]
 19  tomcat8.5                available    \
        [ =8.5.32  =8.5.38  =8.5.40  =8.5.42  =8.5.50  =stable ]
 20  epel                     available    [ =7.11  =stable ]
 21  testing                  available    [ =1.0  =stable ]
 22  ecs                      available    [ =stable ]
 23  corretto8                available    \
        [ =1.8.0_202  =1.8.0_212  =1.8.0_222  =1.8.0_232  =1.8.0_242
          =stable ]
 24  golang1.11               available    \
        [ =1.11.3  =1.11.11  =1.11.13  =stable ]
 25  squid4                   available    [ =4  =stable ]
 27  java-openjdk11           available    [ =11  =stable ]
 28  lynis                    available    [ =stable ]
 30  BCC                      available    [ =0.x  =stable ]
 31  nginx1                   available    [ =stable ]
 32  ruby2.6                  available    [ =2.6  =stable ]
 33  mock                     available    [ =stable ]
 34  postgresql11             available    [ =11  =stable ]
 36  python3.8                available    [ =stable ]
 37  lustre2.10               available    [ =stable ]
 38  haproxy2                 available    [ =stable ]
 39  collectd                 available    [ =stable ]
 40  R4                       available    [ =stable ]
  _  kernel-5.4               available    [ =stable ]
 42  selinux-ng               available    [ =stable ]
 43  php8.0                   available    [ =stable ]
 44  tomcat9                  available    [ =stable ]
 45  unbound1.13              available    [ =stable ]
 46  mariadb10.5              available    [ =stable ]
 47  kernel-5.10=latest       enabled      [ =stable ]
 48  redis6                   available    [ =stable ]
 49  ruby3.0                  available    [ =stable ]
 50  postgresql12             available    [ =stable ]
 51  postgresql13             available    [ =stable ]
 52  mock2                    available    [ =stable ]
 53  dnsmasq2.85              available    [ =stable ]
 54  aws-nitro-enclaves-cli   available    [ =stable ]
 55  livepatch                available    [ =stable ]
 56  kernel-5.15              available    [ =stable ]
 57  postgresql14             available    [ =stable ]
 58  firefox                  available    [ =stable ]
 59  lustre                   available    [ =stable ]
 60  php8.1                   available    [ =stable ]
 61  awscli1                  available    [ =stable ]

dockerがデフォルトでenabled状態なので、最新バージョンをインストールします。

$ sudo amazon-linux-extras install -y docker

サービス起動

Dockerサービスの自動起動有効化および起動を行います。

$ sudo systemctl enable --now docker
$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2023-03-12 02:09:26 UTC; 8s ago
     Docs: https://docs.docker.com
  Process: 1483 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS)
  Process: 1481 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS)
 Main PID: 1488 (dockerd)
    Tasks: 8
   Memory: 21.4M
   CGroup: /system.slice/docker.service
           └─1488 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/cont...
(略)

グループ設定

Amazon Linux 2のOSユーザとしてデフォルトで作成されるec2-userを使用して、root権限無しでdockerコマンドを操作できるようにします。
Docker Engineインストール時に自動的に作成されるdockerグループにec2-userを追加します。

$ sudo usermod -aG docker ec2-user
$ newgrp docker

動作確認

ec2-userにログインしている状態で以下のコマンドが実行できればインストールは完了です。

$ docker info
Client:
 Context:    default
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.17
 (略)

Docker Compose

実行ファイルの配置

Docker EngineのプラグインとしてDocker Composeの実行ファイルを配置します。
curlを使用して実行ファイルをインストールする際は、アーキテクチャがaarch64のファイルを指定するよう注意してください。

$ DOCKER_CONFIG=${DOCKER_CONFIG:-/usr/local/lib/docker}
$ sudo mkdir -p $DOCKER_CONFIG/cli-plugins
$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-aarch64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
$ sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose

動作確認

Docker Compose自体はサービスを持ちません。実行ファイルを配置した後はdockerコマンドの引数としてそのまま使用可能です。
以下コマンドが実行できればインストールは完了です。

$ docker compose version
Docker Compose version v2.16.0

参考文献

Amazon Linux 2 を実行している EC2 インスタンスに Extras Library からソフトウェアパッケージをインストールする方法を教えてください。
Docker Docs

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です