- 참조한 영상 (쉽고 괜찮다)
https://www.youtube.com/watch?v=23fE57EFRK4
https://github.com/srcecde/aws-tutorial-code/blob/master/lambda/container-image/app.py
: EC2(우분투) 세팅
sudo apt-get update # sudo yum update
sudo apt-get install docker-compose #sudo yum install docker-compose
sudo apt install awscli -y
mkdir lambda-docker //파일생성
// 그리고 여기에 깃허브에 올라와있는 파일 3개(app.py, requirements.txt, Dockerfile 업로드)
vim app.py
vim Dockerfile
vim requirements.txt
: EC2(centos version) 세팅
# centos버전
sudo yum update
# docker-compose 설치
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# docker-compose 실행 권한 부여
sudo chmod +x /usr/local/bin/docker-compose
# 설치된 docker-compose 실행 확인
docker-compose --version
sudo yum install docker
aws configure
# https://league-cat.tistory.com/347 도커 에러 참조
sudo yum install git -y
# git clone ~~~~~
sudo service docker start
sudo usermod -a -G docker ec2-user
: ECR 접속해서 리파지토리만들기
: 만든 리파지토리 눌러서 '푸시명령보기' 누르고 나오는 명령어 차례차례 터미널에 입력
** 추가적으로 맨앞에 sudo 꼭 붙여야 한다
** 중간에 에러두번나는데
- aws configure 로 해결
- sudo apt-get install gnupg2 pass로 해결 (우분투일떄만 해주면 됨
: 다 만들면 람다에서 컨테이너 이미지로 새로생성 가능
S3 버킷안에 있는거 복사해오기(EC2로)
aws s3 cp s3://ys-profet-package-model/profet_trained_model/ ./s3_file/ (에러)
aws s3 cp s3://ys-profet/package_model_for_lambda_container/ ./s3_file --recursive
< 도커 용어정리 >
CMD ? ENTRYPOINT? → 컨테이너 실행시 동작 명령어 (전자) , 컨테이너 구동시 실행할 명령어 (후자)
ARG?
ARG 명령어 는 빌드 시 전달할 수 있는 변수를 정의합니다 . Dockerfile에 정의되면 이미지를 빌드하는 동안 --build-arg 플래그로 전달할 수 있습니다. Dockerfile에 여러 ARG 명령어가 있을 수 있습니다. ARG는 Dockerfile에서 FROM 명령어 앞에 올 수 있는 유일한 명령어입니다.2019. 9. 16.
alpine?
http://labs.brandi.co.kr/2021/01/20/hwangsg.html
초반에는 직접 빌드하여 올려두고 사용하였으나 현재는 각종 공식 업체에서 기본 이미지를 생성하여 제공하고 있고, Dockerfile에 alpine버전으로 가져와서 필요한 것만 빌드하여 저용량으로 이미지를 수월하게 만들 수 있게 되었습니다. 이렇게 생성된 이미지를 가지고 실행하면 컨테이너가 생성되고 해당 공간은 내부에 전혀 영향 없는 독립적인 별개의 공간으로 활용 할 수 있습니다. docker-compose를 이용하면 더 쉽게 여러 개의 컨테이너를 실행 할 수 있습니다.
https://jonnung.dev/docker/2020/04/08/optimizing-docker-images/ (좋음!)
- RUN, ADD, COPY 이 3가지 단계만이 레이어로 저장되고, CMD, LABEL, ENV, EXPOSE 등과 같이 메타 정보를 다루는 부분은 임시 레이어로 생성되지만 저장되지 않아 도커 이미지 사이즈에 영향을 주지 않는다.
- ..
- 그래서 Alpine 리눅스 이미지를 사용한다면 모든 Python 패키지에서 C 코드를 컴파일 해야 하므로 도커 이미지를 빌드하는 시간이 상당히 많이 소모된다. → GCC 나온이유!!!!!!
- 추가로 덧붙이자면 Alpine 리눅스 이미지를 베이스 이미지로 사용한 Python 이미지는 용량도 크고, 몇 가지 버그들에 대한 취약점도 갖고 있다고 한다.
도커관련해서 최적화하는 방법 !!!!!!
- 이미지 레이어 개수를 줄이는 것이 좋다.(성능영향엔 별상관없긴한데 최적화 측면에서 도움됨+ 가독성,유지보수에좋음)
RUN apt-get update && apt-get install -y \
gcc \
git \
locales
- 애플리케이션 코드 복사 명령(COPY) 은 자주 변경되지 않는 명령문 다음에 오는 것이 이미지 빌드 시간을 단축하는 데 유리하다.
- 이전 단락에서 의존성 패키지를 명시한 파일로
requirements.txt
를 사용했다. 이 파일은 Python의 공식 패키지 관리자인PIP
에서 사용하는 관행적으로 지칭하는 파일이다.Python 개발 환경을 기준으로 봤을 때PIP
는 패키지별 상호 의존성에 관계를 관리할 때 부족한 면이 있다. 그래서 요즘은 좀 더 발전된 Locking 시스템을 갖춘Pipenv
나Poetry
를 사용하는 것을 추천한다. - 이 도구들을 이용해 생성된 Lock 파일 (예: Pipfile)을 기반으로 패키지가 설치될 수 있도록 한다면 위 (3) 단락에서 설명한 캐시 레이어의 장점을 얻을 수 있고, 예상치 못한 패키지 버전 업데이트도 방지할 수 있다.
-
멀티-스테이지 빌드는 위 (2), (3), (4) 단락에서 했던 노력보다 훨씬 더 효과적으로 도커 이미지 사이즈를 줄이는 방법이다.
- 멀티-스테이지 빌드는
Dockerfile
1개에FROM
구문을 여러 개 두는 방식이다.각FROM
명령문을 기준으로 스테이지를 구분한다고 했을 때 특정 스테이지 빌드 과정에서 생성된 것 중 사용되지 않거나 불필요한 모든 것들을 무시하고, 필요한 부분만 가져와서 새로운 베이스 이미지에서 다시 새 이미지를 생성할 수 있다.
https://stackoverflow.com/questions/59747986/how-to-use-tensorflow-2-0-with-aws-lambda → (EFS,Container)
'<Cloud> > AWS' 카테고리의 다른 글
Lambda Container Dockerfile 작성예시 (0) | 2021.08.25 |
---|---|
Lambda Container 파일 접근 위치 + 파일 형식 (0) | 2021.08.25 |
EC2 user data 에 start.sh (0) | 2021.05.09 |
Flask + EC2 튜토리얼 (0) | 2021.05.09 |
AWS launch templates, launch configuration, load balancing, autoscaling 초간단 개념 (0) | 2021.05.09 |