Dockerfile Instuction

2025. 3. 11. 16:25·Docker

□ FROM

컨테이너의 기반이 되는 이미지를 지정

FROM openjdk:17-jdk-slim

□ WORKDIR

컨테이너 내부에서 작업할 디렉토리를 지정

WORKDIR /app

□ COPY

로컬 파일을 컨테이너 내부로 복사할 때 사용

COPY target/*.jar app.jar  # Maven 빌드 결과 복사
COPY build/libs/*.jar app.jar  # Gradle 빌드 결과 복사

□ ADD

COPY와 유사, ADD는 .tar.gz같은 압축파일을 자동으로 압축해제함

ADD myfile.tar.gz /app/  # 압축 해제됨

□ RUN

컨테이너 이미지를 빌드할 때 명령어를 실행

RUN mvn clean package -DskipTests # 테스트 제외하고 Maven 빌드 실행
RUN ./gradlew clean build -x test  # 테스트 제외하고 Gradle 빌드 실행

□ CMD

컨테이너가 실행될 때 실행되는 기본 명령어

CMD ["java", "-jar", "app.jar"]

※ CMD는 docker run 명령어를 실행할 때 바꿀 수 있다.

docker run my-app echo "Hello"

→ 이렇게 하면 "Hello"가 실행되고 CMD는 무시된다.

□ ENTRYPOINT

CMD와 유사, 반드시 실행해야 하는 명령어

ENTRYPOINT ["java", "-jar", "app.jar"]

※ CMD와 다르게 docker run 시 추가 인자를 넣을 수 있다.

docker run my-app --server.port=8081

→ java -jar app.jar --server.port=8081 실행됨

□ ENV

컨테이너 내부에서 사용할 환경 변수를 설정

ENV SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/mydb

□ EXPOSE

컨테이너에서 사용할 포트를 지정하지만, 자동으로 외부에 개방되지는 않는다.

EXPOSE 8080

※ 외부에서 접근하려면 docker run -p 8080:8080을 실행해야 한다.

□ VOLUME

컨테이너가 종료되어도 유지해야 하는 데이터를 저장하는 디렉토리를 지정

VOLUME /data
docker run -v /host/data:/data my-app

→ 실행 시 -v 옵션으로 호스트 디렉토리와 연결 가능

□ ARG

ENV와 유사, 빌드할 때만 사용

ARG JAR_FILE=target/app.jar
COPY ${JAR_FILE} app.jar

- 빌드할 때 값을 지정

docker build --build-arg JAR_FILE=target/custom-app.jar -t my-app .

□ HEALTHCHECK

컨테이너가 정상적으로 실행 중인지 확인하는 명령어

- Spring Boot 서버 상태 체크

HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
  CMD curl -f http://localhost:8080/actuator/health || exit 1

□ LABEL

컨테이너에 메타데이터를 추가할 수 있다.

LABEL maintainer="your-email@example.com"
LABEL version="1.0"

'Docker' 카테고리의 다른 글

Docker란 무엇인가?  (1) 2024.10.01
'Docker' 카테고리의 다른 글
  • Docker란 무엇인가?
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java 멤버
    java기초
    Java this
    Java 생성자
    자료구조
    java
    java two-pointer
    java arrays.copyofrnage()
    프로그래머스 java 기초 트레이닝
    데이터 타입
    java 세수의합
    java super
    java enhance switch
    프로그래머스 java 기초트레이닝
    java 메서드
    java 유클리드 호제법
    java 제어자
    개발로드맵
    데이터 크기
    java 에라토스테네스의 체
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
Dockerfile Instuction
상단으로

티스토리툴바