etc./StackOverFlow

Dockerfile에서 CMD와 ENTRYPOINT의 차이점은 무엇입니까?

청렴결백한 만능 재주꾼 2021. 12. 3. 08:21
반응형

질문자 :Golo Roden


CMDENTRYPOINT 라는 두 가지 명령이 나와 비슷합니다. 그러나 나는 그들 사이에 (미묘한?) 차이점이 있다고 생각합니다. 그렇지 않으면 똑같은 것에 대해 두 개의 명령을 갖는 것이 의미가 없습니다.

CMD 대한 설명서 상태

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

ENTRYPOINT :

ENTRYPOINT는 실행 파일로 실행할 수 있는 컨테이너를 구성하는 데 도움이 됩니다.

그렇다면 두 명령의 차이점은 무엇입니까?



/bin/sh -c 기본 진입점이 있지만 기본 명령은 없습니다.

다음과 같이 docker를 실행하면 docker run -i -t ubuntu bash 진입점은 기본 /bin/sh -c 이고 이미지는 ubuntu 이고 명령은 bash 입니다.

명령은 진입점을 통해 실행됩니다. 즉, 실제로 실행되는 것은 /bin/sh -c bash 입니다. 이를 통해 Docker는 쉘의 파서에 의존하여 RUN

나중에 사람들이 이것을 사용자 정의할 수 있도록 요청하여 ENTRYPOINT--entrypoint 가 도입되었습니다.

ubuntu 이후의 모든 것은 명령이며 진입점으로 전달됩니다. CMD 명령어를 사용할 때 docker run -i -t ubuntu <cmd> 수행하는 것과 정확히 같습니다. <cmd> 는 진입점의 매개변수가 됩니다.

대신 이 명령을 입력해도 동일한 결과를 얻을 수 있습니다. docker run -i -t ubuntu 우분투 Dockerfile 이 기본 CMD: CMD ["bash"] 지정했기 때문에 여전히 컨테이너에서 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 .


creack

ENTRYPOINT 는 컨테이너가 시작될 때 항상 실행될 명령을 지정합니다.

CMD ENTRYPOINT 될 인수를 지정합니다.

특정 명령 전용 이미지를 만들려면 ENTRYPOINT ["/path/dedicated_command"]

그렇지 않고 범용 이미지를 만들고 싶다면 ENTRYPOINT 지정하지 않고 CMD ["/path/dedicated_command"] docker run 인수를 제공하여 설정을 재정의할 수 있습니다.

예를 들어 Dockerfile이 다음과 같은 경우:

 FROM debian:wheezy ENTRYPOINT ["/bin/ping"] CMD ["localhost"]

인수 없이 이미지를 실행하면 localhost가 ping됩니다.

 $ docker run -it test PING localhost (127.0.0.1): 48 data bytes 56 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.096 ms 56 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.088 ms 56 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.088 ms ^C--- localhost ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.088/0.091/0.096/0.000 ms

이제 인수로 이미지를 실행하면 인수를 ping합니다.

 $ docker run -it test google.com PING google.com (173.194.45.70): 48 data bytes 56 bytes from 173.194.45.70: icmp_seq=0 ttl=55 time=32.583 ms 56 bytes from 173.194.45.70: icmp_seq=2 ttl=55 time=30.327 ms 56 bytes from 173.194.45.70: icmp_seq=4 ttl=55 time=46.379 ms ^C--- google.com ping statistics --- 5 packets transmitted, 3 packets received, 40% packet loss round-trip min/avg/max/stddev = 30.327/36.430/46.379/7.095 ms

비교를 위해 Dockerfile이 다음과 같은 경우:

 FROM debian:wheezy CMD ["/bin/ping", "localhost"]

인수 없이 이미지를 실행하면 localhost가 ping됩니다.

 $ docker run -it test PING localhost (127.0.0.1): 48 data bytes 56 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.076 ms 56 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.087 ms 56 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.090 ms ^C--- localhost ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.076/0.084/0.090/0.000 ms

그러나 인수와 함께 이미지를 실행하면 인수가 실행됩니다.

 docker run -it test bash root@e8bb7249b843:/#

자세한 내용은 Brian DeHamer의 다음 기사를 참조하십시오. https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/


