도커(Docker) 환경에서 개발자의 의도대로 환경을 설정하고 소스 코드를 패키징 할 수 있게 해주는 마법의 명세서,
Dockerfile에 대해 정리해 보겠습니다.
1. Dockerfile이란? (개요 및 용도)
우리가 앞서 사용했던 docker run 명령어가 이미 만들어진 빵(이미지)을 먹는 과정이라면,
Dockerfile은 나만의 레시피를 적어서 새로운 빵을 굽는(빌드) 과정입니다.
- 공식 레퍼런스: Docker Builder 공식 문서
- 주요 용도 (커스텀 이미지 구성):
- 컨테이너 내부에 필요한 디테일한 세팅(환경 변수, 패키지 설치 등)을 자동화합니다.
- 개발한 소스 코드나 리소스 파일을 베이스 이미지 안으로 복사(Copy)하여 하나의 독립적인 서비스 이미지를 만듭니다.
- 이 과정을 통해 생성된 이미지를 바탕으로 어디서든 동일하게 작동하는 컨테이너를 배포할 수 있습니다.
Dockerfile reference
Find all the available commands you can use in a Dockerfile and learn how to use them, including COPY, ARG, ENTRYPOINT, and more.
docs.docker.com
💡 추가 지식: Infrastructure as Code (IaC) Dockerfile은 인프라 설정을 코드로 관리하는 IaC(코드형 인프라)의 대표적인 예시입니다. 설정이 텍스트 형태의 파일로 존재하므로, Git과 같은 버전 관리 시스템(VCS)을 통해 인프라의 변경 이력을 추적하고 팀원들과 안전하게 공유할 수 있다는 강력한 장점이 있습니다.

2. Dockerfile 구성 및 기본 원칙
- 1 폴더 = 1 Dockerfile: 기본적으로 이미지를 빌드하기 위한 특정 디렉토리(프로젝트 폴더) 내부에는 Dockerfile이라는 이름의 파일이 정확히 1개만 존재해야 합니다. (도커 엔진이 기본적으로 이 이름을 찾습니다.) 확장자는 따로 없습니다.
[기본 빌드 문법] Dockerfile이 위치한 경로에서 다음 명령어를 실행하여 이미지를 굽습니다(Build).
# 기본 문법
docker build -t <생성할_이미지명>:<태그명> <Dockerfile이_있는_경로>
- -t (tag): 생성될 이미지에 이름과 버전을 부여합니다.
- 경로 마지막의 . (점)은 "현재 디렉토리"를 의미합니다.
3. 실습 Step 1: 기본 베이스 이미지 설정 (FROM)
가장 기초적인 Dockerfile을 작성해 보겠습니다. 모든 Dockerfile은 기존에 존재하는 이미지를 바탕(Base)으로 시작해야 하며, 이를 지정하는 명령어가 FROM입니다.
[작업 폴더 생성 및 파일 작성]
# ~/docker/step1 폴더를 만들고 그 안에 Dockerfile을 생성합니다.
mkdir step1
cd step1
Dockerfile 파일의 내용:
# 베이스 이미지 설정
# 문법: FROM <이미지명> 또는 FROM <이미지명>:<태그>
# 가장 기본이 되는 우분투 최신 버전을 베이스로 지정합니다.
FROM ubuntu:latest
[이미지 빌드 실행]
터미널에서 step1 폴더의 상위 경로(~/docker)에 있다고 가정하고 아래 명령어를 실행합니다.
docker build -t test_ubuntu:1.0 ./step1
[빌드 로그 확인]
[+] Building 0.3s (5/5) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 177B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/1] FROM docker.io/library/ubuntu:latest@sha256:... 0.0s
=> exporting to image 0.1s
=> => naming to docker.io/library/test_ubuntu:1.0 0.0s
- 로그를 보면 Dockerfile을 읽고, 기본 ubuntu:latest 이미지를 로드한 뒤, 우리가 지정한 test_ubuntu:1.0 이라는 새로운 이름으로 패키징(naming)을 완료했음을 알 수 있습니다.
[생성된 이미지 확인]
docker image ls
출력 결과:
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
test_ubuntu:1.0 94ec7991d024 157MB 41.6MB
성공적으로 test_ubuntu 버전 1.0 이미지가 생성되었습니다!
이 이미지는 아직 베이스인 ubuntu와 완전히 동일한 상태입니다.
다음 단계에서는 이 빈 도화지 위에 개발 환경을 구성하고 소스 코드를 추가하는 다양한 명령어(RUN, COPY, CMD 등)에 대해 알아보겠습니다.
오늘의 한 마디
인생을 살 때 오늘을 살아가야한다고 생각이 되지만 또 미래를 봐야 하는 아이러니한 상황이 생깁니다. 뭔가 주식 시장과 인생이 겹쳐져서 이렇게 생각하는지는 모르겠지만 인생은 참 재밌으면서 복잡한 것 같습니다.
시장에서는 현재의 흔들리는 주가에 내 마음이 흔들리지 않으면서 미래의 기업을 보면서 가야 하고
현실에서는 미래에 어떤 일이 생길지 생각하고 걱정하면서 현재 열심히 살아가야 합니다.
글을 쓰다 보니 현실에서도 시장에서도 현재의 불안함을 없애고 미래를 향해 그냥 나아가야 한다고 생각이 되네요? ㅋㅋㅋ 해결되었습니다. 그냥 제가 할 일들만 하고 살아가면 될 것 같네요. 감사합니다.
'코딩 개발 > Docker' 카테고리의 다른 글
| Docker - Dockerfile ADD, COPY (0) | 2026.08.07 |
|---|---|
| Docker - Volume & Mount (볼륨, 마운) (0) | 2026.08.05 |
| Docker - Network 네트워크 (0) | 2026.08.04 |
| Docker - Container 컨테이너 (0) | 2026.08.03 |
| Docker - Image 이미지 (0) | 2026.07.31 |