Docker 이미지 제작
Docker 이미지 이해
Docker 이미지는 컨테이너 생성의 기반이 되는 읽기 전용 템플릿입니다. 코드, 런타임, 라이브러리, 시스템 도구 등 애플리케이션 실행에 필요한 모든 것을 포함합니다.
Dockerfile 기본 개념
Dockerfile 은 Docker 이미지를 생성하기 위한 지침이 담긴 텍스트 문서입니다. 각 지침은 이미지에 새로운 레이어를 생성합니다.
graph TD
A[Dockerfile] --> B[베이스 이미지]
A --> C[애플리케이션 파일 복사]
A --> D[종속성 설치]
A --> E[환경 설정]
A --> F[시작 명령 정의]
Python 애플리케이션을 위한 샘플 Dockerfile
## 공식 Python 런타임을 베이스 이미지로 사용
FROM python:3.9-slim
## 컨테이너 내 작업 디렉토리 설정
WORKDIR /app
## requirements 파일 복사
COPY requirements.txt .
## 필요한 패키지 설치
RUN pip install --no-cache-dir -r requirements.txt
## 애플리케이션 코드 복사
COPY . .
## 포트 번호 지정
EXPOSE 5000
## 애플리케이션 실행 명령 정의
CMD ["python", "app.py"]
이미지 구축 전략
| 전략 |
설명 |
사용 사례 |
| 단일 단계 빌드 |
간단하고 직관적인 빌드 |
작고 복잡하지 않은 애플리케이션 |
| 다단계 빌드 |
이미지 크기 및 보안 최적화 |
복잡한 애플리케이션 및 빌드 종속성 포함 |
다단계 빌드 예제
## 단계 1: 빌드 단계
FROM maven:3.8.1-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package
## 단계 2: 런타임 단계
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=build /app/target/myapp.jar .
EXPOSE 8080
CMD ["java", "-jar", "myapp.jar"]
Docker 이미지 빌드 및 관리
## 이미지 빌드
docker build -t myapp:v1 .
## 로컬 이미지 목록
docker images
## 이미지 삭제
docker rmi myapp:v1
## 이미지 태그
docker tag myapp:v1 myregistry/myapp:latest
이미지 최적화 기법
- 최소한의 베이스 이미지 사용
- 레이어 수 최소화
- 빌드 캐시 활용
- 불필요한 파일 제거
- .dockerignore 파일 사용
Docker 이미지 레이어
graph TD
A[베이스 이미지 레이어] --> B[종속성 설치 레이어]
B --> C[애플리케이션 코드 레이어]
C --> D[설정 레이어]
D --> E[엔트리포인트 레이어]