About me
home
Portfolio
home
🚢

1. 도커 환경 설정 ( 실패 )

현재 상태 도커 컨테이너화

AWS EC2 인스턴스에서 Docker를 설치하고, Docker 이미지를 생성하고, 생성된 이미지를 Amazon ECR (Elastic Container Registry)에 저장하는 방법은 다음과 같다.
1.
Docker 설치:
Docker를 설치하기 위해 터미널에서 다음 명령어를 실행한다:
sudo yum update -y sudo amazon-linux-extras install docker -y sudo service docker start sudo usermod -a -G docker ec2-user
Plain Text
복사
2.
ECR 레지스트리 생성:
AWS Management Console로 이동하여 Amazon ECR을 연결한다.
"Repositories" 메뉴에서 "Create repository" 버튼을 클릭한다.
저장소 이름을 입력하고, 필요에 따라 액세스 권한 및 설정을 구성한다.
3.
Docker 이미지 빌드:
인스턴스 내에서 Dockerfile을 생성한다. 예를 들어, Dockerfile이라는 이름의 파일을 생성하고 필요한 구성을 작성한다.
FROM python:3.9 WORKDIR /rd_ws SHELL ["/bin/bash","-c"] # AWS CLI 설치 RUN apt-get update && pip3 install awscli RUN pip3 install --upgrade pyOpenSSL # S3 데이터셋 다운로드 및 폴더 이름 변경 RUN aws s3 sync s3://sagemaker-us-east-1-041883464314/mvtec_official/ ./mvtec/ --exclude "*/train/*" RUN aws s3 cp s3://sagemaker-us-east-1-041883464314/RDcheckpoints/RDcpt.tar ./RD4AD/RDcpt.tar RUN tar -xvf RDcpt.tar ./checkpoints # 나머지 작업을 위한 필요한 구성 COPY . . RUN pip install -r requirements.txt
Docker
복사
터미널에서 다음 명령어를 사용하여 Docker 이미지를 빌드한다:
sudo docker build -t 041883464314.dkr.ecr.us-east-1.amazonaws.com/rd-image:first
Plain Text
복사
여기서 <repository-uri>는 ECR 저장소의 URI이다. 예를 들어, <account-id>.dkr.ecr.<region>.amazonaws.com/<repository-name>과 같은 형식이다. <tag>는 이미지 버전 또는 태그를 나타낸다.
4.
ECR에 이미지 푸시:
ECR 저장소에 로그인하고, Docker 이미지를 푸시한다. 다음 명령어를 사용
aws ecr get-login-password --region <region> | docker login --username AWS --password-stdin <repository-uri> docker push <repository-uri>:<tag>
Plain Text
복사
여기서 <region>은 ECR 저장소가 있는 AWS 리전을 나타낸다. <repository-uri><tag>는 빌드한 Docker 이미지의 저장소 URI와 태그와 일치해야 한다.
이제 Docker 이미지가 Amazon ECR에 성공적으로 저장되었다. 이후에 필요한 경우, 다른 인스턴스에서 해당 저장소에서 이미지를 풀고 실행할 수 있다.
시나리오
1.
S3 이벤트 트리거: 이미지가 S3 버킷에 저장된다.
2.
Lambda 함수 실행: S3 이벤트를 트리거로하여 Lambda 함수(RD-docker-ec2)가 실행된다.
3.
Lambda 함수 내에서 Docker 컨테이너 실행: Lambda 함수(RD-docker-ec2)는 Docker 컨테이너를 실행한다. 컨테이너는 이전에 작성한 도커 이미지(rd-env)를 기반으로 생성된다.
4.
컨테이너 내부에서 Python 스크립트 실행: Docker 컨테이너 내에서 Python 스크립트(lambda_function.py)가 실행된다. 이 스크립트는 lambda_handler() 함수를 포함하고 있다.
5.
Lambda 함수에서 EC2 인스턴스 실행: 람다에서(lambda_function.py)에서 EC2 인스턴스를 실행하는 명령어를 실행한다.
6.
EC2 인스턴스에서 Python 스크립트 실행: EC2 인스턴스가 실행된 후, Python 스크립트(main.py)가 EC2 인스턴스 내에서 실행된다.

Dockerfile 만들기

FROM public.ecr.aws/lambda/python:3.10 # 필요한 패키지 설치 RUN pip install torch torchvision opencv-python matplotlib scikit-image pandas numpy scipy scikit-learn Pillow # 람다 함수 코드 복사 COPY lambda_function.py ${LAMBDA_TASK_ROOT} # 람다 핸들러 지정 CMD [ "lambda_function.lambda_handler" ]
Docker
복사
Dockerfile과 같은 위치에 람다 함수(lambda_function.py)도 만들어 놓기.
docker build -t rd-env .
Bash
복사
터미널에 docker images 를 입력하면 이미지가 생성된 것을 확인할 수 있다.

도커 이미지 AWS ECR에 푸시하기

필요한 모듈 설치 $ sudo apt install awscli $ sudo apt install amazon-ecr-credential-helper
나의 ECR 레파지토리
이름 : rd-image

로그인 인증

