티스토리 뷰
이미지를 입맛에 맞게 사용할때, 이미지를 새로 빌드하지 않고 실행시점에 ENTRYPOINT 를 엎어써서 사용하는게 유용하다.
이때, ENTRYPOINT 와 CMD 의 특징을 이해하고 작업하면 도움이 되므로 차이를 모른다면 아래글을 읽고 테스트해보자
2022.09.21 - [docker & kube] - [Docker] RUN, ENTRYPOINT, CMD 차이 이해하기
로컬에서 인사말 출력하기
이해를 돕기위해 아래와 같은 동작을 하는 쉘스크립트를 도커에서 어떻게 구성할지에 대해 접근해보자.
아래와 같은 쉘스크립트 동작을 도커에서 동작하게 한다고 가정한다.
% cat /home1/user/hello.sh
#!/bin/bash
for name in $@
do
echo "안녕하세요! <$name> 님 반갑습니다."
done
echo "완료!!"
% /home1/user/hello.sh 홍길동 둘리
안녕하세요! <홍길동> 님 반갑습니다.
안녕하세요! <둘리> 님 반갑습니다.
완료!!
도커를 통해 동작시켜보기
위에 만든 인사말 출력하기 스크립트를 도커를 통해 실행하도록 구성하는걸 해보겠다. 이미지를 따로 빌드하지 않고 실행시점에 재정의 하는 명령어의 예제이다. 샘플을 보면 알겠지만 ENTRYPOINT 의 인자값으로 CMD 를 사용한다는걸 알 수 있다.
즉, CMD 값이 없으면 ENTRYPOINT 만 실행되고, CMD 값이 있으면 ENTRYPOINT 실행시 인자값으로 사용된다는 말이다.
# CMD 값이 없으면 ENTRYPOINT 만 실행
% docker run --entrypoint ./script/hello.sh -v /home1/user:/script centos:latest
완료!!
# CMD 값이 있으면 ENTRYPOINT 의 인자값으로 전달후 실행
% docker run --entrypoint /script/hello.sh -v /home1/user:/script centos:latest 홍길동 토끼
안녕하세요! <홍길동> 님 반갑습니다.
안녕하세요! <토끼> 님 반갑습니다.
완료!!
명령어 | 설명 |
docker run | 도커 이미지를 실행한다는 의미 |
--entrypoint ./script/hello.sh | ENTRYPOINT 값을 의미한다 |
-v /home1/user:/script | 로컬경로의 폴더를 컨테이너안에서 접근할 수 있도록 맵핑하는 명령어 : 기준으로 왼쪽이 로컬경로, 오른쪽이 이미지 안에서의 경로명이다 |
centos:latest | 사용할 이미지 이름과 버전 |
홍길동 토끼 | CMD 값을 의미한다 |
마치며
두 기능의 동작을 이해하면 이미지 빌드없이 원하는 기능을 구성할 수도 있고, 내가 실행하고 싶은 명령어 이전에 어떤 명령어를 실행하도록 구성하는것도 가능하다. 실제로 커버로스 인증후 다양한 케이스의 하둡명령어를 실행하는 도커 이미지가 필요했는데 이걸 응용해서 구성한 이력이 있다.
마치기전에 많은 사람들이 ENTRYPOINT 와 CMD 가 동급이나 따로 동작하는걸로 이해해서 잘못 구성하는 경우가 있어서 표로 정리하면
아래와 같이 명령어가 사용된다고 이해하면 편할것 같다.
상황 | 설명 |
ENTRYPOINT 만 사용 | ENTRYPOINT 가 실행명령어 |
CMD 만 사용 (이미지에 ENTRYPOINT 미정의 되었다고 가정) |
CMD 가 실행명령어 이다 |
ENTRYPOINT + CMD 같이 사용 | ENTRYPOINT 가 실행명령어고 CMD 는 인자값이 된다 |
'docker & k8s > docker' 카테고리의 다른 글
[Docker] 디스크 용량 차지하는 문제 해결법 2가지 (0) | 2023.02.15 |
---|---|
[Docker] 윈도우용 도커 오류 : This error may indicate that the docker daemon is not running (0) | 2022.09.29 |
[Docker] 도커를 처음쓰면 알아야할 5가지 명령어 - 이미지 실행/확인/삭제 (0) | 2022.09.28 |
[Docker] server gave HTTP response to HTTPS client 오류 (0) | 2022.09.27 |
[Dockerfile] 초보자를 위한 build 와 push 하는 방법 (0) | 2022.09.26 |