Daishi

도커 문서 에 따르면,

CMD 및 ENTRYPOINT 명령어는 모두 컨테이너를 실행할 때 실행되는 명령을 정의합니다. 그들의 협력을 설명하는 몇 가지 규칙이 있습니다.

  1. CMD 또는 ENTRYPOINT 명령 중 하나 이상을 지정해야 합니다.
  2. 컨테이너를 실행 파일로 사용할 때 ENTRYPOINT
  3. CMD ENTRYPOINT 명령에 대한 기본 인수를 정의하거나 컨테이너에서 임시 명령을 실행하는 방법으로 사용해야 합니다.
  4. 대체 인수로 컨테이너를 실행할 때 CMD

아래 표 ENTRYPOINT / CMD 조합에 대해 실행되는 명령을 보여줍니다.

-- No ENTRYPOINT

 ╔════════════════════════════╦═════════════════════════════╗ ║ No CMD ║ error, not allowed ║ ╟────────────────────────────╫─────────────────────────────╢ ║ CMD ["exec_cmd", "p1_cmd"] ║ exec_cmd p1_cmd ║ ╟────────────────────────────╫─────────────────────────────╢ ║ CMD ["p1_cmd", "p2_cmd"] ║ p1_cmd p2_cmd ║ ╟────────────────────────────╫─────────────────────────────╢ ║ CMD exec_cmd p1_cmd ║ /bin/sh -c exec_cmd p1_cmd ║ ╚════════════════════════════╩═════════════════════════════╝

-- ENTRYPOINT exec_entry p1_entry

 ╔════════════════════════════╦══════════════════════════════════╗ ║ No CMD ║ /bin/sh -c exec_entry p1_entry ║ ╟────────────────────────────╫──────────────────────────────────╢ ║ CMD ["exec_cmd", "p1_cmd"] ║ /bin/sh -c exec_entry p1_entry ║ ╟────────────────────────────╫──────────────────────────────────╢ ║ CMD ["p1_cmd", "p2_cmd"] ║ /bin/sh -c exec_entry p1_entry ║ ╟────────────────────────────╫──────────────────────────────────╢ ║ CMD exec_cmd p1_cmd ║ /bin/sh -c exec_entry p1_entry ║ ╚════════════════════════════╩══════════════════════════════════╝

-- ENTRYPOINT ["exec_entry", "p1_entry"]

 ╔════════════════════════════╦═════════════════════════════════════════════════╗ ║ No CMD ║ exec_entry p1_entry ║ ╟────────────────────────────╫─────────────────────────────────────────────────╢ ║ CMD ["exec_cmd", "p1_cmd"] ║ exec_entry p1_entry exec_cmd p1_cmd ║ ╟────────────────────────────╫─────────────────────────────────────────────────╢ ║ CMD ["p1_cmd", "p2_cmd"] ║ exec_entry p1_entry p1_cmd p2_cmd ║ ╟────────────────────────────╫─────────────────────────────────────────────────╢ ║ CMD exec_cmd p1_cmd ║ exec_entry p1_entry /bin/sh -c exec_cmd p1_cmd ║ ╚════════════════════════════╩═════════════════════════════════════════════════╝

Rafaf Tahsin

네, 좋은 질문입니다. 아직 완전히 이해하지는 못했지만 다음과 같습니다.

ENTRYPOINT 가 실행 중인 바이너리임을 이해합니다. --entrypoint=""로 진입점을 재정의할 수 있습니다.

 docker run -t -i --entrypoint="/bin/bash" ubuntu

CMD는 컨테이너의 기본 인수입니다. 진입점이 없으면 기본 인수는 실행되는 명령입니다. 진입점을 사용하면 cmd가 진입점에 인수로 전달됩니다. 진입점으로 명령을 에뮬레이트할 수 있습니다.

 # no entrypoint docker run ubuntu /bin/cat /etc/passwd # with entry point, emulating cat command docker run --entrypoint="/bin/cat" ubuntu /etc/passwd

따라서 주요 이점은 진입점을 사용하여 컨테이너에 인수(cmd)를 전달할 수 있다는 것입니다. 이를 수행하려면 다음 두 가지를 모두 사용해야 합니다.

 # Dockerfile FROM ubuntu ENTRYPOINT ["/bin/cat"]

