'Amazon 이미지 리포지토리에 Docker ECR 이미지 게시' 샘플 CodeBuild - AWS CodeBuild

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

'Amazon 이미지 리포지토리에 Docker ECR 이미지 게시' 샘플 CodeBuild

이 샘플은 Docker 이미지를 빌드 출력으로 생성한 다음 Docker 이미지를 Amazon Elastic 컨테이너 레지스트리 (AmazonECR) 이미지 리포지토리로 푸시합니다. 이 샘플을 응용하여 도커 이미지를 Docker Hub에 푸시할 수도 있습니다. 자세한 내용은 'Amazon에 Docker 이미지 ECR 게시' 샘플을 조정하여 Docker Hub로 푸시합니다. 단원을 참조하십시오.

사용자 지정 도커 빌드 이미지(도커 허브의 docker:dind)를 사용하여 도커 이미지를 빌드하는 방법을 알아보려면 도커 사용자 지정 이미지 샘플 단원을 참조하십시오.

이 샘플은 golang:1.12를 참조하여 테스트됩니다.

이 샘플에서는 도커 이미지를 빌드 출력으로 생성하는 새로운 다단계 Docker 빌드 기능을 사용합니다. 그런 다음 Docker ECR 이미지를 Amazon 이미지 리포지토리로 푸시합니다. 다단계 도커 이미지 빌드는 최종 도커 이미지의 크기를 줄이는 데 도움이 됩니다. 자세한 내용은 Use multi-stage builds with Docker를 참조하십시오.

중요

이 샘플을 실행하면 계정에 요금이 청구될 수 AWS 있습니다. 여기에는 Amazon S3 AWS KMS, CloudWatch Logs 및 Amazon과 관련된 AWS 리소스 및 작업에 대한 가능한 요금이 포함됩니다ECR. AWS CodeBuild 자세한 내용은 요금, Amazon S3 CodeBuild 요금, 요금, Amazon AWS Key Management Service 요금Amazon CloudWatch Elastic 컨테이너 레지스트리 요금을 참조하십시오.

ECR'Amazon에 Docker 이미지 게시' 샘플 실행

다음 절차를 사용하여 Amazon에 Docker 이미지를 게시하는 샘플을 실행합니다. ECR 이 샘플에 대한 자세한 내용은 을 참조하십시오. 'Amazon 이미지 리포지토리에 Docker ECR 이미지 게시' 샘플 CodeBuild

