728x90
1️⃣ 이미지 기반
| 명령어 | 설명 | 예시 |
|---|---|---|
FROM |
베이스 이미지 지정 | FROM openjdk:17-jdk |
ARG |
빌드 시점 변수 | ARG VERSION=1.0 |
2️⃣ 메타데이터 & 라벨
| 명령어 | 설명 | 예시 |
|---|---|---|
LABEL |
이미지 메타데이터 추가 | LABEL maintainer="dev@company.com" |
ENV |
환경 변수 설정 | ENV SPRING_PROFILES_ACTIVE=prod |
3️⃣ 파일/디렉터리 작업
| 명령어 | 설명 | 예시 |
|---|---|---|
COPY |
파일/디렉터리 복사 | COPY target/myapp.jar /app/myapp.jar |
ADD |
COPY와 비슷 + URL 다운로드 가능 | ADD https://example.com/file.tar.gz /tmp/ |
WORKDIR |
작업 디렉터리 지정 | WORKDIR /app |
4️⃣ 빌드 / 실행 관련
| 명령어 | 설명 | 예시 |
|---|---|---|
RUN |
이미지 빌드 시 명령어 실행 | RUN apt-get update && apt-get install -y curl |
CMD |
컨테이너 실행 시 기본 명령어 | CMD ["java", "-jar", "/app/myapp.jar"] |
ENTRYPOINT |
컨테이너 실행 시 고정 명령어 | ENTRYPOINT ["java","-jar","/app/myapp.jar"] |
⚠️ CMD vs ENTRYPOINT
CMD: 기본값, 필요하면 덮어쓰기 가능
ENTRYPOINT: 고정값, 컨테이너 실행 시 항상 실행
CMD vs RUN
- CMD
- 용도: 컨테이너가 실행될 때 기본으로 실행할 명령어와 인자를 지정
- 특징:
- 컨테이너 실행 시 덮어쓰기 가능
- Docker run 시 인자를 넣으면 CMD가 대체됨
예시
FROM ubuntu:22.04
CMD ["echo", "Hello World"]
위 Dockerfile을 myimage 라는 이미지로 빌드했을 경우,
docker run myimage # Hello World 출력
docker run myimage echo "Hi!" # CMD 대신 "Hi!" 출력
- ENTRYPOINT
- 용도: 컨테이너가 항상 실행해야 하는 주요 명령어 지정
- 특징:
- Docker run 시 인자를 넣어도 ENTRYPOINT 자체는 바뀌지 않음
- CMD와 조합 가능 → CMD는 ENTRYPOINT의 기본 인자 역할
예시
FROM ubuntu:22.04
ENTRYPOINT ["echo"]
CMD ["Hello World"]
위 Dockerfile을 myimage 라는 이미지로 빌드했을 경우,
docker run myimage # echo Hello World
docker run myimage Hi! # echo Hi! → ENTRYPOINT 유지, CMD 덮어쓰기
각각을 언제 사용할까?
- CMD
- 컨테이너 실행 시 유연하게 변경 가능한 기본 명령어가 필요할 때
- 예:
CMD ["nginx", "-g", "daemon off;"]→ 필요 시 다른 명령어로 실행 가능
- ENTRYPOINT
- 컨테이너가 반드시 실행해야 하는 명령어를 고정할 때
- 예: Spring Boot 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "/app/myapp.jar"]
- 필요하면 CMD를 인자로 사용
ENTRYPOINT ["java", "-jar", "/app/myapp.jar"]
CMD ["--spring.profiles.active=prod"]
💡 팁
- 애플리케이션 컨테이너: ENTRYPOINT 고정 + CMD로 기본 인자 관리
- 유틸리티 컨테이너(테스트, 배치): CMD만 사용 → 실행 시 유연하게 바꿀 수 있음
5️⃣ 포트 & 볼륨
| 명령어 | 설명 | 예시 |
|---|---|---|
EXPOSE |
컨테이너 포트 노출 | EXPOSE 8080 |
VOLUME |
데이터 유지 볼륨 지정 | VOLUME /app/data |
6️⃣ 빌드 캐시 관련
| 명령어 | 설명 | 예시 | ||
|---|---|---|---|---|
USER |
컨테이너 실행 사용자 | USER appuser |
||
HEALTHCHECK |
컨테이너 상태 검사 | `HEALTHCHECK CMD curl -f http://localhost:8080/ || exit 1` |
예시 Dockerfile (Spring Boot 기준)
FROM openjdk:17-jdk
LABEL maintainer="dev@company.com"
WORKDIR /app
COPY target/myapp.jar /app/myapp.jar
ENV SPRING_PROFILES_ACTIVE=prod
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app/myapp.jar"]
728x90
반응형
'DevOps' 카테고리의 다른 글
| 🐳 Docker 명령어 정리 (1) | 2025.08.31 |
|---|---|
| Kubernetes - Readiness probe vs Liveness probe (2) | 2025.08.17 |
| Kubernetes - 서비스 port 와 ingress (2) | 2025.08.17 |
| Kubernetes - Cluster 란? (node와 pod와의 관계) (2) | 2025.08.17 |
| Kubernetes 란? (1) | 2024.09.30 |