AWS CI/CD 공부 노트②:CodeBuild로 Docker 이미지 빌드

할 일



Cloud9에서 데이터 준비
CodeCommit リポジトリ 에 push하여
CodeBuild ビルドプロジェクト 에서 빌드하여 Docker 이미지를 만들고
ECR(Amazon Elastic Container Registry)의 リポジトリ 에 Docker 이미지를 push한다.
동작 확인은 Cloud9에서 Docker 컨테이너를 실행합니다.

구성



이번에 만드는 구성



참고


  • CodeBuild로 Docker 이미지의 멀티 스테이지 빌드
  • 【비망록】CodeBuild에서 aws ecr get-login 명령 실행시에 에러가 발생한다



  • 그럼,

    1.ECR 만들기



    ECR 리포지토리를 만듭니다.



    리포지토리 multistage-ecr 만들기



    2. CodeCommit 만들기



    CodeCommit 리포지토리 만들기



    리포지토리 multistage-ecr 만들기



    3. 빌드용 리소스 만들기



    github에서 샘플을 얻고,
    Cloud9에서 데이터를 업데이트하고,
    CodeCommit 리포지토리로 푸시



    Cloud9 만들기(만드는 방법은 생략)

    여기 에서 샘플 가져오기

    Cloud9-Terminal
    $ https://github.com/cloudfish7/multi-stage-build-for-codebuild.git
    

    CodeCommit 리포지토리 복제

    Cloud9-Terminal
    $ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/multistage-test
    $ cp ../multi-stage-build-for-codebuild/* ./ -r
    

    파일 구조

    Cloud9-Terminal
    $ pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/|  /g'
    /home/ec2-user/environment/multistage-test
    |--buildspec.yml
    |--Dockerfile
    |--pom.xml
    |--src
    |  |--buildspec.yml
    |  |--Dockerfile
    |  |--hoge
    |  |  |--Main.java
    |  |--pom.xml
    

    얻은 샘플 데이터의 buildspec.yml 편집
  • 갱신 장소
  • {REPO_NAME}, {tag}, {account_id}를 실제 값으로 업데이트
  • 1행째를 version: 0.1 -> version: 0.2 로 한다


  • buildspec.yml
    version: 0.1
    
    phases:
      pre_build:
        commands:
          - $(aws ecr get-login --region ap-northeast-1 --no-include-email)
      build:
        commands:
          - docker build -t {REPO_NAME}:{tag} .
          - docker tag {REPO_NAME}:{tag} {account_id}.dkr.ecr.ap-northeast-1.amazonaws.com/{REPO_NAME}:{tag}
          - docker push {account_id}.dkr.ecr.ap-northeast-1.amazonaws.com/{REPO_NAME}:{tag}
      post_build:
        commands:
    

    codecommit 리포지토리로 푸시

    Cloud9-Terminal
    $ git add .
    $ git commit -m "update"
    $ git push origin master
    

    4. CodeBuild 만들기



    빌드 프로젝트 multistage-build 만들기 및 실행
    → ECR 리포지토리에 Docker 이미지가 저장됨



    4-1. 빌드 프로젝트 작성






    품목

    비고


    프로젝트 이름
    multistage-build

    소스 프로파일러
    AWS CodeCommit

    리포지토리
    multistage-test

    참조 유형
    브랜치

    브랜치
    마스터

    환경 이미지
    관리형 이미지

    운영체제
    우분투

    런타임
    표준

    이미지
    aws/codebuild/standard:4.0

    환경 유형
    리눅스

    서비스 역할
    새로운 서비스 역할

    역할 이름
    codebuild-nultistage-build-service-role
    자동 생성

    빌드 사양
    buildspec 파일 사용



    4-2.ECR 액세스 권한 추가



    IAM 역할에 ECR 액세스 정책 추가AmazonEC2ContainerRegistryPowerUse 추가





    4-3. 빌드 실행



    CodeBuild 실행
    성공하면 ECR에 이미지가 푸시됩니다.

    여기까지 할 수 있으면 일단 성공



    동작 확인



    빌드한 Docker 이미지를 Cloud9에 가져와 Docker 컨테이너를 실행할 수 있는지 확인



    Docker 컨테이너 실행

    Cloud9-Terminal
    $ aws ecr get-login --no-include-email --region ap-northeast-1
    # -> 出力された長いコマンドをコピーして実行 -> Login Succeeded とでれば成功
    

    ECR 리포지토리에서 Docker 이미지 가져 오기

    Cloud9-Terminal
    $ docker pull xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/multistage-ecr:latest
    

    Docker 이미지가 있음

    Cloud9-Terminal
    $ docker images
    REPOSITORY                                                         TAG                 IMAGE ID            CREATED             SIZE
    xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/multistage-ecr   latest              5bf8c20529d6        14 minutes ago      81.4MB
    

    Cloud9-Terminal
    $ docker run xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/multistage-ecr:latest
    # Dockerコンテナ実行できたか確認
    $ docker ps -ls
    CONTAINER ID        IMAGE                                                                     COMMAND             CREATED             STATUS                      PORTS               NAMES               SIZE
    c53e6c6ef9e6        xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/multistage-ecr:latest   "/bin/sh"           11 seconds ago      Exited (0) 11 seconds ago                       hopeful_mendel      0B (virtual 81.4MB)
    

    좋은 웹페이지 즐겨찾기