본문 바로가기

Docker

도커(docker) 사용 🍯꿀 팁!

 

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"]