이 샘플을 실행하려면
  1. Amazon에 이미 ECR 사용하려는 이미지 저장소가 있는 경우 3단계로 건너뛰십시오. 그렇지 않으면 Amazon에서 작업할 때 AWS 루트 계정 또는 관리자 사용자 대신 사용자를 사용하는 ECR 경우 다음 설명을 추가하십시오 ( ### BEGIN ADDING STATEMENT HERE ### 그리고 ### END ADDING STATEMENT HERE ###사용자 (또는 사용자가 연결된 IAM 그룹) 에) 을 입력합니다. AWS 루트 계정을 사용하는 것은 권장되지 않습니다. 이 명령문을 사용하면 Docker 이미지를 저장하기 위한 Amazon ECR 리포지토리를 생성할 수 있습니다. 간결하게 나타내고 명령문 추가 위치를 알 수 있도록 줄임표(...)가 사용되었습니다. 어떤 명령문도 제거하지 않아야 하며, 이러한 줄임표는 정책에 입력하지 않아야 합니다. 자세한 내용은 사용 설명서의 AWS Management Console을 사용한 인라인 정책 작업을 참조하세요.

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "ecr:CreateRepository" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    참고

    이 정책을 수정하는 IAM 주체는 정책을 수정할 권한이 있어야 합니다. IAM

  2. Amazon에서 이미지 리포지토리를 ECR 생성하십시오. 빌드 환경을 만들고 빌드를 실행하는 AWS 지역과 동일한 지역에 리포지토리를 생성해야 합니다. 자세한 내용은 Amazon ECR 사용 설명서의 리포지토리 생성을 참조하십시오. 이 리포지토리의 이름은 이 절차의 뒷부분에서 지정하는 리포지토리 이름(IMAGE_REPO_NAME 환경 변수에 의해 표시됨)과 일치해야 합니다. Amazon ECR 리포지토리 정책이 CodeBuild 서비스 IAM 역할에 이미지 푸시 액세스를 허용하는지 확인하십시오.

  3. 다음 설명을 추가하십시오 (사이).### BEGIN ADDING STATEMENT HERE ### 그리고 ### END ADDING STATEMENT HERE ### AWS CodeBuild 서비스 역할에 연결한 정책에 추가하세요. 이 명령문을 사용하면 Docker 이미지를 Amazon ECR 리포지토리에 CodeBuild 업로드할 수 있습니다. 간결하게 나타내고 명령문 추가 위치를 알 수 있도록 줄임표(...)가 사용되었습니다. 어떤 명령문도 제거하지 않아야 하며, 이러한 줄임표는 정책에 입력하지 않아야 합니다.

    { "Statement": [ ### BEGIN ADDING STATEMENT HERE ### { "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:CompleteLayerUpload", "ecr:GetAuthorizationToken", "ecr:InitiateLayerUpload", "ecr:PutImage", "ecr:UploadLayerPart" ], "Resource": "*", "Effect": "Allow" }, ### END ADDING STATEMENT HERE ### ... ], "Version": "2012-10-17" }
    참고

    이 정책을 수정하는 IAM 주체는 정책을 수정할 권한이 있어야 합니다. IAM

  4. 이 항목의 디렉터리 구조파일 섹션에 설명된 대로 파일을 만든 다음 S3 입력 버킷 또는, 또는 Bitbucket GitHub 저장소에 업로드합니다. AWS CodeCommit자세한 내용은AWS CodePipeline 사용 설명서의 이미지 정의 파일 참조를 참조하세요.

    중요

    (root directory name)은 업로드하지 말고, (root directory name) 안에 있는 파일만 업로드하십시오.

    S3 입력 버킷을 사용하는 경우 파일이 포함된 ZIP 파일을 만든 다음 입력 버킷에 업로드해야 합니다. ZIP파일에 (root directory name) 추가하지 말고 안에 있는 파일만 (root directory name) 추가하세요.

  5. 빌드 프로젝트를 만들고, 빌드를 실행하고, 빌드 정보를 확인하세요.

    콘솔을 사용하여 프로젝트를 생성할 경우:

    1. [Operating system]에서 [Ubuntu]를 선택합니다.

    2. 실행 시간에서 표준을 선택합니다.

    3. 이미지에서 aws/codebuild/standard:5.0을 선택합니다.

    4. 다음 환경 변수를 추가합니다.

      • AWS_ DEFAULT _ REGION (값: region-ID

      • AWS_ACCOUNT_ID값이 다음과 같습니다.account-ID

      • IMAGE_ TAG (값이 최신인 경우)

      • IMAGE_ REPO _ NAME (값:) Amazon-ECR-repo-name

    를 사용하여 빌드 프로젝트를 AWS CLI 만드는 경우 create-project 명령에 대한 JSON -formatted 입력이 다음과 비슷할 수 있습니다. (자리 표시자는 사용자의 값으로 바꾸십시오.)

    { "name": "sample-docker-project", "source": { "type": "S3", "location": "codebuild-region-ID-account-ID-input-bucket/DockerSample.zip" }, "artifacts": { "type": "NO_ARTIFACTS" }, "environment": { "type": "LINUX_CONTAINER", "image": "aws/codebuild/standard:5.0", "computeType": "BUILD_GENERAL1_SMALL", "environmentVariables": [ { "name": "AWS_DEFAULT_REGION", "value": "region-ID" }, { "name": "AWS_ACCOUNT_ID", "value": "account-ID" }, { "name": "IMAGE_REPO_NAME", "value": "Amazon-ECR-repo-name" }, { "name": "IMAGE_TAG", "value": "latest" } ], }, "serviceRole": "arn:aws:iam::account-ID:role/role-name", "encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID" }
  6. Docker 이미지를 리포지토리로 CodeBuild 성공적으로 푸시했는지 확인하세요.

    1. 에서 Amazon ECR 콘솔을 엽니다 https://console.aws.amazon.com/ecr/.

    2. 리포지토리 이름을 선택합니다. Image tag(이미지 태그) 열에 이미지가 있어야 합니다.

디렉터리 구조

이 샘플에서는 다음 디렉터리 구조를 가정합니다.

(root directory name) ├── buildspec.yml └── Dockerfile

파일

이 샘플은 다음 파일을 사용합니다.

buildspec.yml((root directory name)에 있음)

version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com build: commands: - echo Build started on `date` - echo Building the Docker image... - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker image... - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG

Dockerfile((root directory name)에 있음)

FROM golang:1.12-alpine AS build #Install git RUN apk add --no-cache git #Get the hello world package from a GitHub repository RUN go get github.com/golang/example/hello WORKDIR /go/src/github.com/golang/example/hello # Build the project and send the output to /bin/HelloWorld RUN go build -o /bin/HelloWorld FROM golang:1.12-alpine #Copy the build's output binary from the previous build container COPY --from=build /bin/HelloWorld /bin/HelloWorld ENTRYPOINT ["/bin/HelloWorld"]
참고

CodeBuild 사용자 지정 Docker 이미지의 ENTRYPOINT 경우 를 재정의합니다.