RUN vs CMD vs ENTRYPOINT - 매일 5 분 씩 Docker 용기 기술 돌리 기 (17)

RUN, CMD, ENTRYPOINT 세 개의 Dockerfile 명령 은 비슷 해 보이 고 헷 갈 리 기 쉽다.이 절 은 실천 을 통 해 그들의 차 이 를 상세 하 게 토론 할 것 이다.
간단히 말 하면
  • RUN 이 명령 을 수행 하고 새로운 미 러 층 을 만 드 는 RUN 은 패 키 지 를 설치 하 는 데 자주 사용 된다.
  • CMD 는 용기 가 시 작 된 후 기본적으로 실행 되 는 명령 과 인 자 를 설정 하지만 CMD 는  docker run  뒤에 있 는 명령 행 인자 교체.
  • ENTRYPOINT 는 용기 가 시 작 될 때 실행 되 는 명령 을 설정 합 니 다.

  • 다음은 우리 가 상세 하 게 분석 하 겠 다.
    Shell 과 Exec 형식
    저 희 는 RUN, CMD, ENTRYPOINT 가 실행 할 명령 셸 형식 과 Exec 형식 을 두 가지 방식 으로 지정 할 수 있 습 니 다.
    셸 형식
    예컨대
    RUN apt-get install python3  
    CMD echo "Hello world" 
    ENTRYPOINT echo "Hello world" 
    명령 이 실 행 될 때 셸 형식 바 텀 에서/bin/sh - c 를 호출 합 니 다. .
    예 를 들 어 아래 Dockerfile 세 션
    ENV name Cloud Man  
    ENTRYPOINT echo "Hello, $name" 
    docker run 을 실행 하면 출력 합 니 다.
    Hello, Cloud Man
     
    환경 변수 주의  name  이미 값 을 받다  Cloud Man  교체
    다음은 Exec 형식 을 살 펴 보 겠 습 니 다.
    Exec 형식
    ["executable", "param1", "param2", ...]
     
    예컨대
    RUN ["apt-get", "install", "python3"]  
    CMD ["/bin/echo", "Hello world"]  
    ENTRYPOINT ["/bin/echo", "Hello world"]
     
    명령 이 실 행 될 때 셸 에 의 해 해석 되 지 않 습 니 다.예 를 들 어 아래 Dockerfile 세 션
    ENV name Cloud Man  
    ENTRYPOINT ["/bin/echo", "Hello, $name"]
     
    용기 실행 시 출력
    Hello, $name
     
    환경 변수 'name' 이 바 뀌 지 않 았 음 을 주의 하 십시오.환경 변 수 를 사용 하려 면 다음 과 같이 수정 하 십시오.
    ENV name Cloud Man  
    ENTRYPOINT ["/bin/sh", "-c", "echo Hello, $name"]
     
    용기 실행 시 출력
    Hello, Cloud Man
     
    CMD 와 ENTRYPOINT 는 Exec 형식 을 추천 합 니 다. 명령 의 가 독성 이 강하 고 이해 하기 쉽 기 때 문 입 니 다.RUN 은 두 가지 포맷 모두 가능 합 니 다.
    RUN
    RUN 명령 은 보통 응용 프로그램 과 패 키 지 를 설치 하 는 데 쓰 인 다.
    RUN 은 현재 미 러 의 맨 위 에 명령 을 실행 하고 새 미 러 층 을 만 듭 니 다.Dockerfile 에는 항상 여러 개의 RUN 명령 이 포함 되 어 있다.
    RUN 은 두 가지 형식 이 있어 요.
  • Shell format RUN
  • Exec format RUN ["executable", "param 1", "param 2"]
  • 다음은 RUN 으로 여러 개의 가방 을 설치 하 는 예 입 니 다.
    RUN apt-get update && apt-get install -y\ 
     bzr\
     cvs\
     git\
     mercurial\
     subversion
     
    apt - get update 와 apt - get install 을 하나의 RUN 명령 에 넣 고 실행 하면 매번 설 치 된 것 이 최신 가방 임 을 보증 할 수 있 습 니 다.apt - get install 이 단독 RUN 에서 실행 되면 apt - get update 로 만 든 미 러 층 을 사용 합 니 다. 이 층 은 오래 전에 캐 시 되 었 을 수도 있 습 니 다.
    CMD
    CMD 명령 은 사용자 가 용기 의 기본 실행 명령 을 지정 할 수 있 도록 합 니 다.
    이 명령 은 용기 가 시작 되 고 docker run 이 다른 명령 을 지정 하지 않 았 을 때 실 행 됩 니 다.
  • docker run 이 다른 명령 CMD 가 지정 한 기본 명령 을 지정 하면 무시 합 니 다.
  • Dockerfile 에 CMD 명령 이 여러 개 있 으 면 마지막 CMD 만 유효 합 니 다.

  • CMD 는 세 가지 형식 이 있어 요.
  • Exec 포맷 CMD ["executable", "param 1", "param 2"] CMD 추천 포맷 입 니 다.
  • CMD ["param 1", "param 2"] 는 ENTRYPOINT 에 추가 인 자 를 제공 합 니 다. 이때 ENTRYPOINT 는 Exec 형식 을 사용 해 야 합 니 다.
  • 셸 형식 CMD 명령 param 1 param 2
  • Exec 와 Shell 형식 은 앞에서 이미 소개 되 었 습 니 다.두 번 째 형식 CMD ["param 1", "param 2"] 는 Exec 형식의 ENTRYPOINT 명령 과 함께 사용 해 야 합 니 다. 그 용 도 는 ENTRYPOINT 에 기본 인 자 를 설정 하 는 것 입 니 다.우 리 는 뒤에서 ENTRYPOINT 를 토론 할 때 예 를 들 어 설명 할 것 이다.
    CMD 가 어떻게 일 하 는 지 살 펴 보 겠 습 니 다.Dockerfile 세 션 은 다음 과 같 습 니 다.
    CMD echo "Hello world"
     
    용기 docker run - it [p w picpath] 를 실행 하면 출력 합 니 다.
    Hello world
     
    그러나 뒤에 docker run - it [p w picpath]/bin/bashCMD 와 같은 명령 을 추가 하면 명령 bash 가 무 시 됩 니 다.
    root@10a32dc7d3d3:/#
     
    ENTRYPOINT
    ENTRYPOINT 명령 은 용 기 를 응용 프로그램 이나 서비스 로 실행 할 수 있 습 니 다.
    ENTRYPOINT 는 CMD 와 비슷 해 보 입 니 다. 실행 할 명령 과 인 자 를 지정 할 수 있 습 니 다.다른 점 은 ENTRYPOINT 가 무시 되 지 않 고 반드시 실 행 될 것 입 니 다. docker run 을 실행 할 때 다른 명령 을 지정 하 더 라 도.
    ENTRYPOINT 는 두 가지 형식 이 있 습 니 다.
  • Exec 형식 ENTRYPOINT ["executable", "param 1", "param 2"] ENTRYPOINT 의 추천 형식 입 니 다.
  • 셸 형식 ENTRYPOINT 명령 param 1 param 2
  • ENTRYPOINT 를 위해 형식 을 선택 할 때 조심해 야 합 니 다. 이 두 가지 형식의 효과 차이 가 매우 크기 때 문 입 니 다.
    Exec 형식
    ENTRYPOINT 의 Exec 형식 은 실행 할 명령 과 인 자 를 설정 하 는 동시에 CMD 를 통 해 추가 인 자 를 제공 할 수 있 습 니 다.
    ENTRYPOINT 의 매개 변 수 는 항상 사용 되 고 CMD 의 추가 매개 변 수 는 용기 가 시 작 될 때 동적 으로 바 꿀 수 있 습 니 다.
    예 를 들 어 아래 Dockerfile 세 션.
    ENTRYPOINT ["/bin/echo", "Hello"]  
    CMD ["world"]
     
    용기 가 docker run - it [p w picpath] 를 통 해 시 작 될 때 출력 합 니 다.
    Hello world
     
    docker run - it [p w picpath] 를 통 해 CloudMan 을 시작 하면 출력 합 니 다.
    Hello CloudMan
     
    셸 형식
    ENTRYPOINT 의 Shell 형식 은 CMD 나 docker run 이 제공 하 는 인 자 를 무시 합 니 다.
    최선 의 실천
  • RUN 명령 으로 애플 리 케 이 션 과 패 키 지 를 설치 하여 미 러 를 구축한다.
  • Docker 미 러 의 용도 가 응용 프로그램 이나 서 비 스 를 실행 하 는 것 이 라면 MySQL 을 실행 할 때 Exec 형식의 ENTRYPOINT 명령 을 우선 사용 해 야 합 니 다.CMD 는 ENTRYPOINT 에 기본 인 자 를 추가 로 제공 할 수 있 으 며 docker run 명령 행 을 이용 하여 기본 인 자 를 교체 할 수 있 습 니 다.
  • 용기 에 기본 시작 명령 을 설정 하려 면 CMD 명령 을 사용 할 수 있 습 니 다.사용 자 는 docker run 명령 줄 에서 이 기본 명령 을 바 꿀 수 있 습 니 다.

  • 여기까지 우 리 는 Dockerfile 을 작성 할 능력 을 갖 추 었 다.Docker Hub 에 공식 미 러 를 참고 하 는 Docker file 을 빠르게 파악 하 는 방법 을 추천 할 자신 이 없다 면.자, 우 리 는 자신의 p 를 만 드 는 법 을 배 웠 습 니 다.w_picpath 다음 절 은 p 를 어떻게 나 누 어 주 는 지 토론 합 니 다.w_picpath.

    좋은 웹페이지 즐겨찾기