그리고

 docker build -t=cat .

다음을 사용할 수 있습니다.

 docker run cat /etc/passwd # ^^^^^^^^^^^ # CMD # ^^^ # image (tag)- using the default ENTRYPOINT

Jiri

직관에 의한 CMD와 ENTRYPOINT의 차이점 :

  • ENTRYPOINT: 컨테이너가 시작될 때 실행할 명령입니다.
  • CMD: 컨테이너가 시작될 때 실행할 명령 또는 지정된 경우 ENTRYPOINT에 대한 인수.

예, 혼란스럽습니다.

docker run을 실행할 때 이들 중 무엇이든 재정의할 수 있습니다.

예를 들어 CMD와 ENTRYPOINT의 차이점:

 docker run -it --rm yourcontainer /bin/bash <-- /bin/bash overrides CMD <-- /bin/bash does not override ENTRYPOINT docker run -it --rm --entrypoint ls yourcontainer <-- overrides ENTRYPOINT with ls docker run -it --rm --entrypoint ls yourcontainer -la <-- overrides ENTRYPOINT with ls and overrides CMD with -la

CMDENTRYPOINT 차이점에 대한 추가 정보:

docker run 인수는 Dockerfile에 작성한 모든 CMD 명령을 재정의합니다.

docker run [args] 와 같은 일반 명령으로 재정의할 수 없습니다. docker run [args] 끝에 있는 args 는 ENTRYPOINT에 대한 인수로 제공됩니다. 이런 식으로 우리는 ls 와 같은 일반 바이너리와 같은 container 를 만들 수 있습니다.

따라서 CMD는 ENTRYPOINT에 대한 기본 매개변수로 작동할 수 있으며 [args]에서 CMD 인수를 재정의할 수 있습니다.

엔트리 포인트가 함께 오버라이드 (override) 할 수 있습니다 --entrypoint .


Tomer Ben David

간단히 말해서:

  • CMD는 도커 컨테이너가 실행될 때 명령줄에서 덮어쓸 수 있는 기본 명령 및/또는 매개변수를 설정합니다.
  • ENTRYPOINT 명령 및 매개변수는 명령줄에서 덮어쓰지 않습니다. 대신 모든 명령줄 인수가 ENTRYPOINT 매개변수 뒤에 추가됩니다.

더 자세한 내용이 필요하거나 예를 들어 차이점을 보고 싶다면 CMD와 ENTRYPOINT를 많은 예와 함께 포괄적으로 비교하는 블로그 게시물이 있습니다. http://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/


upitau

차이점을 더 잘 이해하는 데 도움이 될 수 있는 예제 1 로 내 답변을 추가하겠습니다.

시작할 때 항상 절전 명령을 실행하는 이미지를 생성한다고 가정해 보겠습니다. 자체 이미지를 만들고 새 명령을 지정합니다.

 FROM ubuntu CMD sleep 10

이미지 구축:

 docker build -t custom_sleep . docker run custom_sleep # sleeps for 10 seconds and exits

초 수를 변경하려면 어떻게 해야 합니까? Dockerfile 을 변경하거나 다른 값을 제공하여 명령을 재정의해야 합니다.

 docker run custom_sleep sleep 20

이것이 작동하는 동안에는 중복 "잠자기" 명령이 있으므로 좋은 솔루션이 아닙니다. 중복되는 이유는 무엇입니까? 컨테이너의 유일한 목적은 sleep sleep 명령을 명시적으로 지정해야 하는 것은 약간 어색합니다.

ENTRYPOINT 명령어를 사용해 보겠습니다.

 FROM ubuntu ENTRYPOINT sleep

이 명령 은 컨테이너가 시작될 때 실행될 프로그램을 지정합니다 .

이제 다음을 실행할 수 있습니다.

 docker run custom_sleep 20

기본값은 어떻습니까? 글쎄, 당신은 그것을 올바르게 추측했습니다.

 FROM ubuntu ENTRYPOINT ["sleep"] CMD ["10"]

ENTRYPOINT 는 실행될 프로그램이며 컨테이너에 전달된 값이 추가됩니다.

