전공영역 공부 기록

Dockerfile ENTRYPOINT에 arg를 사용가능한지 테스트

악분 2023. 8. 8. 23:33
반응형

 

테스트 목표

Dockerfile 변수인 arg를 Entrypoint안에 사용할 수 있는지 테스트합니다. ENTRYPOINT에 arg를 동적변수처럼 사용할 수 있는지 확인하는게 목표입니다.

 

결론

  1. arg를 ENTRYPOINT에 사용할 수 있지만, 항상 빈값으로 설정됩니다. arg 값은 docker build에서만 유효한 값이므로 docker conatiner 실행할 때는 빈값으로 설정 되는 것 같습니다.
  2. 따라서, arg대신 ENV를 사용해야 ENTRYPOINT에 동적변수를 사용할수 있습니다.
  3. 단, ENTRYPOINT는 보간(interpolation)을 처리할 수 있는 쉘 스크립트로 시작해야 합니다.
ENV JAVA_OPTS=""
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"]

 

테스트 시나리오에 사용한 dockerfile은 github에 공개되어 있습니다.

 

테스트 시나리오1

  • 시나리오: arg JAVA_OPTS를 ENTRYPOINT에 설정
  • 결과: 컨테이너 실행 오류

 

  • Dockerfile
FROM openjdk:8-jdk-alpine
COPY target/helloworld-0.0.1-SNAPSHOT.jar app.jar

ARG JAVA_OPTS=""

EXPOSE 8080
ENTRYPOINT ["java", "${JAVA_OPTS}", "-jar", "/app.jar"]

 

  • docker build
docker build --build-arg JAVA_OPTS="-Xms256M -Xmx512M" -t localtest-java:alpha .

 

  • docker container 실행
docker run --rm -d localtest-java:alpha

 

 

테스트 시나리오2

  • 시나리오: ENTRYPOINT를 sh -c "java ..."로 java를 실행하며, arg JAVA_OPTS를 ENTRYPOINT에 사용
  • 결과: 컨테이너는 정상실행되지만 JAVA_OPTS는 빈값

 

  • Dockerfile
FROM openjdk:8-jdk-alpine
COPY target/helloworld-0.0.1-SNAPSHOT.jar app.jar

ARG JAVA_OPTS=""

EXPOSE 8080
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"]

 

  • docker build
docker build --build-arg JAVA_OPTS="-Xms256M -Xmx512M" -t localtest-java:alpha .

 

  • docker container 실행
docker run --rm -d localtest-java:alpha

 

반응형

 

테스트 시나리오3

  • 시나리오: ENV JAVA_OPTS를 ENTRYPOINT에 설정
  • 결과: 컨테이너 실행 오류(테스트 시나리오 1과 동일)

 

  • Dockerfile
FROM openjdk:8-jdk-alpine
COPY target/helloworld-0.0.1-SNAPSHOT.jar app.jar

ENV JAVA_OPTS=""

EXPOSE 8080
ENTRYPOINT ["java", "${JAVA_OPTS}", "-jar", "/app.jar"]

 

  • docker build
docker build -t localtest-java:alpha .

 

  • docker container 실행
docker run --rm -e JAVA_OPTS="-Xms256M -Xmx512M" localtest-java:alpha

 

테스트 시나리오4

  • 시나리오: ENTRYPOINT를 sh -c "java ..."로 java를 실행하며, ENV JAVA_OPTS를 ENTRYPOINT에 사용
  • 결과: 컨테이너는 정상실행, JAVA_OPTS설정 정상

 

  • Dockerfile
FROM openjdk:8-jdk-alpine
COPY target/helloworld-0.0.1-SNAPSHOT.jar app.jar

ENV JAVA_OPTS=""

EXPOSE 8080
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"]

 

  • docker build
docker build -t localtest-java:alpha .

 

  • docker container 실행
docker run --rm -e JAVA_OPTS="-Xms256M -Xmx512M" localtest-java:alpha

 

참고자료

https://spring.io/guides/topicals/spring-boot-docker/

반응형

'전공영역 공부 기록' 카테고리의 다른 글

aws 환경변수 초기화  (0) 2023.08.21
쿠버네티스 pod running과 ready 차이  (0) 2023.08.13
Argocd rbac 테스트  (0) 2023.08.06
NLB를 장애상황 퀴즈  (1) 2023.08.06
DNS 이해  (1) 2023.07.21