본문 바로가기
Docker

Dockerfile 기반 이미지 생성

by creatingeveryday 2024. 2. 25.

도커 가이드 2편: Dockerfile 기반 이미지 생성

도커 가이드 1편: 컨테이너 소개와 기본 사용법

지난 1편에서는 도커 이미지와 컨테이너의 기본적인 사용법을 다루었습니다.   
2편에서는 실제로 우리의 애플리케이션을 도커 컨테이너로 만들어서 사용해보겠습니다.   
스프링부트 애플리케이션으로 실습을 진행합니다.    

아래는 기존의 스프링부트 애플리케이션 프로젝트를 일반적인 배포 프로세스입니다.

1. 변경 사항 git push
2. Jenkins 같은 CI 도구를 사용해서 build 해서 jar 파일 생성
3. jar 파일을 서버 전송한 후 shell 스크립트로 실행

도커를 프로젝트에 적용시 배포 프로세스는 다음과 같습니다.

1. 변경 사항 git push
2. Jenkins 같은 CI 도구를 사용해서 build 해서 jar 파일 생성
3. 도커 파일을 이용해 jar 파일을 포함해서 도커 이미지 생성
4. 도커 이미지를 서버로 전송한 후 컨테이너 실행

3번 과정에서 도커 파일을 기반으로 도커 컨테이너를 생성할 수 있는 이미지를 만들어야 합니다.

  1. 도커 파일 생성
  2. 도커 이미지 생성

1. 도커 파일 생성

  • 도커 파일(Dockerfile)은 도커 이미지를 만들기 위한 빌드 스크립트 파일입니다.
  • 도커 파일은 도커 컨테이너가 어떻게 구성되고 실행될지를 정의합니다.
  • 도커 파일의 위치
    • 도커 파일은 보통 프로젝트의 루트 경로에 위치한다.
    • 멀티모듈 프로젝트의 경우 각 모듈의 루트 경로에 위치시키는 것이 일반적이다.
# syntax=docker/dockerfile:1

FROM openjdk:17
# jdk 17을 기본 베이스 이미지로 사용

# API 서버 모듈: 도커 파일로 이미지 생성

# 컨테이너 내에서 실행되는 명령의 작업 디렉토리를 설정
# 컨테이너가 시작될 때의 기본 작업 디렉토리를 의미함
WORKDIR /app

# 볼륨 설정
# VOLUME [경로]
VOLUME /app/logs

# 8097 포트를 개방한다고 문서에 명시한다.
# 실제로 개방하려면 컨테이너를 실행할때 publish 옵션을 사용해야한다.
EXPOSE 8097

ARG JAR_FILE=build/libs/core-api-0.0.1-SNAPSHOT.jar

# 호스트 파일 시스템에서 도커 이미지로 파일이나 디렉토리를 복사
# COPY <소스 경로> <대상 경로>  
COPY ${JAR_FILE} /app/core-api.jar

# 스프링 프로필을 설정하기 위한 환경 변수
ENV SPRING_PROFILES_ACTIVE="production"

# 도커 이미지를 이용하여 컨테이너가 시작될때 실행되는 기본 실행 파일 또는 스크립트를 지정한다.
ENTRYPOINT ["java","-jar","/app/core-api.jar"]

2. 도커 이미지 생성

다음으로 생성한 Dockerfile을 기반으로 이미지를 생성해야합니다.

  • 옵션
    • -t, --tag: 빌드한 이미지에 태그를 지정합니다. 이 옵션을 사용하여 이미지의 이름과 태그를 지정할 수 있습니다.
      • 예: -t my-image:latest
      • 이미지의 이름을 core-api-8097 로 지정하였다.
    • -f, --file: 사용할 Dockerfile의 경로를 지정합니다. 기본적으로 현재 디렉토리의 Dockerfile을 사용하지만, 이 옵션을 사용하여 다른 위치의 Dockerfile을 지정할 수 있습니다.
    • --build-arg: 빌드 중에 Dockerfile 내에서 사용할 빌드 타임 환경 변수를 지정합니다.
    • --no-cache: 캐시를 사용하지 않고 강제로 모든 레이어를 다시 빌드합니다.
    • --pull: 빌드하기 전에 베이스 이미지를 항상 최신으로 업데이트합니다.
# docker build [옵션] <Dockerfile 경로 또는 URL>
docker build -t core-api-8097 .

이미지 생성시 이미지 아이디 값이 출력된다.
이미지 아이디 또는 이름으로 컨테이너를 생성할 수 있다.
해당 이미지를 사용해서 컨테이너를 생성하고 실행시킬 수 있다.

docker run -d -p 8097:8097 core-api-8097

'Docker' 카테고리의 다른 글

[docker] container networking  (1) 2024.03.24
docker volume, bind mount, tmpfs mount  (0) 2024.03.10
Docker Image  (0) 2024.03.03
도커 컨테이너 소개와 기본 사용법  (2) 2024.02.04

댓글