Amazon ECR でのライフサイクルを通じたイメージの移動 - Amazon ECR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon ECR でのライフサイクルを通じたイメージの移動

Amazon ECR を初めて使用する場合は、Docker CLI と で次の手順を使用してサンプルイメージ AWS CLI を作成し、デフォルトのレジストリで認証し、プライベートリポジトリを作成します。次に、 にイメージをプッシュし、プライベートリポジトリからイメージをプルします。サンプルイメージを使い終わったら、サンプルイメージとリポジトリを削除します。

AWS Management Console の代わりに を使用するには、 AWS CLI「」を参照してくださいイメージを保存する Amazon ECR プライベートリポジトリの作成

さまざまな AWS SDKs、IDE ツールキット、Windows PowerShell コマンドラインツールなど、 AWS リソースの管理に使用できるその他のツールの詳細については、http://aws.amazon.com/tools/ を参照してください。

前提条件

最新の AWS CLI と Docker がインストールされておらず、すぐに使用できる状態でない場合は、次のステップに従ってこれらのツールの両方をインストールします。

のインストール AWS CLI

Amazon ECR AWS CLI で を使用するには、 AWS CLI 最新バージョンをインストールします。詳細については、AWS Command Line Interface ユーザーガイドの「AWS Command Line Interfaceのインストール」を参照してください。

Docker をインストールする

Docker は、Ubuntu のような最新の Linux ディストリビューションから macOS や Windows まで、さまざまなオペレーティングシステムで使用できます。特定のオペレーティングシステムに Docker をインストールする方法の詳細については、Docker インストールガイド を参照してください。

Docker を使用するには、ローカルの開発システムは必要ありません。Amazon EC2 をすでに使用している場合は、Amazon Linux 2023 インスタンスを起動し、Docker をインストールして開始できます。

Docker をインストール済みの場合は、この手順をスキップして「ステップ 1: Docker イメージを作成する」に進んでください。

Amazon Linux 2023 AMI を使用して Amazon EC2 インスタンスに Docker をインストールするには
  1. 最新の Amazon Linux 2023 AMI を使用してインスタンスを起動します。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「インスタンス起動ウィザードを使用したインスタンスの起動」を参照してください。

  2. インスタンスに接続します。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Linux インスタンスへの接続」を参照してください。

  3. インスタンスでインストールされているパッケージとパッケージキャッシュを更新します。

    sudo yum update -y
  4. 最新の Docker Community Edition パッケージをインストールします。

    sudo yum install docker
  5. Docker サービスを開始します。

    sudo service docker start
  6. ec2-userdocker グループに追加すると、sudo を使用せずに Docker コマンドを実行できます。

    sudo usermod -a -G docker ec2-user
  7. ログアウトし、再びログインして、新しい docker グループアクセス権限を取得します。これは、現在の SSH ターミナルウィンドウを閉じて、新しいウィンドウでインスタンスに再接続することで達成できます。新しい SSH セッションには適切な docker グループ権限があります。

  8. ec2-usersudo を使用せずに Docker コマンドを実行できることを確認します。

    docker info
    注記

    場合によっては、Docker デーモンにアクセスするための ec2-user に対するアクセス権限を提供するため、インスタンスを再起動する必要があります。次のエラーが表示された場合は、インスタンスを再起動してください。

    Cannot connect to the Docker daemon. Is the docker daemon running on this host?

ステップ 1: Docker イメージを作成する

このステップでは、シンプルなウェブアプリケーションの Docker イメージを作成し、ローカルシステムまたは Amazon EC2 インスタンスでテストします。

シンプルなウェブアプリケーションの Docker イメージを作成するには
  1. Dockerfile という名前のファイルを作成します。Dockerfile は、Docker イメージに使用する基本イメージと、そのイメージにインストールして実行するものを記述するマニフェストです。Dockerfile の詳細については、「Dockerfile リファレンス」を参照してください。

    touch Dockerfile
  2. 前の手順で作成した Dockerfile を編集し、以下のコンテンツを追加します。

    FROM public.ecr.aws/amazonlinux/amazonlinux:latest # Install dependencies RUN yum update -y && \ yum install -y httpd # Install apache and write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure apache RUN echo 'mkdir -p /var/run/httpd' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/httpd' >> /root/run_apache.sh && \ echo '/usr/sbin/httpd -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh

    この Dockerfile は、Amazon ECR パブリックでホストされているパブリック Amazon Linux 2 イメージを使用します。RUN の手順により、パッケージキャッシュが更新され、ウェブ サーバー用のいくつかのソフトウェアがインストールされてから、「Hello World!」 のコンテンツがウェブサーバーのドキュメントルートに書き込みされます。EXPOSE の命令はコンテナ上のポート 80 を公開し、CMD の命令はウェブサーバーを起動します。

  3. Dockerfile から Docker イメージを作成します。

    注記

    Docker の一部のバージョンでは、下に示す相対パスの代わりに、次のコマンドで Dockerfile への完全パスが必要になる場合があります。

    docker build -t hello-world .
  4. コンテナイメージを一覧表示します。

    docker images --filter reference=hello-world

    出力:

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              e9ffedc8c286        4 minutes ago       194MB
  5. 新しく構築されたイメージを実行します。-p 80:80 オプションは、コンテナ上の公開されたポート 80 をホストシステム上のポート 80 にマッピングします。docker run の詳細については、「Docker run reference」を参照してください。

    docker run -t -i -p 80:80 hello-world
    注記

    Apache ウェブサーバーからの出力はターミナルウィンドウに表示されます。"Could not reliably determine the fully qualified domain name" メッセージは無視できます。

  6. ブラウザーを開き、Docker を実行している、コンテナのホストサーバーを参照します。

    • EC2 インスタンスを使用している場合、これはサーバーの [Public DNS] 値であり、SSH でインスタンスに接続するときに使用するアドレスと同じです。インスタンスのセキュリティグループでポート 80 上の受信トラフィックを許可していることを確認します。

    • Docker をローカルに実行している場合は、ブラウザで http://localhost/ を参照します。

    • Windows または Mac コンピュータdocker-machineで を使用している場合は、 docker-machine ip コマンドで Docker をホストしている VirtualBox VM の IP アドレスを見つけ、machine-name を、使用している Docker マシンの名前に置き換えます。

      docker-machine ip machine-name

    ウェブページに「Hello, World!」が確認できます。表示されます。

  7. [Ctrl + C] キーを押して、Docker コンテナを停止します。

