지난 시간에 이어,
Dockerfile을 더 알아보자!
도커 파일 - 명령어 정리
도커 파일의 주요 instruction 중 명령어를 알아보자.
- 공통점: 도커 컨테이너에게 명령을 내린다
- 차이점: 명령어 실행 시점이 다르다
🙋♀️명령어 전달(실행) 방식 2가지
Docker파일의 명령어는
컨테이너에게 명령을 내린다고 했다.
이때, exec 방식또는shell 방식으로 명령어를 전달할 수 있다.
exec 방식
["echo", "hi"]
shell 방식
echo hi
🙋♀️1. RUN
- 하나의 Dockerfile에 여러번 지정 가능
FROM python:latest
RUN [“pip”, “install”, “numpy”] # 적용 o (1) exec form ([] 안에 “”로 감싼 명령어 및 인자를 줌)
RUN pip install cv2 # 적용 o (2) shell form
🙋♀️2. CMD
[실행시점] 이미지로부터 컨테이너를 생성하여 최초로 실행 시 수행될 명령어
FROM ubuntu:22.04
CMD [“/bin/bash”, “echo hello”] # 적용 x (마지막 하나만 적용), (1) exec form
CMD /test/test_program1 # 적용 o, (2) shell form
🙋♀️3. ENTRYPOINT
[실행시점] 이미지로부터 컨테이너를 생성하여 최초로 실행 시 반드시 수행될 명령어
FROM ubuntu:22.04
ENTRYPOINT echo “hi” # 적용 x (마지막 하나만 적용)
ENTRYPOINT [“echo”, "hi"] # 적용 o
🙋♀️CMD와 ENTRYPOINT의 차이점
ENTRYPOINT는 반드시 실행한다는 점이 있다.
Dockerfile 과 docker run 명령어를 실행하자고 하자
FROM ubuntu:22.04
ENTRYPOINT [“echo”, "hello"] # 적용 o (echo “hello”)
우선 ENTRYPOINT로 지정해보자!
$ docker build -t test/testImg .
후 docker build로 testImg 이미지를 생성한다
$ docker run --name test test/testImg df
이때
echo hello 명령어가 실행될까? df 명령어가 실행될까?
정답은 echo hello다!
단, CMD ["echo", "hello"]로 dockerfile을 작성했다면,
CMD의 경우라면 df 명령어가 실행된다
🙋♀️CMD와 ENTRYPOINT를 같이 쓴다면?
FROM ubuntu:22.04
ENTRYPOINT echo “hi” # 적용 x (마지막 하나만 적용)
CMD [“hello”] # 적용 o
ENTRYPOINT [“echo”] # 적용 o (echo “hello”)
놀랍게도 CMD + ENTRYPOINT가 하나의 명령어가 된다!
ENTRYPOINT 명령어의 인자(parameter)가 CMD가 되는 것이다!
단, CMD가 명령어가 아님을 주의하자
(이번 경우에는 "hello"로 명령어가 아니므로 patameter로 간주된다)
🙋♀️RUN, CMD, ENTRYPOINT 생성 시점 정리!
참고
exec 방식과 shell 방식의 차이 https://velog.io/@bonjugi/Dockerfile-명령어-실행-형식-2가지-Exec-Shell
다음 시간에는 Docker 이미지 관련 심화 명령어를 알아보자!
'클라우드 > 도커' 카테고리의 다른 글
[도커] 도커 8: 도커 이미지 심화 (0) | 2024.11.18 |
---|---|
[도커] 도커 7: 도커볼륨?(+ Dockerfile VOLUME) (0) | 2024.11.17 |
[도커] 도커 4: docker 파일 1 (Dockerfile) (3) | 2024.11.14 |
[도커] 도커 3: docker 명령어 모음 2탄 (도커 이미지 관련 명령어) (3) | 2024.11.13 |
[도커] 도커 2: docker 명령어 모음 1탄 (도커 컨테이너 관련 명령어) (1) | 2024.11.12 |