본문 바로가기
devops/docker

dockerfile에 springboot profile 적용하기

by 아이티.파머 2024. 4. 7.
반응형

dockerfile에 springboot profile 적용하기

docker file

  • ENV USE_PROFILE 을 환경설정 파일로 만들고 docker run 시에 설정 정보를 넣어서 실행할 수 있도록 한다. 디폴트 값은 local 이다.

 

# docker file
# 1. Start with a base image containing Java runtime
FROM adoptopenjdk/openjdk11
# 2. Add Author info
LABEL maintainer="skan@"
# Add a volume to /tmp
VOLUME /tmp
# Make port 8761 available to the world outside this container
EXPOSE 8761
# The application's jar file
ARG JAR_FILE=build/libs/spring-cloud-eureka-test-0.0.1-SNAPSHOT.jar
# Add the application's jar to the container
COPY ${JAR_FILE} spring-cloud-eureka.jar

ENV USE_PROFILE=local
# Run the jar file
ENTRYPOINT ["java","-Dspring.profiles.active=${USE_PROFILE}","-Djava.security.egd=file:/dev/./urandom","-jar","/spring-cloud-eureka.jar"]

 

docker build

docker build -t {image name}:{tag version} {docker file path}
docker build -t spring-cloud-eureka-server:latest ./
docker images

------
REPOSITORY                         TAG          IMAGE ID       CREATED          SIZE
spring-cloud-eureka-server   latest       702b2ed6b7ba   34 seconds ago   485MB

docker build option 설명

  • t –tag: 레파지토리(이미지이름)과 테그명을 입력한다 ‘:’ 기준으로 {이미지이름}:{테그번호}로 남겨진다. 테그 번호를 남기지 않으면 자동으로 latest가 된다
  • ./ : Dockerfile 이 있는 경로를 지정해 준다. (지금은 현재 디렉토라)

image 생성후 docker run 으로 container 생성

docker run -d -p 8761:8761 --name={container_name} {image_name}
docker run -d -p 8761:8761 --name=spring-discovery spring-cloud-eureka-server:latest

생성된 container 확인

docker build 로는 이미지를 생성하는 것이기 때문에 컨테이너에는 나타나지 않는다. docker run 으로 실행시킨 후 container 가 생성된 것을 확인 할 수 있다.

skan@mezzoui-MacBookPro spring-cloud-eureka-test % docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS          PORTS                                                                                      NAMES
8f55b814771b   spring-cloud-eureka-server:latest   "java -Djava.securit…"   8 seconds ago    Up 8 seconds    0.0.0.0:8761->8761/tcp, :::8761->8761/tcp                                                  spring-discovery
0efaf8cded3a   jenkins_jenkins                     "/sbin/tini -- /usr/…"   59 minutes ago   Up 59 minutes   0.0.0.0:50000->50000/tcp, :::50000->50000/tcp, 0.0.0.0:9090->8080/tcp, :::9090->8080/tcp   jenkins
756f617f2699   mysql:5.7.21                        "docker-entrypoint.s…"   5 weeks ago      Up 6 hours      0.0.0.0:3306->3306/tcp, :::3306->3306/tcp                                                  mysql

docker start 및 stop

docker run 으로 생성한 컨테이너들은 다시 run 으로 생성 할 수 없다. 컨테이너 아이디를 사용하여 서비스를 시작 혹은 중지한다.

docker start {container_id}
docker stop {container_id}

docker run , spring parameter 적용

docker 에서는 실행시 -e 옵션을 이용하여 ENV USE_PROFILE=local 로 등록된 env 의 항목에 파라미터 값을 전달 할 수 있다.

  • -e USE_PROFILE={profile}
docker run -p 80:8080 -d --restart always -e USE_PROFILE={profile} --name={container_name} {image_name}
docker run -p 8761:8761 -d --restart always -e USE_PROFILE=prod --name=spring-discovery spring-cloud-eureka-server:latest

실행된 콘솔에 the following profiles are active: prod 로 바뀌어서 나온걸 확인 할 수 있다.

반응형