

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

# CloudShell 内で Docker コンテナを構築して Amazon ECR リポジトリにプッシュする
<a name="tutorial-docker-cli"></a>

このチュートリアルでは、 で Docker コンテナを定義して構築 AWS CloudShell し、Amazon ECR リポジトリにプッシュする方法について説明します。

## 前提条件
<a name="prerequisites-docker-cli"></a>
+ コンテナを作成して Amazon ECR リポジトリにプッシュするためのアクセス許可が必要です。Amazon ECR のリポジトリの詳細については、「*Amazon ECR ユーザーガイド*」の「[Amazon ECR プライベートリポジトリ](https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html)」を参照してください。Amazon ECR にイメージをプッシュするために必要なアクセス許可の詳細については、「*Amazon ECR ユーザーガイド*」の「[イメージをプッシュするために必要な IAM アクセス許可](https://docs.aws.amazon.com/AmazonECR/latest/userguide/image-push.html#image-push-iam)」を参照してください。

## チュートリアルの手順
<a name="tutorial-docker-cli-steps"></a>

次のチュートリアルでは、CloudShell インターフェイスを使用して Docker コンテナを構築し、Amazon ECR リポジトリにプッシュする方法について説明します。

1. ホームディレクトリに新しいフォルダを作成します。

   ```
   mkdir ~/docker-cli-tutorial
   ```

1. 作成したフォルダに移動します。

   ```
   cd ~/docker-cli-tutorial
   ```

1. 空の Dockerfile を作成します。

   ```
   touch Dockerfile
   ```

1. テキストエディタ (`nano Dockerfile` など) を使用し、ファイルを開いて次の内容を貼り付けます。

   ```
   # Dockerfile
   
   # Base this container on the latest Amazon Linux version
   FROM public.ecr.aws/amazonlinux/amazonlinux:latest
   
   # Install the cowsay binary
   RUN dnf install --assumeyes cowsay
   
   # Default entrypoint binary
   ENTRYPOINT [ "cowsay" ]
   
   # Default argument for the cowsay entrypoint
   CMD [ "Hello, World!" ]
   ```

1. これで、Dockerfile を構築する準備が整いました。`docker build` を実行してコンテナを構築します。コンテナには、将来のコマンドで使用できるように、入力しやすい名前をタグ付けします。

   ```
   docker build --tag test-container .
   ```

   末尾のピリオド (`.`) を必ず含めます。  
![\[AWS CloudShell内で実行する Docker ビルドコマンドの画像。\]](http://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/images/docker-cli-tutorial%20-%201-docker-build.png)

1. これで、コンテナをテストし、 AWS CloudShellで正しく動作することを確認できます。

   ```
   docker container run test-container
   ```  
![\[内の docker コンテナ実行コマンドの画像 AWS CloudShell\]](http://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/images/docker-cli-tutorial%20-%202-docker-run.png)

1. Docker コンテナが正常に動作することを確認したら、これを Amazon ECR リポジトリにプッシュする必要があります。既存の Amazon ECR リポジトリがある場合は、このステップをスキップできます。

   次のコマンドを実行して、このチュートリアル用の Amazon ECR リポジトリを作成します。

   ```
   ECR_REPO_NAME=docker-tutorial-repo
   aws ecr create-repository --repository-name ${ECR_REPO_NAME}
   ```  
![\[内に Amazon ECR リポジトリを作成するために使用されるコマンドの画像 AWS CloudShell\]](http://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/images/docker-cli-tutorial%20-%203-ecr-create-repo%20(redacted).png)

1. Amazon ECR リポジトリを作成したら、これに Docker コンテナをプッシュできます。

   次のコマンドを実行して、Docker の Amazon ECR サインイン認証情報を取得します。

   ```
   AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query "Account" --output text)
   ECR_URL=${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com
   aws ecr get-login-password | docker login --username AWS --password-stdin ${ECR_URL}
   ```  
![\[Docker の Amazon ECR サインイン認証情報の取得に使用するコマンドの画像。\]](http://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/images/docker-cli-tutorial%20-%204-docker-login.png)
**注記**  
**AWS\$1REGION** 環境変数を CloudShell に設定していないか、他の AWS リージョンのリソースとやり取りする場合は、次のコマンドを実行します。  

   ```
   AWS_REGION=<your-desired-region>
   ```

1. イメージにターゲットの Amazon ECR リポジトリのタグを付け、そのリポジトリにイメージをプッシュします。

   ```
   docker tag test-container ${ECR_URL}/${ECR_REPO_NAME}
   docker push ${ECR_URL}/${ECR_REPO_NAME}
   ```  
![\[イメージにターゲット Amazon ECR リポジトリのタグを付けるために使用するコマンドの画像。\]](http://docs.aws.amazon.com/ja_jp/cloudshell/latest/userguide/images/docker-cli-tutorial%20-%205-docker-push%20(redacted).png)

   このチュートリアルを実行しようとしてエラーや問題が発生した場合は、このガイドの「[トラブルシューティング](https://docs.aws.amazon.com/cloudshell/latest/userguide/troubleshooting.html)」セクションを参照してください。

## クリーンアップ
<a name="clean-up-docker-cli"></a>

これで、Docker コンテナを Amazon ECR リポジトリに正常にデプロイしました。このチュートリアルで作成したファイルを AWS CloudShell 環境から削除するには、次のコマンドを実行します。
+ 

  ```
  cd ~
  rm -rf ~/docker-cli-tutorial
  ```
+ Amazon ECR リポジトリを削除します。

  ```
  aws ecr delete-repository --force --repository-name ${ECR_REPO_NAME}
  ```