
AmazonLinux2 docker 이미지에 python을 설치하고 AWS ECR로 업그레이드하는 방법
2022-10-04 last update
6 minutes reading AmazonLinux2 도커 python3.6 ECRAWS 환경을 이용하는 환경에서 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에 로그인할 필요가 없습니다. 명령을 사용하는 OS에 AWS CLI를 설치해야 합니다. docker에 push 할 수없는 경우 세션이 끊어 질 수 있으므로
요약
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 파일의 내용입니다.
DockerFileFROM 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
주의점
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
pip freeze > requirements.txt
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
주의점
$(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
aws configure
에 지정한 accesskey 에 연결하는 사용자는 ECR 의 이용을 IAM 에서 허가받아야 합니다. $(aws ecr get-login --no-include-email)
를 다시 실행해야합니다.