[도커] 도커 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)  (1) 2024.11.17
[도커] 도커 4: docker 파일 1 (Dockerfile)  (5) 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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바