AWS CodeBuild 및 Gravion2를 사용하여 Docker 이미지 구축 및 공유

11499 단어 awscodebuild
AWS는 최근 CodeBuild now runs Arm workloads on Graviton2을 발표했다.AWS가 클라우드 서비스에Graviron2 지원을 계속 추가함에 따라CodeBuild는 인기 있는 보충이다.
CodeBuild 자동화 소프트웨어 구축 및 테스트는 GitHub에 호스팅된 소프트웨어를 위한 Docker 이미지 구축을 포함한다.본고는 CodeBuild를 사용하여 AARC64 Docker 이미지를 구축하고 Amazon ECR Public GalleryDocker Hub에서 공유하는 방법을 소개한다.
나는 당신이 이미 Docker의 경험을 가지고 Arm시스템을 위해 어떻게 이미지를 자동으로 만드는지 흥미를 느낀다고 가정합니다.Docker는 Arm 아키텍처에 좋은 지원을 제공하지만 CodeBuild와 같은 위탁 관리 서비스로 이미지를 쉽게 만들 수 있습니다.

GitHub 프로젝트의 경우


Arm의 작은 Docker 이미지를 사용하여Gravion2에 코드를 구축하는 것을 배우기 시작합니다.GitHub repository은 "hello world"응용 프로그램의 간단한 집합을 포함하고 이 응용 프로그램들은 제 것입니다.
안녕하십니까를 상상해 봅시다.c는 실제 소프트웨어 프로젝트로 정기적으로 변경되며 원본 파일이 변경될 때 Docker 이미지를 재구성해야 한다.나는 어떻게 자동 구축을 촉발하는지 토론할 생각은 없다.대신 AWS 콘솔에서 버튼을 클릭하여 컨테이너 저장소에 있는 새 이미지를 살펴보겠습니다.
AWS Console으로 가서 코드 구축을 시작합니다.

ECR Public에서 저장소 작성


AWS 콘솔에서 탄성 컨테이너 레지스트리로 이동합니다.공통 탭을 클릭한 다음 오른쪽 위에 있는 저장소 만들기 버튼을 사용하여 ECR 공통 저장소를 작성합니다.나는 getting started guide이 매우 뛰어나기 때문에 모든 절차를 반복하지 않을 것이다.
c-hello-world이라는 저장소를 만들고 ARM 64 아키텍처로 표시했습니다.또한 새 저장소는 이제 ECR 공용 갤러리에서 볼 수 있습니다.
아직 이미지를 푸시할 필요가 없습니다. CodeBuild가 이를 실현할 것입니다.

Docker Hub에 저장소 만들기


Docker Hub 계정에 로그인하여 새 저장소를 만듭니다.오른쪽 위에 있는 저장소 만들기 버튼을 사용하여 이름을 선택하고 저장소를 공용으로 표시합니다.c-hello-world repository을 만들고 Docker Hub에 표시되는지 확인합니다.
이미지를 전송하려면 Docker Hub에 로그인해야 합니다.AWS는 Secrets Manager을 Docker Hub 자격 증명을 저장하는 보안 방법으로 제공합니다.생성 기간에 증빙서류를 검색하고 사용할 수 있다.이제 Secrets Manager에서 Docker Hub 자격 증명을 설정할 수 있습니다.AWS 콘솔에서 Confidential Manager로 이동한 다음 새 Confidential Storage 를 클릭합니다.중요한 것은 암호의 이름과 사용자 이름과 암호의 키/값 쌍이다.자동 회전이 비활성화되어 있는지 확인합니다.자세한 내용은 AWS 파일에서 확인할 수 있습니다. 섹션 Store your DockerHub credentials with AWS Secrets Manager을 참조하십시오.
이제 두 개의 저장소에서 CodeBuild에서 만든 Docker 이미지를 받을 수 있습니다.CodeBuild를 사용하여 ECR Public과 Docker Hub을 Docker 이미지로 채우는 방법을 보여 줍니다.

코드 구축 프로젝트 만들기


