はじめに
従来の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アーキテクチャを考慮する場面が出てくると思うので、その知見を貯めていきたいと考えています。
最後まで読んでいただきまして、ありがとうございます。