시작부터 배포까지: 도커 패키징의 베스트케이스

이 글은 0 to production-ready: a best-practices process for Docker packaging 을 읽고 제 나름 번역해본 글입니다. 도움이 되길 바랍니다.

목차

1. 일단 돌리자

FROM python:3.9-slim-buster
COPY . .
RUN pip install .
ENTRYPOINT ["./run-server.sh"]

이러면 일단 돌아는 감

2. 보안을 고려하자

  1. root 로 구동하지 말자!
  1. 보안 업데이트를 하자!
FROM python:3.8-slim-buster
RUN useradd --create-home appuser
USER appuser

WORKDIR /home/appuser
COPY . .
RUN pip install --user .
ENTRYPOINT ["./run-server.sh"]

3. 자동화된 빌드/CI

#!/usr/bin/env bash

#
# Ver 1.
#   브랜치 안 가리고 작업
#

set -euxo pipefail

test.py
docker build -t my_image:latest .  # 혹은 이 과정조차 스크립트로
docker push my_image:latest        # 이것도 마찬가지
#!/usr/bin/env bash

#
# Ver 2.
#   브랜치 이름을 기반으로, 태그를 붙여 배포하는 스크립트
#

set -euxo pipefail

GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)

docker build -t "my_image:$GIT_BRANCH" .
docker push "my_image:$GIT_BRANCH"

4. 정상작동 및 디버깅 가능하도록...

5. 재생산성

6. 빌드를 더 빠르게, 사이즈는 더 작게

끝으로...

(사족) 추가로?

References