DockerFile
FROM amazoncorretto:17-alpine
# 필요한 파일들과 jar COPY
COPY /target/front-0.0.1-SNAPSHOT.jar /app/front.jar
ENV LOG_FILE_PATH=/home/freet/logs/front/application.log
# curl 설치
RUN apk --no-cache add curl
# jar를 실행할 DIR로 이동
WORKDIR /app
# 이미지의 서버 포트는 고정
EXPOSE 8080
# jar 실행 blue&green 서버 포트 & profiles는 compose에서 조절
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=${SPRING_PROFILES_ACTIVE}", "-Dserver.port=8080", "front.jar"]
일반적인 도커파일을 작성합니다.
curl은 나중에 container 내부에서 health check를 하기 위해 apk를 사용해 add 합니다.
docker-compose.yml
# compose 명령어 docker-compose -f docker-compose.front.yml up -d
# compose 죽이기 docker-compose down
version: '3.4'
services:
front:
image: freet/front:latest
environment:
- SPRING_PROFILES_ACTIVE=dev
ports:
# 호스트포트:이미지포트
- "8191:8080"
volumes:
- ./logs/front:./logs/front
command: [ "/bin/sh", "-c", "if [ ! -d ./logs/front ]; then mkdir -p ./logs/front; fi" ]
stdin_open: true # -i
tty: true # -t
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:8080/infra/health" ]
interval: 10s
timeout: 30s
retries: 10
start_period: 30s
healthcheck를 사용해 컨테이너 내부의 앱 상태를 체크합니다.
3.4 버전 이후 부턴 start_period를 사용해 30초 후부터 체크를 시작합니다. 이후 10초마다 test의 커맨드를 실행합니다.
이때 dockerfile에서 다운받은 curl을 사용해 uri에 curl을 날립니다.

container가 올라오고 inspect를 해보면 위와 같은 Health 속성에 기록이 남습니다.
interval과 retries에 해당하는 시도를 해보고 만약 성공한다면 healthy 모두 실패한다면 unhealty가 Status로 됩니다.

docker ps 를 통해 현재 컨테이너들의 상태를 쉽게 확인할 수 있습니다.
https://docs.docker.com/compose/compose-file/compose-file-v3/#healthcheck