AmazonLinux2 docker 이미지에 python을 설치하고 AWS ECR로 업그레이드하는 방법

AmazonLinux2 docker 이미지에 python을 설치하고 AWS ECR로 업그레이드하는 방법

2022-10-04 last update

6 minutes reading AmazonLinux2 도커 python3.6 ECR
AWS 환경을 이용하는 환경에서 CodePipeline/CodeBuild/CodeDeploy/CodeCommit를 사용하고 있는 분들, 많이 계시겠지만, CodeBuild에서 사용하는 Docker 이미지를 어디에서 관리하는가 하는 과제에 관해서 기술해 나가면 라고 생각합니다.

Docker-hub로 관리해도 괜찮지만 AWS로 중앙에서 관리하고 싶다. 그래서 데이터 분석 기반의 DevOps의 일환으로 실시한 내용을 기술합니다.

  • 환경 및 전제

  • 실행 환경

    VirtualBox (VM)
    OS:AmazonLinux2
    docker:18.06.1-ce
    pyenv:1.2.13
    Python:3.6.5

    VirtualBox에서 AmazonLinux2의 box를 만들고, amazon-linux-extras로 docker를 설치하고 실시하고 있습니다.
    ECR의 리전은 도쿄 리전에서 실시하고 있습니다.

  • 최종 골
    CI/CD에서 CodeBuild를 사용할 때 AWSECR에서 docker 이미지 관리

  • Docker 이미지 생성 준비



    Docker 파일에서 설정을 작성한 후 파이썬 패키지를 설치할 준비를하십시오.

    Docker 파일 만들기



    Docker 파일 내에서 필요한 패키지 설치 및 pyenv 다운로드, python 설치, 환경 변수 설정을 수행합니다.

    이번에 작성하는 이미지의 기본이되는 이미지는 dockerhub의 공식 이미지에서 가져옵니다.
    htps : // 후 b. 두 c r. 코 m / _ / 아마 젠 센 x

    다음은 Docker 파일의 내용입니다.

    DockerFile
    FROM amazonlinux:2
    ADD . .
    
    SHELL ["/bin/bash", "-c"]
    RUN yum update -y
    RUN yum install -y gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel git wget gcc-c++ unixODBC-devel tar.x86_64
    
    RUN echo 'export PYENV_ROOT="/usr/local/pyenv"' | tee -a /etc/profile.d/pyenv.sh
    RUN echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' | tee -a /etc/profile.d/pyenv.sh
    RUN echo 'eval "$(pyenv init -)"' | tee -a /etc/profile.d/pyenv.sh
    
    RUN git clone https://github.com/pyenv/pyenv.git /usr/local/pyenv
    RUN source /etc/profile.d/pyenv.sh && pyenv install -v 3.6.5 && pyenv global 3.6.5 && pip install --upgrade pip==19.0.3 && pip install -r requirements.txt && pip install awscli
    
    

    이번 환경은 ssh로 로그인하는 사용자에 관계없이 기본 python2.7 시스템이 아니라 python3.6.5를 사용할 수 있도록 profile.d의 pyenv.sh로 경로를 관리하고 있습니다.

    requirements.txt 만들기



    pip에서 설치할 패키지와 해당 버전을 나열합니다.
    기존 환경이 있는 경우 다음 명령을 실행하여 설치할 패키지 목록을 가져옵니다.
    pip freeze > requirements.txt 
    

    기존 환경이 없는 경우 자체 제작하십시오.

    AWS ECR 설정



    AWS 콘솔에서 ECR에 docker 이미지를 푸시할 수 있는 환경을 구축합니다.

    리포지토리 만들기



    AWS 콘솔 화면에 로그인하고 ECR 서비스로 전환합니다.
    그런 다음 리포지토리를 만듭니다.
    이번에는 리포지토리 이름을 'python3.6.5'로 지정합니다.

    IAM에서 ECR에 대한 적절한 권한이 부여된 사용자를 사용해야 합니다.

    ECR Permissions 설정



    다음은 이미지를 다운로드할 때 필요한 설정입니다.
    Permissions 화면으로 이동하여 아래의 계정 ID 부분을 수정하여 Json을 붙여넣습니다.
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "CodeBuildAccess",
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::アカウントID:root"
          },
          "Action": [
            "ecr:BatchCheckLayerAvailability",
            "ecr:BatchGetImage",
            "ecr:GetDownloadUrlForLayer"
          ]
        }
      ]
    }
    
    

    ECR에 이미지 push



    ECR에 로그인하고 docker 이미지를 build 후 실제로 push합니다.
    아래 계정 ID 부분을 수정하여 이용하십시오.
    $(aws ecr get-login --no-include-email)
    docker build -t アカウントID.dkr.ecr.ap-northeast-1.amazonaws.com/python3.6.5:latest .
    docker push アカウントID.dkr.ecr.ap-northeast-1.amazonaws.com/python3.6.5:latest
    

    주의점


  • docker에 로그인할 필요가 없습니다.
  • 명령을 사용하는 OS에 AWS CLI를 설치해야 합니다.
  • aws configure 에 지정한 accesskey 에 연결하는 사용자는 ECR 의 이용을 IAM 에서 허가받아야 합니다.
  • docker에 push 할 수없는 경우 세션이 끊어 질 수 있으므로 $(aws ecr get-login --no-include-email)를 다시 실행해야합니다.

  • 요약



    ECR로 관리하면 보안도 담보할 수 있는 데다 CodeBuild에서 이미지를 다운로드할 때의 가용성이 상승한다는 인상이었습니다.
    특히 어려운 일도 없으므로 꼭 시도해보십시오.