hgzero/deployment/container/build-image.md
2025-10-27 20:33:42 +09:00

4.6 KiB

백엔드 컨테이너 이미지 작성 결과

작업 개요

  • 작업일시: 2025-10-27
  • 대상 서비스: user, meeting, stt, ai, notification (총 5개)
  • 작업자: 주영 (DevOps)

작업 진행 상황

1. 서비스명 확인

settings.gradle에서 서비스명 확인 완료:

cat settings.gradle

확인된 서비스:

  • common (공통 모듈)
  • user
  • meeting
  • stt
  • ai
  • notification

2. bootJar 설정 확인

모든 서비스의 build.gradle에 bootJar 설정이 이미 되어 있음을 확인:

  • user/build.gradle: archiveFileName = 'user.jar'
  • meeting/build.gradle: archiveFileName = 'meeting.jar'
  • stt/build.gradle: archiveFileName = 'stt.jar'
  • ai/build.gradle: archiveFileName = 'ai.jar'
  • notification/build.gradle: archiveFileName = 'notification.jar'

3. Dockerfile 생성

deployment/container/Dockerfile-backend 생성 완료:

# Build stage
FROM openjdk:23-oraclelinux8 AS builder
ARG BUILD_LIB_DIR
ARG ARTIFACTORY_FILE
COPY ${BUILD_LIB_DIR}/${ARTIFACTORY_FILE} app.jar

# Run stage
FROM openjdk:23-slim
ENV USERNAME=k8s
ENV ARTIFACTORY_HOME=/home/${USERNAME}
ENV JAVA_OPTS=""

# Add a non-root user
RUN adduser --system --group ${USERNAME} && \
    mkdir -p ${ARTIFACTORY_HOME} && \
    chown ${USERNAME}:${USERNAME} ${ARTIFACTORY_HOME}

WORKDIR ${ARTIFACTORY_HOME}
COPY --from=builder app.jar app.jar
RUN chown ${USERNAME}:${USERNAME} app.jar

USER ${USERNAME}

ENTRYPOINT [ "sh", "-c" ]
CMD ["java ${JAVA_OPTS} -jar app.jar"]

4. Gradle 빌드 수행

모든 서비스의 jar 파일 빌드 완료:

./gradlew clean bootJar --no-daemon

빌드 결과:

BUILD SUCCESSFUL in 17s
37 actionable tasks: 34 executed, 3 up-to-date

생성된 jar 파일 확인:

ls -lh user/build/libs/user.jar meeting/build/libs/meeting.jar stt/build/libs/stt.jar ai/build/libs/ai.jar notification/build/libs/notification.jar

결과:

  • ai.jar: 86M
  • meeting.jar: 86M
  • notification.jar: 79M
  • stt.jar: 92M
  • user.jar: 77M

5. Docker 이미지 빌드 ⚠️ (대기 중)

현재 상태: Docker 데몬이 실행되지 않아 이미지 빌드를 진행할 수 없습니다.

오류 메시지:

ERROR: Cannot connect to the Docker daemon at unix:///Users/daewoong/.docker/run/docker.sock.
Is the docker daemon running?

필요 조치:

  1. Docker Desktop 실행
  2. Docker 데몬 정상 실행 확인:
    docker ps
    docker info
    

준비된 빌드 명령어:

각 서비스별 Docker 이미지 빌드 명령어는 다음과 같습니다:

user 서비스

docker build \
  --platform linux/amd64 \
  --build-arg BUILD_LIB_DIR="user/build/libs" \
  --build-arg ARTIFACTORY_FILE="user.jar" \
  -f deployment/container/Dockerfile-backend \
  -t user:latest .

meeting 서비스

docker build \
  --platform linux/amd64 \
  --build-arg BUILD_LIB_DIR="meeting/build/libs" \
  --build-arg ARTIFACTORY_FILE="meeting.jar" \
  -f deployment/container/Dockerfile-backend \
  -t meeting:latest .

stt 서비스

docker build \
  --platform linux/amd64 \
  --build-arg BUILD_LIB_DIR="stt/build/libs" \
  --build-arg ARTIFACTORY_FILE="stt.jar" \
  -f deployment/container/Dockerfile-backend \
  -t stt:latest .

ai 서비스

docker build \
  --platform linux/amd64 \
  --build-arg BUILD_LIB_DIR="ai/build/libs" \
  --build-arg ARTIFACTORY_FILE="ai.jar" \
  -f deployment/container/Dockerfile-backend \
  -t ai:latest .

notification 서비스

docker build \
  --platform linux/amd64 \
  --build-arg BUILD_LIB_DIR="notification/build/libs" \
  --build-arg ARTIFACTORY_FILE="notification.jar" \
  -f deployment/container/Dockerfile-backend \
  -t notification:latest .

6. 이미지 확인 (대기 중)

Docker 이미지 빌드 완료 후 다음 명령어로 확인:

docker images | grep -E "user|meeting|stt|ai|notification"

다음 단계

  1. 즉시 수행: Docker Desktop 실행
  2. Docker 확인: docker ps 명령으로 정상 작동 확인
  3. 이미지 빌드: 위의 준비된 명령어들을 순차적으로 실행
  4. 빌드 검증: 모든 이미지가 정상적으로 생성되었는지 확인
  5. 결과 업데이트: 이 문서에 최종 결과 기록

참고사항

  • 플랫폼: macOS (Darwin 22.1.0)
  • Docker 빌드 플랫폼: linux/amd64 (크로스 플랫폼 빌드)
  • 베이스 이미지:
    • Builder: openjdk:23-oraclelinux8
    • Runtime: openjdk:23-slim
  • 보안: non-root 사용자(k8s)로 컨테이너 실행
  • 병렬 빌드: 각 서비스는 독립적으로 빌드 가능 (서브 에이전트 활용)