🐣

DockerイメージをECRにpushしよう!

2024/02/08に公開

こんにちは。2024年2月からトッカシステムズにジョインした佐藤です。
今回はDockerイメージをビルドしてAWSのECRにpushする手順をまとめてみたいと思います。

ECRとは?

Elastic Container Repositoryの略でAWSによるフルマネージドなリポジトリを作成できるサービスです。
Dockerイメージに特化しており、CodeBuildやCodeDeployなどのAWSサービスに連携してCI/CDパイプラインを構築することができます。

Dockerイメージを作成

こちらのサンプルアプリをイメージとして構築します。
https://github.com/docker/getting-started-app/tree/main

まずはアプリをGithubからcloneします。

$ git clone git@github.com:docker/getting-started-app.git

アプリをbuildするためのDockefileを作成します。

$ cd getting-started-app/
$ vi Dockerfile

viエディターでDockerfileに下記の内容を記述します。

# syntax=docker/dockerfile:1

FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000

Dockerfileをbuildして、runしてみます。。

$ docker build -t getting-started .
$ docker run -dp 127.0.0.1:3000:3000 getting-started
784809474fc0b58586760f55bba94a1689971ac6746d52935017bcf779f08c35

早速localhostに接続してみましょう!
http://localhost:3000/

簡易的なTodoアプリができました。

アクセスするとこんな感じ

Todoを作れます

ECRに接続する

ECRに接続しましょう。
ここでは環境にAWS CLIインストールがされていることを前提としています。

$ aws ecr get-login-password --region ap-northeast-1 \
--profile [your profile] | docker login --username AWS \
--password-stdin [your account ID].dkr.ecr.ap-northeast-1.amazonaws.com
Login Succeeded

リポジトリを作成してイメージをpush

push先のリポジトリを作成します。
ここからはAWS公式ドキュメントを参考にしています。
https://docs.aws.amazon.com/ja_jp/AmazonECR/latest/userguide/getting-started-cli.html#cli-create-repository

$ aws ecr create-repository \
    --repository-name test \
    --region ap-northeast-1 --profile [your profile]
$ docker tag test:latest [your account ID].dkr.ecr.region.amazonaws.com/test
$ docker push [your account ID].dkr.ecr.ap-northeast-1.amazonaws.com/test:latest

最後にpushしたイメージがpullできるか検証してみます。

$ docker pull [your account ID].dkr.ecr.ap-northeast-1.amazonaws.com/test:latest
latest: Pulling from test
Digest: sha256:e509072007ff495f1acd6320c88e479abb98029aa8cd92a50d35a4567662e3df
Status: Image is up to date for [your account ID].dkr.ecr.ap-northeast-1.amazonaws.com/test:latest
[your account ID].dkr.ecr.ap-northeast-1.amazonaws.com/test:latest
$ docker image ls
REPOSITORY                                               TAG       IMAGE ID       CREATED        SIZE
[your account ID].dkr.ecr.ap-northeast-1.amazonaws.com/test   latest    393e8e66bc6d   4 hours ago    223MB

無事うまくいったようです。めでたしめでたし。

まとめ

  • イメージをpushする際はAWSCLIを使用します
  • ECRリポジトリはAWSCLIによる認証で接続します
  • AWSでdocker環境を開発する際はECRでイメージ管理しましょう!

Discussion