Dockerfile 은 Docker image를 어떻게 build 할지 지정하는 명령어 집합을 다룬 스크립트다.
Dockerfile 내부 구조
# OS - Ubuntu
FROM Ubuntu
# Update pip and install dependencies using pip
RUN apt-get update
RUN apt-get install python
# Install python dependencies using pip
RUN pip install flask
RUN pip install flask-mysql
# Copy source code to /opt folder
COPY . /opt/source-code
# Run the wbe server using 'flask' command
ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run
# Pause 5 seconds after running the container
CMD ["sleep", "5"]
CMD vs. ENTRYPOINT
- CMD : 컨테이너 실행 시 Default 명령어
- ENTRYPOINT : CMD와 유사하지만, overriding은 어렵다
> ENTRYPOINT가 CMD에 비해 우선도를 가진다.
- 만약 ENTRYPOINT와 CMD가 모두 설정되어 있다면
- CMD는 ENTRYPOINT의 기본 변수 default aruemnt가 된다.
- 따라서, ENTRYPOINT가 실행되면 CMD는 변수로써 전달된다.
※ Dockerfile 구조 예시
FROM ubuntu
ENTRYPOINT ["echo"]
CMD ["Hello, World!"]
1. 그대로 실행할 경우
# docker run myimage
Output : Hello, World!
2. CMD가 overriding 될 경우
# docker run myimage "Goodbye"
Output : Goodbye
3. ENTRYPOINT가 overriding 될 경우
# docker run --entrypoint /bin/bash myimage
기존 ENTRYPOINT("echo")를 무시하고 bash shell을 시작한다.
4, CMD와 ENTRYPOINT 모두 동시에 overriding 될 경우
# docker run --entrypoint "/bin/bash" myimage -c "echo Hello manually"
Hello manually
Dockerfile을 이용하여 Docker image build
# docker build -f <path-to-Dockerfile> -t <image_name>:<tag> <context>
docker build -f Dockerfile.dev -t python:lemona .
Dockerfile은 layered architecture 방식으로 동작한다.
이는 기존 Dockerfile에 약간의 변형 혹은 수정 후 다시 build 할 시 수정된 부분만 메모리를 소모할 뿐, 기존과 동일한 부분은 아무런 부담 없이 build 된다.

'CS > Container' 카테고리의 다른 글
[Docker] Docker Registry (0) | 2025.03.13 |
---|---|
[Docker] Docker network & Docker-compose (0) | 2025.03.12 |
[Docker] Docker build & run 명령어 (0) | 2025.03.08 |
[Container] Container vs. Virtual Machine (0) | 2023.10.11 |
[Container] 개념과 특징 (1) | 2023.10.10 |
Dockerfile 은 Docker image를 어떻게 build 할지 지정하는 명령어 집합을 다룬 스크립트다.
Dockerfile 내부 구조
# OS - Ubuntu
FROM Ubuntu
# Update pip and install dependencies using pip
RUN apt-get update
RUN apt-get install python
# Install python dependencies using pip
RUN pip install flask
RUN pip install flask-mysql
# Copy source code to /opt folder
COPY . /opt/source-code
# Run the wbe server using 'flask' command
ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run
# Pause 5 seconds after running the container
CMD ["sleep", "5"]
CMD vs. ENTRYPOINT
- CMD : 컨테이너 실행 시 Default 명령어
- ENTRYPOINT : CMD와 유사하지만, overriding은 어렵다
> ENTRYPOINT가 CMD에 비해 우선도를 가진다.
- 만약 ENTRYPOINT와 CMD가 모두 설정되어 있다면
- CMD는 ENTRYPOINT의 기본 변수 default aruemnt가 된다.
- 따라서, ENTRYPOINT가 실행되면 CMD는 변수로써 전달된다.
※ Dockerfile 구조 예시
FROM ubuntu
ENTRYPOINT ["echo"]
CMD ["Hello, World!"]
1. 그대로 실행할 경우
# docker run myimage
Output : Hello, World!
2. CMD가 overriding 될 경우
# docker run myimage "Goodbye"
Output : Goodbye
3. ENTRYPOINT가 overriding 될 경우
# docker run --entrypoint /bin/bash myimage
기존 ENTRYPOINT("echo")를 무시하고 bash shell을 시작한다.
4, CMD와 ENTRYPOINT 모두 동시에 overriding 될 경우
# docker run --entrypoint "/bin/bash" myimage -c "echo Hello manually"
Hello manually
Dockerfile을 이용하여 Docker image build
# docker build -f <path-to-Dockerfile> -t <image_name>:<tag> <context>
docker build -f Dockerfile.dev -t python:lemona .
Dockerfile은 layered architecture 방식으로 동작한다.
이는 기존 Dockerfile에 약간의 변형 혹은 수정 후 다시 build 할 시 수정된 부분만 메모리를 소모할 뿐, 기존과 동일한 부분은 아무런 부담 없이 build 된다.

'CS > Container' 카테고리의 다른 글
[Docker] Docker Registry (0) | 2025.03.13 |
---|---|
[Docker] Docker network & Docker-compose (0) | 2025.03.12 |
[Docker] Docker build & run 명령어 (0) | 2025.03.08 |
[Container] Container vs. Virtual Machine (0) | 2023.10.11 |
[Container] 개념과 특징 (1) | 2023.10.10 |