Deployment/Docker

Dockerfile이란?

연향동큰손 2025. 8. 28. 14:28

 

Dockerfile

 

Dockerfile은 Docker 이미지를 만들때 사용된다.

 

DockerHub에는 mysql, nginx, node, openjdk등 다양한 사람들이 만들어 놓은 Docker 이미지가 존재한다.

 

하지만 내가 만든 프로젝트를 Docker를 이용해서 배포해야하는 경우 내 프로젝트를 Docker 이미지로 만들어야 한다.

이럴때 Dockerfile을 사용하면 나만의 Docker이미지를 만들 수 있게 된다.

 

Dockerfile의 구성

 

FROM

만약 Spring Boot 애플리케이션을 Docker image로 생성할때를 예로 들어보자.

 

이 애플리케이션을 실행시키기 위해서는 다음과 같은 것들이 기본적으로 세팅되어 있어야 한다.

  • 운영체제
  • JDK
  • 빌드툴(Gradle,Maven..)

이러한 환경을 매번 직접 세팅하는 것은 번거롭기 때문에, Docker에서는 베이스 이미지(Base Image)라는 개념을 제공한다.

 

예를 들어 openjdk:17-jdk-slim을 베이스 이미지로 사용하면 운영체제와 JDK가 이미 포함되어 있어, 추가적인 설치 과정 없이도 애플리케이션 실행 환경을 손쉽게 구성할 수 있다.

 

즉, FROM 지시어에 애플리케이션 실행에 필요한 베이스 이미지를 지정하기만 하면,최소한의 설정으로도 손쉽게 Docker 이미지를 생성할 수 있게 된다.

 

COPY

COPY는 로컬환경에서 만든 파일이나 디렉터리를 Docker 이미지 안으로 복사하는 지시어다.

 

FROM에서 실행환경(운영체제 + JDK 등)을 마련했다면

COPY에서 실행환경 위에 내 애플리케이션 소스나 빌드 결과물(JAR파일 등)을 올려놓는 과정을 실행한다.

 

 

ENTRYPOINT

ENTRYPOINT는 컨테이너가 생성되고 최초로 실행할 때 수행되는 명령어를 정의하는 지시어다.

 

컨테이너에서 Spring Boot 빌드 결과물인 JAR 파일을 실행하려면, ENTRYPOINT에 java -jar 명령어를 지정하면 된다.

 

 

RUN

ENTRYPOINT는 컨테이너를 생성한 직후에 실행시킬 명령어를 정의 한것이면, RUN은 이미지 생성 과정에서 필요한 명령어를 실행시킬 때 사용된다.

 

예를 들어 컨테이너 환경이 Ubuntu로 구성되어 있고, git이 설치되어 있기를 바란다면,

Dockerfile에서 RUN 지시어로 git 설치가 가능하다.

FROM ubuntu
RUN apt update && apt install -y git
ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]

 

 

WORKDIR

WORKDIR은 작업 디렉터리를 작업 디렉터리를 지정하여 RUN,CMD,ENTRYPOINT,COPY,ADD와 같은 명령어를 해당 디렉터리를 기준으로 실행시키도록 해주는 지시어다.

# 문법
WORKDIR [작업 디렉토리로 사용할 절대 경로]
# 예시
WORKDIR /usr/src/app

 

EXPOSE

EXPOSE는 컨테이너 내부에서 어떤 포트에 프로그램이 실행되는 지를 문서화 하는 역할을 한다.

단지 문서화의 역할만 하기 때문에 EXPOSE를 쓰나 안 쓰나 작동 방식에는 영향을 미치지 않는다.

 

 

Spring Boot 애플리케이션 Docker 컨테이너에서 실행

 

1. Dockerfile 생성

# 베이스 이미지
FROM openjdk:17-jdk

# JAR 파일 복사
COPY build/libs/Redis_Practice-0.0.1-SNAPSHOT.jar app.jar

# 실행
ENTRYPOINT ["java", "-jar", "/app.jar"]

 

2. 소스코드 빌드, JAR파일 생성

./gradlew clean build

 

3. Dockerfile 기반으로 Docker 이미지 생성

docker build -t hello-server .

 

4. 생성한 이미지를 기반으로 Docker 컨테이너를 생성하고 실행

백그라운드로 실행하고 호스트의 8080 포트를 컨테이너의 8080포트와 연결해서 실행시켰다.

docker run -d -p 8080:8080 hello-server

 

 

'Deployment > Docker' 카테고리의 다른 글

Docker Volume(도커 볼륨)  (0) 2025.03.23
Docker CLI  (0) 2025.03.21
Docker를 활용하여 Nginx 설치 및 실행  (0) 2025.03.19
Docker란 무엇인가  (0) 2025.03.19