지난시간에 가장 간단한 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 한 줄에 하나씩 들어가는 요소들이며 요소 하나당 레이어 하나가 된다.
'프로그래밍 > 도커' 카테고리의 다른 글
[도커] 10. 도커 네트워크 (3) | 2022.08.15 |
---|---|
[도커] 9. 도커 이미지 만들기 (0) | 2022.01.03 |
[도커] 7. 가장 간단한 이미지 만들기 (0) | 2022.01.01 |
[도커] special. VScode에서 ssh 접속하기 (0) | 2021.12.31 |
[도커] special. AWS 보안 (0) | 2021.12.30 |