CMD, ENTRYPOINT, RUN에 대해 질문드립니다.
436
投稿した質問数 2
안녕하세요.
도커를 활용하면서 궁금한 점이 생겨 질문드립니다.
이따금 간단히 코드를 실행하는 dockerfile을 보면,
어떤 경우는 CMD, 다른 경우는 RUN을 쓰고 ENTRYPOINT를 쓰는 곳도 있었습니다.
예를 들어 gcc 도커 이미지의 경우,
FROM gcc:7
COPY . /app
WORKDIR /app
RUN gcc -o app main.c
CMD ["./app"]
이런 식으로 RUN 다음 CMD를 적어 두는 경우도 있고,
파이선의 경우
FROM python:3
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./your-daemon-or-script.py" ]
이렇게 CMD 구문만으로 실행하기도 합니다.
위 코드들 대신
CMD [ "gcc", "./main.c" ]
RUN python ./your-daemon-or-script.py
이런 식으로 써도 되는지, 어떤 경우에서는 CMD와 RUN은 구분되어 쓰여야 하는지 질문드리고 싶습니다.
* 도커는 쓰면 쓸수록 유용함을 느낍니다. 강의를 만들어주셔서 다시 한 번 감사드립니다.
回答 1
1
도커의 유용함을 느끼고 계신다니 축하드립니다. 😀
저 또한 CMD 와 RUN 의 쓰임새가 궁금한적이 있었는데요.
먼저 RUN 은 명령어를 실행하고 이미지에 새로운 레이어를 생성합니다. 이는 도커 이미지 용량 & 빌드 시간 최적화에 유용합니다.
강의에서 말씀드린대로 도커는 이미지는 레이어를 층층히 쌓아 올린 개념입니다. 이때 자주 사용되는 패키지를 RUN 명령어로 Dockerfile 에 선언 해두면 해당 패키지까지 설치한 레이어가 생기겠죠. 덕분에 같은 라이브러리를 사용하지만 다른 이미지를 빌드할때 해당 레이어를 가져와 이미지를 빌드할겁니다. 이는 레이어의 재사용성을 높여 이미지 사이즈와 빌드 시간을 줄여주겠죠.
반면 CMD 는 레이어와 아무 상관이 없습니다. 이는 도커가 실행(run) 될때 컨테이너 내부에서 기본적으로 실행하는 명령어를 선언 해두는 역할을 합니다. 질문에 작성해주신것 처럼 파이썬을 실행하거나, gcc 로 빌드한 바이너리 파일을 실행하는 일을 할 수 있겠죠.
여기서 중요한점은 우리가 CMD 명령어를 덮어쓰기(override) 가능 하다는 점인데요. 이를 위해서 docker run 명령어 인자 중에서 [command] 가 존재합니다.
docker run -d busybox echo hello world 이런 식으로 말이죠 :)
따라서 마지막에 RUN 과 CMD 명령어를 바꿔서 사용해도 괜찮냐고 하셨는데, 그건 우리가 작성할 Dockerfile 이 어떻게 작동하길 원하냐에 따라 달라질것 같습니다. 😀
가령 RUN python ./your-daemon-or-script.py 라는 명령어의 결과가 레이어로 캐시가 되고, 이미지를 빌드할때 "언제나" 실행되길 원한다면 RUN 명령어로 사용 하는식으로요.
제 답변이 도움이 됐으면 좋겠습니다.
이제 인프런에서 강의 더 안산다. 후져....
0
19
0
소스코드 어디서 다운받아요?
0
31
5
Docker 환경
0
46
2
Windows localhost:30000 연결 거부 현상
0
37
2
수강완료 후 문의 드립니다.
1
37
2
[15. ConfigMap, Secret - 실습] Env (File) 실습 시 문의사항
1
46
2
페어링 오류
0
39
2
코드자료 활용 깃
1
32
2
Node Schedule 실습 시 pod3 생성 시 메모리 요청량이 올라가지 않는 사항
1
43
1
localhost:30000 접속 안되는 문제 관련 질문
0
61
2
Guest OS
1
60
2
회사 내 AI 툴 사용에 대한 질문
0
52
1
Docker Desktop 설치 관련 질문
0
59
2
kubeTM Blog는 없어진건가요????
1
56
2
Docker + Spring Boot CI/CD 방법
0
56
2
mongodb 명령어 바뀜 docker exec -it 2f mogosh
0
115
1
이미지 생성 오류
0
248
1
도커 이미지 직접 빌드해보기 & 이미지 레이어 개념
1
523
2
이미지 파일 경로 질문
0
382
0
이미지 파일 작성 질문드립니다.
-1
6524
1
Security Warning이 뜨는데 패스하고 넘어가도 될까요?
0
295
0
도커 배포에 관하여 질문드립니다.
1
1279
3
동영상 무한버퍼링...
0
360
1
이런 메시지가 뜨는데요~
2
1572
3

