Intel MacでもM1 Macでも使えるDockerイメージを作りたい(awsのECRに登録編)

2022年1月18日

経緯

以前の記事では、Docker hubに登録するという方法をご紹介しました。

今回はawsのECRに登録するという手順の方を紹介してみようと思います。
※この記事では、aws cliが使える状態まで来ている前提で書いていきます。
以下の手順はDocker hub編と同じなので省略します。

  • Dockerfileを作成
  • Dockerfileの中でmysqlをコンパイルする処理を書く
  • コンパイルする部分以外は極力Docker hubで公式に配られているmysqlのDockerfileに寄せる

最後のプッシュの部分はプッシュ先をECRにしますので、ここの手順が変わります。

  • DockerイメージをIntel Mac(x86_64)とM1 Mac(arm64)両方作成してDocker hubにプッシュする

成果物

https://github.com/gendosu/docker-mysql

手順

M1 Macだけだとちょっと難しいかなという事で
M1 MacとIntel Macを今回は使っていく事にします。
まずはどちらで操作しても問題ないですが
awsのECRへのログインをdocker loginで済ませる所から始めます。

aws ECRにDocker loginする

aws ECRを開き、mysqlリポジトリを作成を押します。

とりあえずリポジトリ名だけ入れて作成

プッシュコマンドの表示というボタンで、作成したmysqlというリポジトリに対してプッシュするためのコマンドが表示されます。

開いたモーダル画面の以下の部分のコマンドを実行すると、Docker loginが完了します。

ログイン出来たので、このモーダルは用済みなので閉じます。

aws ECR上のリポジトリのタグ名戦略を考える

各プラットフォームごとにイメージをアップする必要があるので、以下のような想定行きます。

  • mysql:5.7.31
  • mysql:5.7.31-x86_64
  • mysql:5.7.31-aarch64

arm64版のDockerイメージをプッシュする

M1 Mac側で操作

M1 Mac側では基本的にはaarch64イメージを扱うという事で
普通に
docker pull xxx/mysql:5.7.31
を実行すると、arm64版のmysql:5.7.31がpullされてきます。

このイメージは、Docker hub編で作成したイメージになります。

aws ECRにプッシュする際のリポジトリ名でタグを作成します。

docker tag xxx/mysql:5.7.31 xxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/mysql:5.7.31-aarch64

プッシュします。

docker push xxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/mysql:5.7.31-aarch64

x86_64版のDockerイメージをプッシュする

Intel Mac側で操作

docker pull xxx/mysql:5.7.31
を実行すると、x86_64版のmysql:5.7.31がpullされてきます。

docker tag xxx/mysql:5.7.31 xxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/mysql:5.7.31-x86_64

プッシュします。

docker push xxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/mysql:5.7.31-x86_64

イメージの確認

マニフェストの作成

この状態で、それぞれのプラットフォーム名を指定してプルすることは出来ますが、Docker hub編同様、
同一のリポジトリ名でM1もIntelもプル出来るようにしたいのでマニフェストを作成します。

docker manifest create xxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/mysql:5.7.31 \
xxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/mysql:5.7.31-x86_64 \
xxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/mysql:5.7.31-aarch64

マニフェストのプッシュ

docker manifest push xxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/mysql:5.7.31

イメージの確認

これで、aws ECRからDockerイメージをプルする時にM1 Macだと5.7.31-aarch64がダウンロードされ、
Intel Macだと5.7.31-x86_64がダウンロードされるようになります。

Docker,Mac,MySQL,PC関連

Posted by GENDOSU