docker file - Entrypoint & Workdir
Dockerfile
도커 허브 openjdk -> 11-jdk-slim
Dockerfile
- OpenJDK 11을 기반으로 한 Java 애플리케이션을 실행하기 위한 설정을 정의한다.
- FROM openjdk:11-jdk-slim
: Docker 이미지의 기반 이미지로 openjdk:11-jdk-slim을 사용한다.- 이는 OpenJDK 11 버전과 필수적인 JDK 도구가 설치된 경량화된 이미지이다.
- WORKDIR /app
: 컨테이너 내부에서 작업 디렉터리를 /app로 설정합니다.- 이 디렉터리가 컨테이너 내에서 현재 작업 디렉터리로 사용될 것이다.
- COPY build/aws-v3-0.0.3.jar ./application.jar
: 호스트의 build/aws-v3-0.0.3.jar 파일을 컨테이너 내의 현재 작업 디렉터리로 복사한다.- 파일은 컨테이너 내부에서 application.jar 이름으로 저장된다.
- ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=dev", "application.jar"]
: 컨테이너가 실행될 때 실행되는 명령을 지정한다.- java -jar -Dspring.profiles.active=dev application.jar 명령을 실행하여 Java 애플리케이션을 실행한다.
- -jar 플래그는 JAR 파일을 실행하고, -Dspring.profiles.active=dev는 Spring 프로파일을 "dev"로 설정하는 옵션이다.
- application.jar은 실행할 JAR 파일의 이름이다.
- java -jar -Dspring.profiles.active=dev application.jar 명령을 실행하여 Java 애플리케이션을 실행한다.
- 주석 (# CMD ["--server.port=8080"])
: 주석 처리된 CMD 명령어이다.- 주석 처리되어 있으므로 현재는 해당 명령어가 비활성화되어 있다.
- 주석을 해제하면 CMD 명령어가 실행되고, --server.port=8080 옵션을 사용해 서버 포트를 8080으로 지정할 수 있다.
- FROM openjdk:11-jdk-slim
애플리케이션 JAR 파일을 컨테이너 내부로 복사하고, Java 명령어와 애플리케이션 JAR 파일 이름, Spring 프로파일을 설정한 후 컨테이너가 시작될 때 애플리케이션을 실행한다.
Dockerfile build
docker logs
docker logs 명령어는 Docker 컨테이너의 로그를 확인하는 데 사용되는 명령어이다.
해당 컨테이너에서 생성된 출력을 터미널에 표시하여 로그 메시지를 확인할 수 있다.
docker logs 명령어의 일반적인 사용법은 다음과 같다:docker logs [옵션] 컨테이너_이름_또는_컨테이너_ID
- [옵션]: 로그를 필터링하거나 형식을 지정하기 위한 옵션
- 일반적으로 사용되는 옵션은 다음과 같습니다:
- -f 또는 --follow: 로그를 실시간으로 출력하고 컨테이너의 로그 변경을 모니터링한다.
- --tail [숫자]: 가장 최근에 생성된 로그 몇 줄만 표시한다.
- 숫자는 표시할 로그의 줄 수를 지정한다.
- 기본값은 "all"이며 모든 로그를 표시한다.
ENTRYPOINT vs. CMD
Dockerfile에서 ENTRYPOINT와 CMD는 컨테이너가 실행될 때 실행되는 명령을 지정하는 데 사용되는 두 가지 명령이다.
이 두 명령의 주요 차이점은 다음과 같다.
ENTRYPOINT:ENTRYPOINT 명령은 Docker 컨테이너가 시작될 때 실행되어야 하는 명령을 정의한다.
컨테이너가 실행 중인 동안 항상 실행되며, 다른 명령과 함께 사용될 때에도 항상 실행된다.
ENTRYPOINT 명령어의 인자는 JSON 배열 또는 exec 형식으로 지정된다.
일반적으로 ENTRYPOINT는 실행 파일이나 스크립트를 지정하고, 필요한 인자를 함께 전달한다.
ENTRYPOINT는 Dockerfile 내에서 한 번만 사용할 수 있으며, Docker 컨테이너가 시작될 때 항상 실행되므로 컨테이너가 실행되는 주요 프로세스를 정의하는 데 사용된다.
CMD:CMD 명령은 컨테이너가 실행될 때 실행되어야 하는 기본 명령을 정의한다.
CMD는 Dockerfile 내에서 한 번만 사용할 수 있다.
CMD 명령어는 ENTRYPOINT와 함께 사용되면 ENTRYPOINT에 전달되는 인자로 간주된다.
컨테이너를 실행할 때 명령어가 제공되지 않은 경우에만 CMD에 지정된 명령이 실행된다.
CMD는 일반적으로 기본 실행 명령이나 명령어에 필요한 인자를 제공하는 역할을 한다.
그러나 Docker 컨테이너를 실행할 때 docker run 명령어에 직접 명령어를 전달하면 CMD 명령어가 무시된다.
주요 차이점은 ENTRYPOINT는 컨테이너가 실행될 때 항상 실행되며, CMD는 컨테이너를 실행할 때 명령어가 제공되지 않은 경우에만 실행된다는 점이다.
일반적으로 ENTRYPOINT는 주요 프로세스를 정의하고, CMD는 기본 실행 명령이나 명령어에 필요한 인자를 제공한다.
이 두 가지 명령은 함께 사용되어 유연성과 재사용성을 제공하는 데 도움이 된다.
여기서 인자로 사용된 --server.port=5000이 CMD의 역할을 의미한다.
'Docker' 카테고리의 다른 글
docker file - nginx 내부구성 (0) | 2023.06.24 |
---|---|
docker file - RUN 명령어 (0) | 2023.06.24 |
docker file - 기본 (0) | 2023.06.23 |
docker commit 이미지 굽기와 docker hub 업로드 (0) | 2023.06.09 |
docker volumn 옵션으로 폴더 연결하기 (0) | 2023.06.09 |