더 나은 Dockerfile 작성을 위한 best practice - 2022년 버전
**https://docs.docker.com/develop/develop-images/dockerfile_best-practices/** 글을 번역하고 조금 이해가 안되는 부분은 개인적으로 내용을 추가 했습니다.
docker는 **Dockerfile
**을 읽어서 자동으로 이미지를 빌드 한다. 이 텍스트 파일 내부에는 주어진 이미지에서 실행되야할 모든 명령어가 담겨 있다.
**Dockerfile
**을 작성하는 방법은 여기에 나와 있다.
도커 이미지는 Dockerfile의 명령어를 나타내는 읽기전용 레이어로 구성되어 있다. 이 레이어가 쌓이고, 각 레이어는 이전 레이어에서 변경된 내용을 담고 있다. 다음 파일을 살펴보자.
# syntax=docker/dockerfile:1
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py
여기에서 각 명령어는 하나씩 레이어를 생성한다.
FROM
: ubuntu:18.04
도커 이미지로 부터 레이어를 생성한다.COPY
: 도커 클라이언트의 현재 디렉토리에서 파일을 추가한다.RUN
: make
명령어로 애플리케이션을 빌드CMD
: 컨테이너 내부에서 실행해야할 커맨드이미지를 실행하고 컨테이너를 생성할 때, 기본적으로 주어저있는 레이어 위에 새로운 writable 레이어를 추가한다. 파일 추가, 수정, 삭제 등 실행중인 컨테이너에 대한 모든 변경사항이 이 writable 레이어 위에서 기록된다.
**Dockerfile
**에 의해 정의된 이미지는 가능한 수명이 짧은 컨테이너를 생성해야 한다. 여기서 수명이 짧다 (ephemeral) 라는 것의 의미는, 컨테이너가 멈추고, 삭제되고 그리고 다시 빌드되고 재구축 되는 일련의 과정이 최소한의 구성과 설정으로 이루어져야 한다는 뜻이다.