스택큐힙리스트

CMD와 ENTRYPOINT는 Dockerfile에서의 차이점은 무엇인가요? 본문

카테고리 없음

CMD와 ENTRYPOINT는 Dockerfile에서의 차이점은 무엇인가요?

스택큐힙리스트 2023. 9. 2. 14:00
반응형

도커파일(Dockerfiles)에는 저에게 비슷해 보이는 두 개의 명령이 있습니다: 'CMD' 와 'ENTRYPOINT' . 하지만 아마 그들 사이에 (미묘한?) 차이가 있을 것이라고 생각합니다 - 그렇지 않으면 같은 것에 대해 두 개의 명령을 가지는 것은 아무런 의미가 없을텐데요.

단서에는 앵무새 보호자 - 에 대해 설명합니다 'CMD'

CMD의 주요 목적은 실행 중인 컨테이너에 대한 기본값을 제공하는 것입니다.

그리고 'ENTRYPOINT' 에 대해서는:

ENTRYPOINT는 실행 가능한 컨테이너로 구성할 수 있도록 도와줍니다.

그래서, 이 두 명령어 사이의 차이점은 무엇인가요?

답변 1

도커에는 기본 엔트리포인트인 '/bin/sh -c' 가 있지만 기본 명령어는 포함되어 있지 않습니다.

당신이 Docker를 다음과 같이 실행할 때:

'docker run -i -t ubuntu bash'

엔트리포인트는 기본값인 '/bin/sh -c' 이고, 이미지는 'ubuntu' 이며, 명령어는 'bash' 입니다.

명령은 엔트리포인트를 통해 실행됩니다. 즉, 실제로 실행되는 것은 '/bin/sh -c bash' 입니다. 이를 통해 도커는 쉘의 파서에 의존하여 'RUN' 를 빠르게 구현할 수 있게 되었습니다.

나중에 사람들은 이를 사용자 정의할 수 있도록 요청했으므로, 'ENTRYPOINT'와 '--entrypoint'가 도입되었습니다.

이미지 이름 이후에 있는 모든 것은 명령입니다. 위의 예시에서 #!&%!^$&&@#@$@% 이처럼 사용할 때, 실행하고 있는 것과 똑같이 됩니다.

'docker run -i -t ubuntu '

진입점의 매개변수는 '' 입니다.

만약 대신 아래 명령어를 입력한다면 동일한 결과를 얻을 수 있습니다. 'docker run -i -t ubuntu' : 컨테이너에서 bash 쉘이 시작될 것입니다. 왜냐하면 'ubuntu Dockerfile' 기본값인 'CMD' 가 지정되어 있기 때문입니다.

'CMD [bash]' .

모든 것이 엔트리포인트에 전달되기 때문에 이미지로부터 아주 좋은 동작을 얻을 수 있습니다. @Jiri의 예는 좋은 예입니다. 그것은 이진으로 이미지를 사용하는 방법을 보여줍니다. '[/bin/cat]' 을 엔트리포인트로 사용한 다음 'docker run img /etc/passwd' 을 실행하면, '/etc/passwd' 은 명령어이며 엔트리포인트로 전달되므로 최종 실행 결과는 단순히 '/bin/cat /etc/passwd' 가 됩니다.

다른 예로는 모든 cli를 진입점으로 사용하는 것입니다. 예를 들어 redis 이미지가 있는 경우, 'docker run redisimg redis -H something -u toto get key'을 실행하는 대신 'ENTRYPOINT [redis, -H, something, -u, toto]'을 갖고 이와 같은 결과를 얻으려면 다음과 같이 실행할 수 있습니다: 'docker run redisimg get key' .

답변 2

CMD와 ENTRYPOINT는 Dockerfile에서 컨테이너 내에서 실행할 명령어 또는 스크립트를 지정하는 데 사용되는 두 가지 지시문입니다. 이 둘의 차이를 이해하는 것은 Docker 컨테이너를 빌드하고 실행하는 데 매우 중요합니다.

CMD와 ENTRYPOINT는 컨테이너가 시작될 때 실행되는 명령어 또는 스크립트이지만, 그들 간에는 세부적인 차이가 있습니다.

CMD는 Dockerfile 내에서 한 번만 사용할 수 있으며, 컨테이너가 실행될 때 기본으로 실행되어야 하는 명령어를 지정하는 데 사용됩니다. CMD는 Docker run 명령어에 전달된 명령어와 함께 실행됩니다. Docker run 명령어에 이미 실행 명령어가 지정되어 있는 경우, CMD 지시문은 무시됩니다. 또한, Dockerfile 내에서 여러 개의 CMD 지시문이 있는 경우, 가장 마지막에 작성된 CMD 지시문이 적용됩니다. 즉, 이미지를 실행할 때 명령어를 지정하지 않았을 때만 CMD 지시문이 실행됩니다.

반면에, ENTRYPOINT는 Dockerfile 내에서 사용되는 수많은 지시문 중에서 가장 중요한 역할을 합니다. ENTRYPOINT는 컨테이너가 시작되고 종료될 때까지 계속 실행되며, CMD로 전달되는 인수와 함께 실행됩니다. ENTRYPOINT는 이미지가 실행될 때 항상 실행되는 명령어를 설정하는 데 사용됩니다. Docker run 명령어에서 실행 명령어가 함께 지정된 경우, ENTRYPOINT 지시문은 무시되지 않고 지정된 실행 명령어와 함께 실행됩니다. Dockerfile 내에서 여러 번 사용할 수 있지만, 가장 마지막 ENTRYPOINT 지시문만 적용됩니다.

결론적으로, CMD는 이미지를 실행할 때 명령어를 지정하지 않았을 때 실행되는 기본 명령어를 지정하는 데 사용되며, ENTRYPOINT는 항상 실행되는 명령어를 설정하는 데 사용됩니다. CMD는 Docker run 명령어의 실행 명령어로 덮어쓰일 수 있지만, ENTRYPOINT는 덮어쓰일 수 없습니다. 이러한 차이점을 고려하여 Dockerfile을 작성하고, Docker 컨테이너를 효과적으로 관리할 수 있습니다.

(Word count: 196)

반응형
Comments