ENTRYPOINT --entrypoint 플래그와 함께 사용하려는 새 진입점을 지정하여 재정의할 수 있습니다.

내 것이 아니라 이 예제를 제공하는 자습서를 본 적이 있습니다.


Maroun

그것에 대한 몇 가지 좋은 답변이 있습니다. Doc 별 데모를 통해 설명하고 싶습니다.

  • CMD 는 컨테이너에 대한 기본 명령 및/또는 매개변수를 정의합니다. CMD는 사용자가 쉽게 재정의할 수 있는 기본 명령이 필요한 경우 사용하는 것이 가장 좋은 명령입니다. Dockerfile에 여러 CMD가 있는 경우 마지막 명령의 지침만 적용합니다.
  • ENTRYPOINT 는 특정 실행 파일로 컨테이너를 정의하려는 경우 선호됩니다.

--entrypoint 플래그를 추가하지 않으면 컨테이너를 시작할 때 ENTRYPOINT 재정의할 수 없습니다.

  1. 명령

도커 파일

 FROM centos:8.1.1911 CMD ["echo", "Hello Docker"]

실행 결과

 $ sudo docker run <image-id> Hello Docker $ sudo docker run <image-id> hostname # hostname is exec to override CMD 244be5006f32
  1. 진입 지점

도커 파일

 FROM centos:8.1.1911 ENTRYPOINT ["echo", "Hello Docker"]

실행 결과

 $ sudo docker run <image-id> Hello Docker $ sudo docker run <image-id> hostname # hostname as parameter to exec Hello Docker hostname
  1. CMD와 ENTRYPOINT를 결합하는 것이 Docker 컨테이너에 가장 적합한 솔루션이 되는 많은 상황이 있습니다. 이러한 경우 실행 파일은 ENTRYPOINT로 정의되고 CMD는 기본 매개변수를 지정합니다.

도커 파일

 FROM centos:8.1.1911 ENTRYPOINT ["echo", "Hello"] CMD ["Docker"]

실행 결과

 $ sudo docker run <image-id> Hello Docker $ sudo docker run <image-id> Ben Hello Ben

zangw

허용 된 답변은 역사를 설명하는 데 훌륭합니다. 이 표는 'CMD와 ENTRYPOINT가 상호 작용하는 방식'에 대한 공식 문서에서 매우 잘 설명하고 있습니다. 여기에 이미지 설명 입력


Devs love ZenUML

나는이 건너와 내가 정말 정직하게 혼란 내가 실제로 인수로이 역할을가는 것 때문에 혼란이 단어 "CMD"를 사용에서 오는 생각 발견부터 실행됩니다. 그래서 조금 파고 나서 그것이 어떻게 작동하는지 이해했습니다. 원래:

ENTRYPOINT --> 여기서 지정하는 것은 컨테이너가 시작될 때 실행할 명령입니다. 이 정의를 생략하면 docker는 /bin/sh -c bash 를 사용하여 컨테이너를 실행합니다.

CMD --> 사용자가 사용자 지정 인수를 지정하지 않는 한 ENTRYPOINT에 추가된 docker run ubuntu <custom_cmd> 이 경우 CMD 섹션의 이미지에 지정된 것을 추가하는 대신 docker는 ENTRYPOINT <custom_cmd> . ENTRYPOINT가 지정되지 않은 경우 여기에 있는 내용은 실제로 컨테이너를 시작할 때 실행할 명령으로 작동하는 /bin/sh -c

모든 것이 어떻게 진행되고 있는지 예를 들어 설명하는 것이 좋습니다. 다음 사양 Dockerfile 을 사용하여 간단한 도커 이미지를 생성한다고 가정해 보겠습니다.

 From ubuntu ENTRYPOINT ["sleep"]

그런 다음 다음을 실행하여 빌드합니다.

 docker build . -t testimg

이렇게 하면 실행할 때마다 잠자기 상태가 되는 컨테이너가 생성됩니다. 그래서 다음과 같이 실행하면 :

 docker run testimg

나는 다음을 얻을 것이다:

 sleep: missing operand Try 'sleep --help' for more information.

이것은 진입점이 인수가 필요한 "sleep" 명령이기 때문에 발생합니다. 따라서 이 문제를 해결하기 위해 수면 시간을 제공하겠습니다.

 docker run testimg 5

