□ 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 |
---|