

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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 build 명령의 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/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/ko_kr/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/ko_kr/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/ko_kr/cloudshell/latest/userguide/images/docker-cli-tutorial%20-%204-docker-login.png)
**참고**  
CloudShell에서 **AWS\$1REGION** 환경 변수가 설정되지 않았거나 다른 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/ko_kr/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>

이제 Amazon ECR 리포지토리에 Docker 컨테이너를 성공적으로 배포했습니다. 이 자습서에서 생성한 파일을 AWS CloudShell 환경에서 제거하려면 다음 명령을 실행합니다.
+ 

  ```
  cd ~
  rm -rf ~/docker-cli-tutorial
  ```
+ Amazon ECR 리포지토리를 삭제합니다.

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