컨테이너·워크플로우 자동화/DocKer 기본 및 활용

Dockerfile 이해하기

Data Jun 2025. 10. 12. 11:34

Dockerfile이란?

Docker 이미지는 보통 Dockerhub에서 다운로드받아 사용합니다.
하지만 이 이미지들도 누군가 만들어 올린 결과물입니다.
그렇다면, 나만의 Docker 이미지는 어떻게 만들 수 있을까요?

그 답은 바로 Dockerfile 에 있습니다.

 

Dockerfile이란, Docker 이미지를 만들기 위한 ‘설명서’ 같은 파일입니다.

어떤 이미지를 기반으로, 어떤 프로그램을 설치하고, 어떤 명령을 실행할지를
한 줄씩 작성해두면 Docker가 이를 읽고 그대로 이미지를 만들어줍니다.

 

예를 들어, 내가 직접 만든 Spring Boot 프로젝트를 Docker 이미지로 배포하고 싶다면
Dockerfile을 활용해 쉽게 나만의 이미지를 만들 수 있습니다.

 

정리하자면,

Dockerfile = Docker 이미지를 자동으로 만들어주는 파일

 

FROM : 베이스 이미지 생성

Dockerfile의 첫 번째 명령은 대부분 FROM으로 시작합니다.
FROM은 “이 이미지를 어떤 기본 환경(Base Image) 위에 만들지”를 지정하는 역할을 합니다.

 

즉, Docker 컨테이너의 기본 운영체제나 런타임 환경을 선택하는 단계라고 보면 됩니다.

 

예: FROM openjdk:17-jdk → JDK 17이 설치된 리눅스 환경 위에 이미지를 만들겠다는 뜻

 

쉽게 비유하자면

 

컴퓨터를 새로 샀을 때, 기본으로 메모장·인터넷·그림판 등이 깔려있는 것처럼
Docker의 베이스 이미지도 컨테이너를 위한 “기본 프로그램 세트”입니다.

 

누군가는 JDK가 포함된 환경이 필요하고,
또 누군가는 Node.js가 포함된 환경이 필요하겠죠.
필요에 따라 알맞은 베이스 이미지를 선택하면 됩니다.

 

사용법

# 문법
FROM [이미지명]
FROM [이미지명]:[태그명]

태그명을 생략하면 자동으로 latest 버전을 사용합니다.

 

 

실습: FROM으로 베이스 이미지 생성하기

JDK 17이 설치된 Docker 컨테이너를 직접 만들어보기

 

1. Dockerfile 만들기

# JDK 17
FROM openjdk:17-jdk

 

2. Dockerfile을 기반으로 이미지 생성하기

# Dockerfile이 존재하는 디렉터리에서 실행
$ docker build -t my-jdk17-server .

✅ -t : 이미지에 이름(tag)을 붙이는 옵션
✅ . : 현재 디렉터리에 Dockerfile이 있다는 의미

 

3. 만든 이미지를 기반으로 컨테이너 실행하기

$ docker run -d my-jdk17-server

-d 옵션은 컨테이너를 백그라운드(detached mode)로 실행합니다.

 

4. 컨테이너 목록 확인하기

$ docker ps        # 실행 중인 컨테이너 조회
$ docker ps -a     # 중지된 컨테이너 포함 전체 조회

Docker의 컨테이너는 내부 명령이 모두 수행되면 자동으로 종료됩니다.
(즉, 실행할 명령이 끝나면 컨테이너도 종료되는 구조입니다.)

 

ENTRYPOINT: 컨테이너 실행 시 수행할 명령

예시 Dockerfile

FROM openjdk:17-jdk
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]

ENTRYPOINT는 컨테이너가 실행될 때 자동으로 실행할 명령을 지정합니다.
위 예시는 sleep 500 명령을 실행해 컨테이너가 500초 동안 유지되도록 설정한 것입니다.

 

컨테이너 내부에 들어가서 확인하기

 

이제 컨테이너 내부로 들어가 실제로 JDK가 설치되어 있는지 확인해봅시다.

$ docker build -t my-jdk17-server .     # 이미지 빌드
$ docker run -d my-jdk17-server         # 컨테이너 실행
$ docker ps                             # 실행 중인 컨테이너 확인
$ docker exec -it [컨테이너ID] bash     # 컨테이너 내부 접속
$ java -version                         # JDK 버전 확인

출력 예시 👇

openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)

✅ 정상적으로 OpenJDK 17이 설치된 것을 확인할 수 있습니다.

 

 

정리하면

개념 역할
Dockerfile Docker  이미지를 자동으로 만들어주는 설정 파일
FROM 어떤 환경(Base Image)에서 시작할지 지정
ENTRYPOINT 컨테이너 실행 시 수행할 명령
docker build Dockerfile을 기반으로 이미지 생성
docker run 이미지를 기반으로 컨테이너 실행
 docker exec 실행 중인 컨테이너 내부에 접속

지금까지 우리는

  • Dockerfile이 무엇인지
  • FROM으로 베이스 이미지를 선택하는 법
  • ENTRYPOINT로 컨테이너를 유지시키는 법
  • 컨테이너 내부에서 JDK를 확인하는 방법

까지 모두 실습했습니다 💪