

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

# Amazon ECR におけるライフサイクルを通じたイメージの移行
<a name="getting-started-cli"></a>

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

 AWS マネジメントコンソール の代わりに を使用するには AWS CLI、「」を参照してください[イメージを保存するための Amazon ECR プライベートリポジトリの作成](repository-create.md)。

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

## 前提条件
<a name="getting-started-cli-prereqs"></a>

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

### のインストール AWS CLI
<a name="cli-install"></a>

Amazon ECR AWS CLI で を使用するには、 AWS CLI 最新バージョンをインストールします。詳細については、AWS Command Line Interface ユーザーガイドの「[AWS Command Line Interfaceのインストール](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)」を参照してください。

### Docker をインストールする
<a name="cli-install-docker"></a>

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

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

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

**Amazon Linux 2023 AMI を使用して Amazon EC2 インスタンスに Docker をインストールするには**

1. 最新の Amazon Linux 2023 AMI を使用してインスタンスを起動します。詳細については、「Amazon EC2 ユーザーガイド」の「[インスタンスの起動](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/launching-instance.html)」を参照してください。

1. インスタンスに接続します。詳細については、「Amazon EC2 ユーザーガイド」の「[Linux インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)」を参照してください。

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

   ```
   sudo yum update -y
   ```

1. 最新の Docker Community Edition パッケージをインストールします。

   ```
   sudo yum install docker
   ```

1. Docker サービスを開始します。

   ```
   sudo service docker start
   ```

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

   ```
   sudo usermod -a -G docker ec2-user
   ```

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

1. `ec2-user` が `sudo` を使用せずに Docker コマンドを実行できることを確認します。

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

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

## ステップ 1: Docker イメージを作成する
<a name="cli-create-image"></a>

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

**シンプルなウェブアプリケーションの Docker イメージを作成するには**

1. `Dockerfile` という名前のファイルを作成します。Dockerfile は、Docker イメージに使用する基本イメージと、そのイメージにインストールして実行するものを記述するマニフェストです。Dockerfile の詳細については、「[Dockerfile リファレンス](https://docs.docker.com/engine/reference/builder/)」を参照してください。

   ```
   touch Dockerfile
   ```

1. 前の手順で作成した `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\$1」 のコンテンツがウェブサーバーのドキュメントルートに書き込みされます。`EXPOSE` の命令はコンテナ上のポート 80 を公開し、`CMD` の命令はウェブサーバーを起動します。

1. <a name="sample-docker-build-step"></a>Dockerfile から Docker イメージを作成します。
**注記**  
Docker の一部のバージョンでは、下に示す相対パスの代わりに、次のコマンドで Dockerfile への完全パスが必要になる場合があります。

   ```
   docker build -t hello-world .
   ```

1. コンテナイメージを一覧表示します。

   ```
   docker images --filter reference=hello-world
   ```

   出力:

   ```
   REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
   hello-world         latest              e9ffedc8c286        4 minutes ago       194MB
   ```

1. 新しく構築されたイメージを実行します。`-p 80:80` オプションは、コンテナ上の公開されたポート 80 をホストシステム上のポート 80 にマッピングします。**docker run** の詳細については、「[Docker run reference](https://docs.docker.com/engine/reference/run/)」を参照してください。

   ```
   docker run -t -i -p 80:80 hello-world
   ```
**注記**  
Apache ウェブサーバーからの出力はターミナルウィンドウに表示されます。"`Could not reliably determine the fully qualified domain name`" メッセージは無視できます。

1. ブラウザーを開き、Docker を実行している、コンテナのホストサーバーを参照します。
   + EC2 インスタンスを使用している場合、これはサーバーの [**Public DNS**] 値であり、SSH でインスタンスに接続するときに使用するアドレスと同じです。インスタンスのセキュリティグループでポート 80 上の受信トラフィックを許可していることを確認します。
   + Docker をローカルに実行している場合は、ブラウザで [http://localhost/](http://localhost/) を参照します。
   + Windows または Mac コンピューターで **docker-machine** を使用している場合は、**docker-machine ip** コマンドを使用して Docker のホスト VirtualBox VM の IP アドレスを見つけ、*machine-name* を、使用中の Docker マシンの名前に置き換えます。

     ```
     docker-machine ip machine-name
     ```

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

1. [**Ctrl \$1 C**] キーを押して、Docker コンテナを停止します。

## ステップ 2: リポジトリを作成する
<a name="cli-create-repository"></a>

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

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

## ステップ 3: デフォルトレジストリに対して認証する
<a name="cli-authenticate-registry"></a>

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

get-login-password を使用して Amazon ECR レジストリに対して Docker を認証するには、**aws ecr get-login-password** コマンドを実行します。認証トークンを **docker login** コマンドに渡すとき、ユーザー名に `AWS` 値を使用し、認証先の Amazon ECR レジストリの URI を指定します。複数のレジストリに対して認証する場合は、レジストリごとにコマンドを繰り返す必要があります。
**重要**  
エラーが発生した場合は、 AWS CLIの最新バージョンをインストールまたはアップグレードします。詳細については、*AWS Command Line Interface ユーザーガイド*の「[AWS Command Line Interfaceのインストール](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)」を参照してください。
+ [get-login-password](https://docs.aws.amazon.com/cli/latest/reference/ecr/get-login-password.html) (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](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-ECRLoginCommand.html) (AWS Tools for Windows PowerShell)

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

## ステップ 4: イメージを Amazon ECR にプッシュする
<a name="cli-push-image"></a>

ここで、前のセクションで作成した 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
   ```

1. リポジトリにプッシュするイメージにタグを付けます。

   ```
   docker tag hello-world:latest aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository
   ```

1. イメージをプッシュします。

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

   出力:

   ```
   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 からイメージをプルする
<a name="cli-pull-image"></a>

イメージを 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: イメージを削除する
<a name="cli-delete-image"></a>

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

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

## ステップ 7: リポジトリを削除する
<a name="cli-delete-repository"></a>

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

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