Docker 시작부터 이미지 생성 - 기본

1. Docker란?

도커란 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.
간단히 말해 어플리케이션 실행에 필요한 라이브러리, 코드, 런타임 등을 담고 있는 경량 독립형 컨테이너라고 볼 수 있습니다.


2. Docker는 왜 사용해야 하는데?

자바 기반의 Rest API 서버를 개발하고 개발 환경 혹은 프로덕션 환경에서 배포하여 실행해본다고 가정해보자
서버 인스턴스, JDK 설치, Nginx, 환경 설정, 인프라 설정 등등 서비스 구동에 여러 요소들이 필요하다.
Docker를 사용하면 이러한 모든 설정을 하나의 표준화된 컨테이너 환경에서 독립적으로 실행할 수 있기 때문에, 개발 환경과 프로덕션 환경 간의 일관성을 유지하고 배포를 단순화할 수 있다.
일반적으로 서비스를 운영 중 배포 시 장애가 발생한다면, 소스 코드만 롤백시키는 구조라면 Git 브런치를 활용하여 롤백 할 수 있겠지만, 인프라 설정 등이 포함된다면 장애 복구 시간은 예상보다 길어질 수 있다. 그렇기에 이런 서비스 구동에 필요한 여러 요소들을 도커 이미지로 생성하여 관리한다면 장애 복구 시 효과를 볼 수 있기에 사용한다.
결론.. 도커를 사용하면 환경 설정 및 라이브러리 설치 등에 대한 시간을 최소화 할수 있고, 도커 이미지를 활용하여 장애시 빠른 롤백이 가능하다.


3.Docker 장점

  1. 일관된 환경 제공: 개발 및 프로덕션 환경 간 설정 차이로 인한 문제를 줄입니다.
  2. 배포 단순화: 모든 환경 설정이 이미지에 포함되어 배포 및 환경 구성이 단순해집니다.
  3. 신속한 롤백: 장애 발생 시 Docker 이미지를 통해 빠르게 이전 상태로 복구할 수 있습니다.
  4. 효율적 자원 관리: 여러 서비스 요소들을 하나의 컨테이너에서 관리하므로 환경 설정 시간이 절약됩니다.

4.그러면 어떻게 사용하는데?

Docker 이미지를 생성하고 컨테이너 실행은 설치된 Docker로 서비스를 실행하면 된다.

1. Docker 설치

설치 가이드

2. DockerFile 작성 (gradle 예시)

도커 이미지 경량화를 위해 alpine 이미지 사용
# 1. 빌드 단계
FROM eclipse-temurin:21-jdk-alpine AS builder
# 환경정보를 Jenkins에서 받아와서 처리될 수 있도록 처리
ARG ENV_PROFILE
# Copy Gradle wrapper and project files
COPY gradlew settings.gradle build.gradle ./
COPY gradle gradle
# Copy source code
COPY src src
# Make the Gradle wrapper executable
RUN chmod +x gradlew
# Build the application
RUN ./gradlew clean build -Pprofile=${ENV_PROFILE}
# 2. 실행 단계
FROM eclipse-temurin:21-jre-alpine
# Set working directory
WORKDIR /app
# Copy the built JAR file from the builder stage
COPY --from=builder build/libs/*.jar docker-test.jar
# 포트 설정
EXPOSE 8080
# Run the application
ENTRYPOINT ["java", "-jar", "docker-test.jar"]

3. Docker 이미지 생성

도커 build [캐시사용안함] -f 이미지 경로 --build-arg 환경변수 -t 도커이미지명 .
docker build --no-cache -f build/resources/main/Dockerfile --build-arg ENV_PROFILE=local -t docker-test . 

4. Docker 이미지 확인

docker images

5. Docker 실행

도커 --name 실행명 도커이미지명
docker run --name test docker-test

6. Docker 프로세스 확인

docker ps

profile
어제보다 오늘이 더 나은 개발자

0개의 댓글