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 |