1. Docker layer caching을 활용하여 빌드 속도 빠르게 하기
1) Docker image가 빌드되는 방법
명령어 하나가 실행될 때마다 layer가 생성되는 방식으로 빌드
2) layer caching을 활용하여 속도 높이기
- 자주 변경되는 부분이 dockerfile의 위쪽에 있게 된다면 layer caching을 활용하지 못함
- 자주 변경되는 파일은 app.py와 index.html인 경우가 많음
- 자주 변경되는 파일을 아래로 작성하여 layer caching을 활용하자
// 좋은 예
FROM python:3.8
ADD requirements.txt .
RUN pip install -r requirements.txt
ADD app.py .
ADD templates ./templates/
CMD ["python", "app.py"]
// 나쁜 예
FROM python:3.8
ADD app.py .
ADD templates ./templates/
ADD requirements.txt .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
2. dockerignore 활용
docker는 image를 빌드할 때의 작업 디렉토리를 Build context라고 함
ADD . . 같은 command를 이용할 경우, 의도하지 않은 파일이 포함되어 image 사이즈가 증가하는 이슈가 있음
.dockerignore.txt 파일 추가하기
3. 작은 base image 사용하기
Docker image의 크기가 작을 수록 docker pull 속도가 향상되어 더 빠르게 docker container를 실행할 수 있음
tag를 확인하여 작은 image를 선택하여 사용해보자
alpine
- 보안에 집중한 alpine-linux를 기반으로 만들어진 image
- 보통 모든 이미지들 중 가장 작음
- python 기준, pip install할 때 불리한 점이 있는 것을 알아둘 것
buster, jessie, stretch
- debian에서 만든 Linux를 기반으로 만들어진 Image
- buster, jessie, stretchsms os의 codename임
slim
- 실행에 필요한 환경만 만들어진 image
- 이미지가 기본 이미지에 비해서 작음
- 보통 python 실행 환경에서 많이 사용하는 이미지
4. Docker image 축소하기
multistage build 활용: Dockerfile 한 개에 여러 FROM 구문을 작성하는 것
각 command 실행 과정에서 생성된 것 중 필요한 것만 가져와서 새 이미지를 생성하게 할 수 있음
// Dockerfile
FROM python:3.8-slim AS builder // 빌더용 이미지
ADD requirements.txt requirements.txt // 라이브러리를 다운받기위한 dependency가 작성된 requirements파일
RUN pip install -r requirements.txt // 다운로드 실행
FROM python:3.8-slim-buster
COPY --from=builder/usr/local/lib/python3.8/site-packages /usr/local/lib/python3.8/site-packages // 만들어진 것을 복사해서 사용
ADD templates templates
ADD app.py .
CMD ["python", "app.py"]
'Docker' 카테고리의 다른 글
[Docker] 맥북 m2 홈브루(homebrew)로 도커 설치 (0) | 2024.01.08 |
---|---|
도커(docker)와 Github action(깃헙 액션)으로 CI/CD 구현하기 (1) | 2022.12.16 |
[Docker] 도커의 데이터 공유 - named volume, bind mount (0) | 2022.12.16 |
AWS EC2 서버에서 도커(docker)로 서비스 배포하기 (0) | 2022.12.16 |
도커(docker) 사용하지 않는 docker 리소스 정리하기 (0) | 2022.12.16 |