1. Docker Hub에 이미지 Push
Docker Registry 개념
- Registry: Docker 이미지 파일을 저장하고 관리하는 공간.
- Public Registry: 누구나 접근 가능 (예: Docker Hub).
- Private Registry: 특정 사용자나 그룹만 접근 가능.
- Docker Hub: Docker의 공식 Registry 플랫폼(hub.docker.com).
이미지 Push 작업 순서
- Docker Hub 로그인
- docker logout docker login
- 이미지 태깅(Tagging)
- 이미지 Push예:
- docker push nbcdocker0000/nginx-test:1.0
- docker push <계정>/<이미지>:<태그>
- Push된 이미지 Pull 및 실행
- docker pull nbcdocker0000/nginx-test:1.0 docker run -d -p 8001:80 --name=nginx-test nbcdocker0000/nginx-test:1.0
2. Dockerfile 최적화
최적화 이유
- 빠른 빌드 속도: 빌드 시간을 줄여 작업 효율성 증가.
- 이미지 크기 감소: 작고 경량화된 이미지는 저장 공간 절약 및 빠른 전송 가능.
- 보안 강화: 불필요한 패키지 제거로 공격 표면 감소.
- 유지보수 용이: 잘 정리된 Dockerfile은 수정이 쉽고 오류 발생 가능성 감소.
3. Java 환경 Dockerfile 예제
Dockerfile (Multi-stage Build 사용)
# Build 단계
FROM gradle:8.5-jdk21-alpine AS builder
WORKDIR /app
COPY ./ ./ # 소스 복사
RUN gradle clean bootJar # Gradle로 Spring Boot 애플리케이션 빌드
# Application 실행 단계
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=builder /app/build/libs/spring-boot-0.0.1-SNAPSHOT.jar .
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "spring-boot-0.0.1-SNAPSHOT.jar"]
최적화 포인트
- Alpine 이미지 사용:
- 최소한의 라이브러리만 포함된 경량 이미지.
- 보안 강화 및 이미지 크기 최소화.
- Multi-stage Build:
- 빌드와 실행 환경을 분리.
- 최종 실행 컨테이너에는 불필요한 빌드 도구(예: Gradle)가 포함되지 않음.
4. Docker Image Push 및 최적화 요약
항목 |
설명 |
Registry |
Docker 이미지를 저장하고 관리하는 공간. |
Public Registry |
모든 사용자가 접근 가능 (예: Docker Hub). |
Private Registry |
특정 사용자/그룹만 접근 가능한 비공개 저장소. |
Docker Hub 로그인 |
docker login 명령으로 인증 필요. |
이미지 태깅 |
Docker Hub에 Push하려면 계정 이름을 이미지 이름 앞에 추가. |
Multi-stage Build |
빌드와 실행 환경을 분리하여 최종 이미지를 경량화. |
Alpine 이미지 |
최소 크기의 기본 이미지로, 보안 강화와 이미지 경량화 가능. |
5. 부가적으로 알아야 할 정보
- Docker Hub 사용 팁:
- Public Repository는 무료, Private Repository는 제한 있음.
- 팀 협업을 위해 Docker Organization 기능 활용 가능.
- Multi-stage Build 장점:
- 빌드 환경에서만 필요한 파일은 제외.
- 실행 이미지를 작고 빠르게 유지.
- 이미지 최적화 도구:
- docker-slim: Docker 이미지를 자동으로 최적화.
- Dive: 이미지 내부 구조를 분석하여 최적화 가능한 부분 확인.
- 이미지 관리:
- 필요하지 않은 이미지는 삭제하여 디스크 공간 확보:
docker image prune
6. Docker Image Push 및 최적화의 장단점
장점 |
단점 |
Docker Hub를 통해 전 세계 어디서나 이미지 관리 및 공유 가능. |
Public Registry 사용 시 보안 우려 (Private Registry 사용 권장). |
Multi-stage Build로 실행 이미지를 경량화하여 배포 효율성 증가. |
Multi-stage Build는 Dockerfile 작성에 대한 학습 필요. |
Alpine 이미지 사용으로 이미지 크기 감소 및 보안 강화. |
Alpine 환경에서는 일부 패키지가 기본적으로 제공되지 않아 추가 설정 필요. |