이것은 올바르게 실행되고 결과적으로 컨테이너가 실행되고 5초 동안 휴면 상태가 된 후 종료됩니다. 이 예제에서 볼 수 있듯이 docker는 이미지 이름 뒤에 오는 항목을 진입점 바이너리 docker run testimg <my_cmd> . 진입점에 기본값(기본 인수)을 전달하려는 경우 어떻게 됩니까? 이 경우 CMD 섹션에서 지정하기만 하면 됩니다. 예를 들면 다음과 같습니다.

 From ubuntu ENTRYPOINT ["sleep"] CMD ["10"]

이 경우 사용자가 인수를 전달하지 않으면 컨테이너는 기본값(10)을 사용하여 진입점 절전 모드로 전달합니다.

이제 CMD만 사용하고 ENTRYPOINT 정의를 생략하겠습니다.

 FROM ubuntu CMD ["sleep", "5"]

이 이미지를 다시 빌드하고 실행하면 기본적으로 5초 동안 휴면 상태가 됩니다.

요약하면 ENTRYPOINT 를 사용하여 컨테이너를 실행 파일로 사용할 수 있습니다. CMD 를 사용하여 진입점에 기본 인수를 제공하거나 사용자가 외부에서 재정의할 수 있는 컨테이너를 시작할 때 사용자 지정 명령을 실행할 수 있습니다.


rkachach

코드의 EntryPoint 함수에 대한 설명

// 진입점 /usr/sbin/nginx.

// 진입점(기본값은 sh -c)을 /usr/sbin/nginx로 설정합니다.

// /usr/sbin/nginx에 대한 인수로 CMD를 수락합니다.

문서의 또 다른 참조

ENTRYPOINT의 exec 형식을 사용하여 상당히 안정적인 기본 명령 및 인수 를 설정한 다음 CMD를 사용하여 변경될 가능성이 더 큰 추가 기본값을 설정할 수 있습니다.

예시:

 FROM ubuntu:14.04.3 ENTRYPOINT ["/bin/ping"] CMD ["localhost", "-c", "2"]

빌드 : sudo docker build -t ent_cmd .

 CMD arguments are easy to override. NO argument (sudo docker -it ent_cmd) : ping localhost argument (sudo docker run -it ent_cmd google.com) : ping google.com

.

 To override EntryPoint argument, you need to supply entrypoint sudo docker run -it --entrypoint="/bin/bash" ent_cmdd

ps: EntryPoint가 있는 경우 CMD는 EntryPoint에 공급할 인수를 보유합니다. EntryPoint가 없으면 CMD가 실행될 명령입니다.


Tahir Rauf

나는 모든 답변을 읽었으며 다음과 같이 언뜻보기에 더 나은 이해를 위해 요약하고 싶습니다.

첫째, 컨테이너에서 실행되는 전체 명령 은 명령인수의 두 부분으로 구성됩니다.

  • ENTRYPOINT 는 컨테이너가 시작될 때 호출되는 실행 파일을 정의합니다(명령의 경우).

  • CMD 는 ENTRYPOINT에 전달되는 인수를 지정합니다(인수용)

Kubernetes In Action 책에서 이에 대한 중요한 참고 사항을 지적합니다. (7장)

CMD 명령을 사용하여 이미지가 실행될 때 실행할 명령을 지정할 수 있지만 올바른 방법은 ENTRYPOINT 명령을 통해 수행하고 기본 인수를 정의하려는 경우 에만 CMD를 지정하는 것입니다.

간단한 방법으로 훌륭한 설명을 위해 기사를 읽을 수도 있습니다.


fgul

명령:

  • CMD ["executable","param1","param2"] : ["executable","param1","param2"] 가 첫 번째 프로세스입니다.
  • CMD command param1 param2 : /bin/sh -c CMD command param1 param2 는 첫 번째 프로세스입니다. CMD command param1 param2 는 첫 번째 프로세스에서 분기됩니다.
  • CMD ["param1","param2"] ENTRYPOINT 에 대한 기본 인수를 제공하는 데 사용됩니다.

