LoginSignup
5
5

More than 3 years have passed since last update.

Amazon EC2 (Arm版)でdocker-composeを動作検証

Last updated at Posted at 2021-04-20

はじめに

従来のMacよりも、圧倒的にコスパが高いとされているM1 Macが市場に出回り、ARMアーキテクチャを採用したCPUの導入事例も増えてきました。

私もこの流れに乗って、Amazon EC2(Arm版)でdocker-composeが正常に動作するのか検証しました。

今回の記事では、検証したことを記録していきます。

M1 Macでは、x86_64アーキテクチャ用のコンテナも動作しているので、個人的はEC2(Arm版)でも動いてくれることに少し期待しています。

共有事項

この記事から得られること

  • Arm版CPUにdocker-composeコマンドを入れて、Armアーキテクチャ用のコンテナをビルド、実行することができる。

  • Amazon EC2(Arm版)でIntel用のコンテナの検証結果、過程が分かる。

事前に分かっていること

  • x86_64環境でDockerfileをビルドしたコンテナをECRにpushしておき、M1 Macでコンテナをpullして使うことが出来る

  • 今回動かしたいIntel用のコンテナがt3a.mediumインスタンス(Intel版)で動いている

やりたいこと

  • x86アーキテクチャのコンテナをAWS Graviton環境のt4g.mediumインスタンス(Arm版)で動かす

  • 検証結果できなかったとしても、その過程を整理する

結論

  • Pythonのpackage manager pipを介する必要があるが、docker-composeはインストールできる
  • x86_64アーキテクチャ用のコンテナはEC2のArmインスタンスでビルド、実行はできない。(2021年4月時点)

記録

docker-composeコマンドをインストール

curlコマンドを使って、ソースファイルをビルドして、docker-composeコマンドをインストールしてみます。

x86_64環境の場合

$ sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   633  100   633    0     0  18085      0 --:--:-- --:--:-- --:--:-- 18085
100 11.6M  100 11.6M    0     0  39.9M      0 --:--:-- --:--:-- --:--:-- 58.8M
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
docker-compose version 1.27.4, build 12345678

aarch64環境の場合

$ sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100     9  100     9    0     0     37      0 --:--:-- --:--:-- --:--:--    37
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
/usr/local/bin/docker-compose: line 1: Not: command not found

curlコマンドを使って、ソースファイルをビルドして、docker-composeコマンドをインストールするプロセスだと、下記のようなエラーが出てしまいます。

原因は、アーキテクチャが違うため扱っているバイナリも異なっています。

$ docker-compose --version
/usr/local/bin/docker-compose: line 1: Not: command not found

Arm版のEC2インスタンスにdocker-composeコマンドを入れる解決策は下記です。(Raspberry Piも同様にdocker-composeコマンドを入れることができます。)

$ uname -s -m
Linux aarch64
$ cat /etc/system-release
Amazon Linux release 2 (Karoo)

$ sudo yum install -y python37 python3-devel.$(uname -m) libpython3.7-dev libffi-devel openssl-devel 
$ sudo yum groupinstall -y "Development Tools" # need gcc and friends
$ sudo python3 -m pip install -U pip  # make sure pip is up2date
$ python3 -m pip install docker-compose 
$ docker-compose --version
docker-compose version 1.27.4, build unknown

Pythonのpackage manager pipを使って、手動でdocker-composeがインストールすることが出来ました。

docker-composeコマンドがインストール出来たところで、x86_64アーキテクチャのコンテナが動作するのか検証してみましょう!

結果

  • x86_64アーキテクチャのコンテナは、純粋なaarch64のLinux環境では、動作しませんでした。
    (マルチアーキテクチャのコンテナは、aarch64にも対応していることもあり、動作しました。)

さいごに

今後は、Dockerコンテナなどで、複数のCPUアーキテクチャを考慮する場面が出てくると思うので、その知見を貯めていきたいと考えています。

最後まで読んでいただきまして、ありがとうございます。

5
5
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
5
5