aws ecr get-login --region us-east-1 --no-include-email
Bash
복사
입력하면 다음과 같은 출력이 나온다. 아래 명령어를 그대로 터미널에 입력해주면 로그인 성공이 된다.
docker login -u AWS -p eyJwYXlsb2FkIjoiQkZrdlZiTFZ1Q1hvcS9jVGt1OWNKaGZOMUROek9jUGNwRGl4OE5zR09lL1AvSkJYMG1Vd0c2R0Z2MUJLRHdCK051UVRweXBFVExaZ0IvMjZJMHpKdExvcXZJNmhhZVd5QUI3UnBzeTR3R2lIOVdQUFNySkp0QXBZR3cvcnF4MmY5UW9hRHgvZStPQWRlRThTTGhOYzQvYTVpTkNXK0hCdjZqR0RqTmFQSjdqUXFORTI5TmxBMzBlRUpFdnJsZGErTUphSSsyZHljOFNGYTRCYW9kWUcycHd1YkFtOFlMUTJFQUpNeEFTOEVVWHo2ejA5ZldYTXYrMzJzR3lJNFEzV3puaG9ZOG5hbXlLOTFzWHpKci9iM3hTVmhsVG5vZkhjUWxPdVJ6VitsRm5ZdXM3SGRGUjNVbGx0OU55WmhuekVqejhFaWhkM2hldThaWG9LcFFSUlk1S25mRmpZazFHTWtrQm0wdEtSZEZXZWQ4bkRCbWkzV1h6R2lmenhWQit1NWtuNmcrVVlyNDFVcmJmN0QwbS9nVTZSWmFZTkt5M0hvUkxXVzFZOHBKMW83enV3WDBWOXRJNEJCQW9oelJhT3BQa3g0ODROOFZabVF5N0dFdllRSDB5MzQwcEQ2c2VWcC9DenExOHpCLzI4V2VpZjZmcW5uMWlTTHFpa2YyM0J3QTdyR3F2ZEpENXNVSEgvLy9HNWlQMWRucGUyY29tVGpVREV3djZlREkrdFZ2NEtJVlJicWFnTVNmZWh5dWlQMjZOakFQN3crVkpuQjR3QmtVZ1lXeE4yaTNRcVJ2aUFGU3BWZ0NZZXJjSkpsOTNoR3ZRU0JMS21RVEZydE5VMWRlUzYzU2NJWW5mYkhMbmNnV3RHeEhUclNUQU0yVUN6MnE3dFdLM3gwNkp6WHA5dDhlWVFpNjBZL2FtWEN2bzVyS3grdjFObmx0cmJHU3NZdldQc05PUVdkUXd3dEpMRVVXY2p2RGwvbVAxRzNGMjZXME1tUmJTQWc5SmRGaGNUQ1RYQzFXRy9Pb2FwTjdPVjYycmUrWWxuWDJMbEF3ZzJBV3plTDd1NlFCWTlQOEhGU25rOHFiREY0TzE3dzdGUi9RQVZyWXJqeWY5cTlsSFVySXhMV0trWElXeTRTVmMrRmF6SDVzZ01xRXpvRy9uN1IwejNleUUyQlh5NUROeWJXcXdDL3N5djA1Ty9RSWVqVW1sM2Ewcms4RGI0NW9PL3FrYmJWbTljOXhEOW54TCttcVRUY01lVEQrdjlxVk11bjV4RjlwWmtlQXVTUkQ3am1NN0w0Wjk0NTZkWDdFa0xDeVRnK0ZCQlJPNDdqVmNIZm5YK3JrWVFydHQxZEtwMUJ4WFk4dkhWc0pjR2ZjMmdmUT09IiwiZGF0YWtleSI6IkFRRUJBSGh3bTBZYUlTSmVSdEptNW4xRzZ1cWVla1h1b1hYUGU1VUZjZTlScTgvMTR3QUFBSDR3ZkFZSktvWklodmNOQVFjR29HOHdiUUlCQURCb0Jna3Foa2lHOXcwQkJ3RXdIZ1lKWUlaSUFXVURCQUV1TUJFRURMYlpRYWJwKzZRQ1BPWW93UUlCRUlBNzRHK00yRUVkNjVLT09OSTJFWWN1dGF4WnFSNW5LUG9meXA5N2NUYWRTQjhCV3VRMEQxV2l4amZ5R1lPRHlGS3NiM3RFVkcyVGNDdDBtZmM9IiwidmVyc2lvbiI6IjIiLCJ0eXBlIjoiREFUQV9LRVkiLCJleHBpcmF0aW9uIjoxNjg4MDc3NzI2fQ== https://041883464314.dkr.ecr.us-east-1.amazonaws.com
Bash
복사

ECR을 위한 태그 생성

docker tag rd-env:latest 041883464314.dkr.ecr.us-east-1.amazonaws.com/rd-image:latest
Bash
복사

ECR에 도커 이미지 푸시

docker push 041883464314.dkr.ecr.us-east-1.amazonaws.com/rd-image:latest
Bash
복사
ECR 레파지토리에 이미지가 저장된 것을 확인할 수 있다.

Lambda 함수 새로 생성

역할 권한 설정