[도커] 도커 5: docker 파일 2 (Dockerfile) - 도커 명령어

2024. 11. 15. 11:10·클라우드/도커

지난 시간에 이어,

Dockerfile을 더 알아보자!


도커 파일 - 명령어 정리

도커 파일의 주요 instruction 중 명령어를 알아보자.

 

- 공통점: 도커 컨테이너에게 명령을 내린다

- 차이점: 명령어 실행 시점이 다르다

 

 

🙋‍♀️명령어 전달(실행) 방식 2가지

Docker파일의 명령어는

컨테이너에게 명령을 내린다고 했다.

 

이때, exec 방식또는shell 방식으로 명령어를 전달할 수 있다.

 

exec 방식 

["echo", "hi"]

shell 방식

echo hi

 

 

🙋‍♀️1. RUN

[실행 시점] 도커 파일로부터 이미지 빌드 시 실행되는 명령어

 

- 주로 라이브러리 설치 시 많이 사용
- 새로운 이미지 layer 생성

- 하나의 Dockerfile에 여러번 지정 가능

FROM python:latest
RUN [“pip”, “install”, “numpy”]       # 적용 o (1) exec form ([] 안에 “”로 감싼 명령어 및 인자를 줌)
RUN  pip install cv2                  # 적용 o (2) shell form

 

🙋‍♀️2. CMD

[실행시점] 이미지로부터 컨테이너를 생성하여 최초로 실행 시 수행될 명령어 

 
- docker run에 명령어를 명시하는 경우, CMD내용은 실행 x (주의)
- Dockerfile에 하나만 적용 (마지막 항목만 적용)
FROM ubuntu:22.04
CMD [“/bin/bash”, “echo hello”]          # 적용 x (마지막 하나만 적용), (1) exec form 
CMD /test/test_program1                  # 적용 o, (2) shell form
 

🙋‍♀️3. ENTRYPOINT

[실행시점] 이미지로부터 컨테이너를 생성하여 최초로 실행 시 반드시 수행될 명령어

 
- docker run에 명령어를 명시하더라도, ENTRYPOINT내용은 실행 o
- Dockerfile에 하나만 적용 (마지막 항목만 적용)
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
'클라우드/도커' 카테고리의 다른 글
  • [도커] 도커 8: 도커 이미지 심화
  • [도커] 도커 7: 도커볼륨?(+ Dockerfile VOLUME)
  • [도커] 도커 4: docker 파일 1 (Dockerfile)
  • [도커] 도커 3: docker 명령어 모음 2탄 (도커 이미지 관련 명령어)
KyuminKim
KyuminKim
컴퓨터공학과 학생의 이모저모 개발 일지 📝
  • KyuminKim
    이모저모
    KyuminKim
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • 프로젝트 (2)
        • first-blog (2)
      • 클라우드 (22)
        • 도커 (14)
        • 쿠버네티스 (5)
        • AWS (2)
      • 알고리즘 (5)
        • 코드트리 (0)
        • 프로그래머스 (5)
      • 백엔드 (8)
      • 프론트엔드 (2)
      • 보안 (3)
        • 드림핵 (2)
      • python (3)
      • 네트워크 (1)
      • 기타 (6)
        • 2025 프로펙트 부트캠프(1차) | 클라우드 엔.. (0)
        • OSSCA | 2024 오픈소스 컨트리뷰션 아카데.. (0)
        • WIK (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    cannot send an empty message
    apiserver-runtime
    진단평가
    amazonlinux
    도커
    character_set_server
    티스토리챌린지
    오블완
    알고리즘
    코드트리
    자료구조
    코딩테스트
    2024 당근 테크 밋업
    고랭
    쿠버네티스
    DB
    코드트리조별과제
    urf8
    DP
    docker
    탈퇴구현
    주간레포트
    recover_your_data
    characterencoding
    인코딩
    도커파일
    MySQL
    EC2
    코딩트리조별과제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
KyuminKim
[도커] 도커 5: docker 파일 2 (Dockerfile) - 도커 명령어
상단으로

티스토리툴바