ステップ 2: デフォルトレジストリに対して認証する

をインストールして設定したら AWS CLI、デフォルトのレジストリに対して Docker CLI を認証します。これにより、docker コマンドは Amazon ECR を使用してイメージをプッシュおよびプルできます。は、認証プロセスを簡素化するget-login-passwordコマンド AWS CLI を提供します。

を使用して Amazon ECR レジストリに対して Docker を認証するには get-login-password、 aws ecr get-login-password コマンドを実行します。認証トークンを docker login コマンドに渡すとき、ユーザー名の AWS 値を使用し、認証先の Amazon ECR レジストリの URI を指定します。複数のレジストリに対して認証する場合は、レジストリごとにコマンドを繰り返す必要があります。

重要

エラーが発生した場合は、 AWS CLIの最新バージョンをインストールまたはアップグレードします。詳細については、AWS Command Line Interface ユーザーガイドの「AWS Command Line Interfaceのインストール」を参照してください。

  • get-login-password (AWS CLI)

    aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
  • Get-ECRLoginCommand (AWS Tools for Windows PowerShell)

    (Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

ステップ 3: レポジトリを作成する

これで Amazon ECR にプッシュするイメージが用意できたので、それを保持するレポジトリを作成する必要があります。この例では、hello-repository イメージを後でプッシュする、hello-world:latest と呼ばれるレポジトリを作成します。レポジトリを作成するには、次のコマンドを実行します。

aws ecr create-repository \ --repository-name hello-repository \ --region region

ステップ 4: イメージを Amazon ECR にプッシュする

ここで、前のセクションで作成した Amazon ECR リポジトリにイメージをプッシュできます。docker CLI を使用して、次の前提条件が満たされた後にイメージをプッシュします。

  • の最小バージョンdockerは 1.7 です。

  • Amazon ECR 認証トークンは で設定されていますdocker login

  • Amazon ECR リポジトリが存在し、リポジトリにプッシュするアクセス権がユーザーにある。

これらの前提条件が満たされたら、アカウントのデフォルトレジストリで新しく作成されたレポジトリにイメージをプッシュできます。

イメージにタグを付けて Amazon ECR にプッシュするには
  1. ローカルに保存したイメージをリストし、タグを付けてプッシュするイメージを識別します。

    docker images

    出力:

    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    hello-world         latest              e9ffedc8c286        4 minutes ago       241MB
  2. リポジトリにプッシュするイメージにタグを付けます。

    docker tag hello-world:latest aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository
  3. イメージをプッシュします。

    docker push aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository

    出力:

    The push refers to a repository [aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository] (len: 1)
    e9ae3c220b23: Pushed
    a6785352b25c: Pushed
    0998bf8fb9e9: Pushed
    0a85502c06c9: Pushed
    latest: digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636EXAMPLE size: 6774

ステップ 5: Amazon ECR からイメージをプルする

イメージが Amazon ECR リポジトリにプッシュされたら、他の場所からイメージをプルできます。docker CLI を使用して、次の前提条件が満たされた後にイメージをプルします。

  • の最小バージョンdockerは 1.7 です。

  • Amazon ECR 認証トークンは で設定されていますdocker login

  • Amazon ECR リポジトリが存在し、リポジトリからプルするアクセス許可がユーザーにある。

これらの前提条件が満たされたら、イメージをプルできます。Amazon ECR からサンプルイメージをプルするには、次のコマンドを実行します。

docker pull aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository:latest

出力:

latest: Pulling from hello-repository
0a85502c06c9: Pull complete
0998bf8fb9e9: Pull complete
a6785352b25c: Pull complete
e9ae3c220b23: Pull complete
Digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636EXAMPLE
Status: Downloaded newer image for aws_account_id.dkr.region.amazonaws.com/hello-repository:latest

ステップ 6: イメージを削除する

いずれかのリポジトリにイメージが不要になった場合は、そのイメージを削除できます。イメージを削除するには、イメージが存在するリポジトリと、イメージの imageTagまたは imageDigest値を指定します。次の例では、イメージタグ を持つhello-repositoryリポジトリ内のイメージを削除しますlatest。リポジトリからサンプルイメージを削除するには、次のコマンドを実行します。

aws ecr batch-delete-image \ --repository-name hello-repository \ --image-ids imageTag=latest \ --region region

ステップ 7: リポジトリを削除する

イメージのリポジトリ全体が不要になった場合は、リポジトリを削除できます。次の例では、 --forceフラグを使用して、イメージを含むリポジトリを削除します。イメージ (およびその中に含まれるすべてのイメージ) を含むリポジトリを削除するには、次のコマンドを実行します。

aws ecr delete-repository \ --repository-name hello-repository \ --force \ --region region