프로그래밍/도커

[도커] 8. Dockerfile 요소

riroan 2022. 1. 2. 17:16

지난시간에 가장 간단한 Dockerfile를 빌드해 이미지를 만들었다.

 

이제 Dockerfile에 어떤 내용을 써야하는지 알아보려고 한다.

 

- FROM

기반 이미지 로드

FROM ubuntu:20.04

 

- MAINTAINER

개발자정보 입력(잘 사용하지 않는다. 대신 LABEL사용 추천)

MAINTAINER riroan

 

- LABEL

이미지 정보 입력

LABEL version="1.0" description="this is my image"

 

- RUN

FROM에서 로드한 이미지에서 실행할 명령이나 스크립트

RUN 명령어 사용 시 사용자와의 인터렉션이 있으면 안된다.(ex : 설치시 y/n누르는 부분)

# shell 에서
RUN echo hello world

# shell 없을 때
RUN ["echo", "hello", "world"]

 

- CMD

컨테이너 시작시 실행할 명령이나 스크립트

# shell 에서
CMD echo hello world

# shell 없을 때
CMD ["echo", "hello", "world"]

 

- ENTRYPOINT

컨테이너 시작시 실행할 명령이나 스크립트

# shell 에서
ENTRYPOINT echo hello world

# shell 없을 때
ENTRYPOINT ["echo", "hello", "world"]

 

CMD와 ENTRYPOINT는 많이 비슷해 보이는데 약간의 차이가 있다.

우선 둘 다 Dockerfile안에서 하나 이하로만 써야하는 점은 같다.

하지만 CMD와 ENTRYPOINT를 같이 쓸 경우 ENTRYPOINT가 적용된다.

또한 docker run 할 때 추가 명령어를 사용 할 수 있는데 CMD는 입력한 명령어로 대체될 수 있지만 ENTRYPOINT는 대체될 수 없다.

docker run example echo hello

 

- EXPOSE

컨테이너와 호스트를 연결할 포트 번호

EXPOSE 80

 

- ADD

로컬에 있는 파일을 이미지안에 복사한다.

이 때 압축파일은 압축을 풀어서 복사한다.

ADD . .

 

- COPY

로컬에 있는 파일을 이미지안에 복사한다.

이 때 압축파일은 그대로 복사한다.

COPY . .

 

- WORKDIR

컨테이너 실행 시 시작할 폴더를 지정한다.

WORKDIR /app

 

 

이번시간에 소개한 요소들은 Dockerfile 한 줄에 하나씩 들어가는 요소들이며 요소 하나당 레이어 하나가 된다.