13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ARM系マシンでx86系のDockerイメージを作成する方法

Posted at

はじめに

先日AWS公式ハンズオンとなる「AWS ハンズオン資料」の「Amazon Elastic Container Service 入門 コンテナイメージを作って動かしてみよう」を試そうとした際、エラーでECSのサービスがデプロイできない問題が発生したため、記事に残しておこうと思います。

エラー内容

「はじめに」で紹介したサイトのアジェンダの「サービスの作成」でECSサービスのデプロイを行った際、以下のようなエラーが表示されました。

h4b-ecs-service のデプロイ中にエラーが発生しました
Resource handler returned message: "Error occurred during operation 'ECS Deployment Circuit Breaker was triggered'." (RequestToken: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, HandlerErrorCode: GeneralServiceException)

エラーの原因

ハンズオンではAWS上でオンライン開発環境が利用できるCloud9を使って、Cloud9のインスタンス上でコンテナイメージを作成して、そのイメージをECSにデプロイする手順となっていましたが、私が実施した際はCloud9環境を用意してイメージ作成するのも面倒だったので、自分のPC上でイメージを作成したのが原因でした。

その時使用したPCはM2MacBook Airだったので、CPUアーキテクチャはARM系、デプロイ先のECSx86系となることからアーキテクチャの違いが原因となったようです。

対処方法

docker buildする際に--platformオプションでCPUアーキテクチャを指定するかDockerfileFROMでCPUアーキテクチャを指定することでビルド時に指定のCPUアーキテクチャでイメージを作成できます。

以下、AWS公式ハンズオン内で実行しているコマンドをCPUアーキテクチャ指定のコマンドに置き換えた場合の例。

docker_buildコマンドでCPUアーキテクチャを指定する場合の例
docker build --platform linux/amd64 -t xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/h4b-ecs-helloworld:0.0.1 .
DockerfileでCPUアーキテクチャを指定する場合の例
FROM --platform=linux/amd64 ubuntu:18.04
(省略)

AWS公式ハンズオンでは実行しておりませんが、docker-composeで実行する場合も以下のようにplatformで指定することでCPUアーキテクチャを指定できるようです。

docker-compose.ymlでCPUアーキテクチャを指定する場合の例
services:
  web:
    image: ubuntu:18.04
    platform: linux/amd64
(省略)

CPUアーキテクチャが違うのにビルドできる理由

M2MacBook AirDockerを実行するために、Docker Desktopをインストールしていますが、Docker DesktopはCPUをエミュレーションできるQEMUが含まれています。

デフォルトではdocker buildを実行するPCのCPUアーキテクチャでビルドされますが、コマンド指定やDockerfileでCPUアーキテクチャを指定することで、ビルド時に指定のCPUアーキテクチャでビルドできます。

おわりに

開発を行う場合はUnix系コマンドがネイティブで使える分WindowsよりMacのほうがやりやすいと私は感じていますが、ARM系になってCPUアーキテクチャの違いで苦しめられることも増えているので、たまにIntelMacが恋しくなる今日このごろ。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?