Intel MacでもM1 Macでも使えるDockerイメージを作りたい(awsのECRに登録編)
経緯
以前の記事では、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がダウンロードされるようになります。