AWS 콘솔에서 CodeBuild으로 이동합니다.CodeBuild는 구축 시작 시 무엇을 해야 하는지 설명하는 파일을 사용합니다.buildspec.기본값은 yml입니다.
시작 방법은buildspec을 만드는 것입니다.yml 파일을 GitHub 저장소에 추가합니다.CodeBuild는 디렉터리 구조의 맨 위에서 찾을 것입니다. 그러나 더 많은 내용은 다음 부분의buildspec에서 소개할 것입니다.
AWS 콘솔에서 CodeBuild를 열고 새 CodeBuild 프로젝트를 만듭니다.페이지의 오른쪽 상단에 있는 항목 만들기 버튼을 사용합니다.
프로젝트 설정 부분에는 프로젝트 이름과 설명이 포함되어 있습니다.

Source 섹션은 GitHub 프로젝트 정보를 입력하는 곳입니다.GitHub에 연결하려면 OAuth 또는 개인 액세스 토큰을 사용하십시오.OAuth를 선택하면 GitHub에 로그인하는 대화 상자가 열리고 개인 액세스 토큰을 선택하면 상자에 붙여넣을 수 있습니다.

GitHub 연결이 완료되면 프로젝트의 GitHub URL을 입력합니다.GitHub 계정에 Hello World 프로젝트 링크를 입력했습니다.

Environment 섹션에는 구축할 Docker 이미지에 대한 정보가 들어 있습니다.이것은 Docker 이미지가 아니라 이미지를 작성하는 데 사용되는 이미지입니다.CodeBuild는 컨테이너를 실행하여 우리의 이미지를 구축합니다. 필요한 모든 도구가 구축을 실행하는 Docker 이미지에 포함되어 있는지 확인해야 합니다.이것은 Docker에서 때때로 Docker라고 불린다.
이것도 우리가 이곳이Aarch64버전이라고 지정한 곳이다.관리되는 이미지는 AWS에서 제공하는 표준 이미지를 사용하도록 나타냅니다.Graviton2 image can be found on GitHub의 출처.
이미지의 내용을 보려면 Dockerfile을 참조하십시오.만약 당신이 자신의 기계에서 그것을 실행하고 싶다면, 나는 이 그림을 만들어서 ECR Public에 발표할 것이다.
이미지를 구성하기 위해 Docker에서 Docker를 실행하고 있으므로 권한 상자가 선택되어 있는지 확인합니다.
설정에서 가장 까다로운 부분은 서비스 역할이다.기본적으로 새 역할이 만들어지고 필요한 권한이 부여됩니다.프로젝트를 만든 후 코드 구축 작업에 필요한 IAM 역할 추가 내용을 설명합니다.이제 CodeBuild 프로젝트를 만든 후 IAM에서 확장할 수 있도록 역할 이름을 주의하십시오.

Buildspec 섹션에서는 Buildspec을 어디서 찾을 수 있는지 CodeBuild에 알려 줍니다.yml.기본 설정은 GitHub 저장소의 맨 위 디렉토리에 있지만 여기서 이름과 위치를 변경할 수 있습니다.두 번째 옵션은buildspec을 만드는 것입니다.코드 구축 프로젝트의 yml 파일입니다.이 옵션이 있으면 GitHub 저장소를 수정할 필요가 없지만, 이 코드 구축 프로젝트에 존재할 것입니다.

이 구축은 Docker 이미지를 ECR Public과 Docker Hub로 전송하기 때문에 작업 부분에 어떤 내용도 저장할 필요가 없습니다.

마지막 절에서 로그를 저장할 위치를 지정합니다.기본 위치는 클라우드 워치이지만 로그는 S3 메모리 통으로 이동할 수 있습니다.CodeBuild는 구축에 대한 자세한 내용을 보려면 로그에 대한 간단한 링크를 제공합니다.

IAM 역할 수정


