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 two-pointer
    java기초
    java 제어자
    java 메서드
    프로그래머스 java 기초 트레이닝
    java arrays.copyofrnage()
    Java 생성자
    자료구조
    Java this
    java super
    프로그래머스 java 기초트레이닝
    java enhance switch
    java
    java 에라토스테네스의 체
    java 세수의합
    데이터 크기
    java 멤버
  • 최근 댓글

  • 최근 글

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

티스토리툴바