ENTRYPOINT(다음 목록은 CMD와 ENTRYPOINT가 함께 사용되는 경우를 고려하지 않음):

  • ENTRYPOINT ["executable", "param1", "param2"] : ["executable", "param1", "param2"] 가 첫 번째 프로세스입니다.
  • ENTRYPOINT command param1 param2 : /bin/sh -c command param1 param2 는 첫 번째 프로세스입니다. command param1 param2 는 첫 번째 프로세스에서 분기됩니다.

크랙이 말했듯이 CMD가 먼저 개발되었습니다. 그런 다음 ENTRYPOINT는 더 많은 사용자 정의를 위해 개발되었습니다. 함께 설계되지 않았기 때문에 CMD와 ENTRYPOINT 간에 일부 기능이 중복되어 종종 사람들을 혼란스럽게 합니다.


Jingguo Yao

CMD 내부에 언급 명령 Dockerfile 파일로 대체 될 수 있습니다 docker run 하면서 명령 ENTRYPOINT 될 수 없습니다.


Anshul Singhal

대부분의 사람들은 여기에서 완벽하게 설명하므로 모든 답변을 반복하지는 않겠습니다. 그러나 좋은 느낌을 얻으려면 컨테이너의 프로세스를 보고 직접 테스트하는 것이 좋습니다.

다음 형식의 작은 Dockerfile을 만듭니다.

 FROM ubuntu:latest CMD /bin/bash

빌드하고 docker run -it theimage 로 실행 ps -eo ppid,pid,args 를 실행합니다. 이 출력을 다음을 사용할 때 ps에서 받은 출력과 비교하십시오.

  • docker run -it theimage bash
  • ENTRYPOINT /bin/bash 사용하여 이미지를 다시 빌드하고 두 가지 방법으로 실행
  • CMD 사용 CMD ["/bin/bash"]
  • ...

이렇게 하면 가능한 모든 방법 간의 차이점을 쉽게 확인할 수 있습니다.


Garo

Dockerfile 모범 사례의 공식 문서는 차이점을 잘 설명합니다. Dockerfile 모범 사례

명령:

CMD 명령은 인수와 함께 이미지에 포함된 소프트웨어를 실행하는 데 사용해야 합니다. CMD는 거의 항상 CMD ["executable", "param1", "param2"…] 형식으로 사용해야 합니다. 따라서 이미지가 Apache 및 Rails와 같은 서비스 CMD ["apache2","-DFOREGROUND"] 와 같은 것을 실행합니다. 실제로 이 형식의 지침은 모든 서비스 기반 이미지에 권장됩니다.

진입 지점:

ENTRYPOINT의 가장 좋은 용도는 이미지의 기본 명령을 설정하여 해당 이미지가 해당 명령인 것처럼 실행되도록 하는 것입니다(그런 다음 CMD를 기본 플래그로 사용).


MIYUKI NARAHARA

• Dockerfile은 적어도 하나의 CMD 또는 ENTRYPOINT 명령어를 지정해야 합니다.

• Dockerfile의 마지막 CMD 및 ENTRYPOINT만 사용됩니다.

• 컨테이너를 실행 파일로 사용할 때 ENTRYPOINT를 정의해야 합니다.

• ENTRYPOINT로 정의된 명령에 대한 기본 인수를 정의하거나 컨테이너에서 임시 명령을 실행하는 방법으로 CMD 명령을 사용해야 합니다.

• 대체 인수로 컨테이너를 실행할 때 CMD가 무시됩니다.

• ENTRYPOINT는 이미지를 사용하여 컨테이너를 생성할 때마다 사용되는 구체적인 기본 애플리케이션을 설정합니다.

• ENTRYPOINT를 CMD와 결합하면 CMD에서 실행 파일을 제거하고 ENTRYPOINT로 전달될 인수를 그대로 둘 수 있습니다.

• ENTRYPOINT의 가장 좋은 용도는 이미지의 기본 명령을 설정하여 해당 이미지가 해당 명령인 것처럼 실행되도록 하는 것입니다(그런 다음 CMD를 기본 플래그로 사용).


Thuan Tran

출처 : http:www.stackoverflow.com/questions/21553353/what-is-the-difference-between-cmd-and-entrypoint-in-a-dockerfile

반응형