CodeBuild는 프로젝트를 성공적으로 수행하려면 ECR에 액세스해야 합니다.이 부분은 잘못된 순환에 빠지는 것이 재미없기 때문에 곤란할 수도 있다.
AWS 콘솔에서 IAM으로 이동하여 캐릭터를 클릭하고 검색 상자에'코드build'를 입력하여 위에서 만든 코드build 서비스 캐릭터를 찾습니다.

역할을 클릭한 다음 삼각형을 클릭하여 정책을 확장합니다.

정책 편집 버튼과 JSON 탭을 클릭하여 IAM 정책에 다음 문을 추가하고, 위에서 작성한 AWS CodeBuild 서비스 역할에 IAM 정책을 추가합니다.
{
    "Action": [
        "ecr-public:BatchCheckLayerAvailability",
        "ecr-public:CompleteLayerUpload",
        "ecr-public:GetAuthorizationToken",
        "ecr-public:InitiateLayerUpload",
        "ecr-public:PutImage",
        "ecr-public:UploadLayerPart",
        "sts:GetServiceBearerToken"
    ],
    "Resource": "*",
    "Effect": "Allow"
},
{
    "Effect": "Allow",
    "Action": [
        "secretsmanager:GetSecretValue"
    ],
    "Resource": [
        "*"
    ]
}
이 추가를 사용하면 CodeBuild가 Secrets Manager에 저장된 자격 증명을 사용하여 Docker 이미지를 Amazon ECR 저장소 및 Docker Hub에 업로드할 수 있습니다.

구축 시작


모든 것이 준비되면 AWS 콘솔의 CodeBuild로 돌아가서 프로젝트로 이동한 다음 "구축 시작"단추를 누르십시오.
로그에서 모든 일이 순조롭게 진행되면 새 Docker 이미지가 저장소에 나타납니다.

후다닥 달아나다


이 그림들은 이미 당기고 실행할 준비가 되어 있다.두 이미지는 모두 같고 uname의 출력은 같으며, 이 이미지는 Amazon Linux 2에 구축된 것으로 표시됩니다.
jasand01@m1 ~ % docker pull jasonrandrews/c-hello-world
Using default tag: latest
latest: Pulling from jasonrandrews/c-hello-world
069a56d6d07f: Already exists 
026c8cc819e6: Pull complete 
Digest: sha256:3f5a7db5b7433f70cdb1cdb29a0d30866c4afa547a666479a40055aca3680869
Status: Downloaded newer image for jasonrandrews/c-hello-world:latest
docker.io/jasonrandrews/c-hello-world:latest

jasand01@m1 ~ % docker pull public.ecr.aws/z9p7l6s8/c-hello-world
latest: Pulling from z9p7l6s8/c-hello-world
Digest: sha256:3f5a7db5b7433f70cdb1cdb29a0d30866c4afa547a666479a40055aca3680869
Status: Downloaded newer image for public.ecr.aws/z9p7l6s8/c-hello-world:latest
public.ecr.aws/z9p7l6s8/c-hello-world:latest

jasand01@m1 ~ % docker run --rm jasonrandrews/c-hello-world
Hello, architecture from uname is Linux 39d131c8e64b 4.14.219-161.340.amzn2.aarch64 #1 SMP Thu Feb 4 05:54:27 UTC 2021 aarch64 Linux
64-bit userspace

jasand01@m1 ~ % docker run --rm public.ecr.aws/z9p7l6s8/c-hello-world
Hello, architecture from uname is Linux 39d131c8e64b 4.14.219-161.340.amzn2.aarch64 #1 SMP Thu Feb 4 05:54:27 UTC 2021 aarch64 Linux
64-bit userspace

요약


CodeBuild는 Gravion2에서 Docker 이미지를 쉽게 자동으로 만들 수 있습니다.또한 CodeBuild 프록시와 CodeBuild에서 사용하는 동일한 Docker 이미지를 사용하여 로컬 빌드를 실행할 수도 있습니다.이것은 AWS로 이동하기 전에 모든 것이 정상적임을 확보하는 데 도움이 되지만, 이것은 다음 주제이다.Gravion2의 코드 구축에 행운을 빕니다.

좋은 웹페이지 즐겨찾기