도커 배포
- Docker Image를 더 경량화 시키기 위한 방법(Image가 작을수록 빌드,배포의 시간이 짧아짐)
- 이미지 내부에서 용도를 분리시킬수 있음 ex)builder,test
- FROM을 기준으로 스테이지 분리
- Dockerfile을 한줄씩 읽음
- run, copy, add 등의 명령어를 인식할때마다 컨테이너를 생성하고 명령어 실행
- 명령어 실행 이후의 데이터를 새로운 레이어로 지정
- Dockerfile에 더이상의 명령어가 없을때 새롭게 생성된 레이어를 lowerlayer에 추가하여 새로운 이미지가 완성됨
FROM alpine:latest
# Set a default value for the environment variable
ARG DEPENDENCY_TYPE=npm
# Copy the install script to the image
COPY install.sh /
# Run the install script, passing in the value of the environment variable
RUN /install.sh $DEPENDENCY_TYPE
# Copy the application files to the image
COPY app /app
# Set the default command to start the application
CMD ["./app"]
install.sh if [ "$1" = "npm" ]; then # Install Node.js and npm apk add --no-cache nodejs npm elif [ "$1" = "pip" ]; then # Install Python and pip apk add --no-cache python3 py3-pip else echo "Invalid dependency type specified" exit 1 fi
Rolling Strategy
- v2 컨테이너 하나를 배포
- v2 컨테이너 하나가 정상동작할때 v1 컨테이너 하나 삭제 이후 v2를 다시 배포
- 최종적으로 v2만 남을때까지 반복
Blue/Green Strategy
- v2 컨테이너를 배포 (기존 v1 유지)
- v2 컨테이너가 완전히 실행된 이후 트래픽을 v2 컨테이너로 전환
- 안정적이지만 자원을 두배로 사용
Canary Strategy
- 정상 동작중인 v1 컨테이너들 사이에 v2 컨테이너를 혼합
- 테스트에 유리함