8-2. 디펜던시 체크가 적용된 컨테이너 실행하기
FROM diamol/dotnet-aspnet
ENV RngApi:Url=http://numbers-api/rng #환경변수?
CMD curl --fail http://numbers-api/rng && \ # HTTP 요청을 보내 사용 가능한 API인지 확인
dotnet Numbers.Web.dll # 어플리케이션 실행 (헬스체크 생략)
WORKDIR /app
COPY --from=builder /out/ .
8-3. 애플리케이션 체크를 위한 커스텀 유틸리티 만들기
FROM diamol/dotnet-aspnet
ENTRYPOINT ["dotnet", "Numbers.Api.dll"]
HEALTHCHECK CMD ["dotnet", "Utilities.HttpCheck.dll", "-u", "http://localhost/health"] # 이처럼 별도의 유틸리티 체크만 추가
WORKDIR /app
COPY --from=http-check-builder /out/ .
COPY --from=builder /out/.
# 기존 컨테이너 삭제
docker container rm -f $(docker container ls -aq)
# v3 버전 이미지로 API 실행
docker container run -d -p 8080:80 --health-interval 5s diamol/ch08-numbers-api:v3
# 5초 대기
docker container ls
# API 4번 호출
curl http://localhost:8080/rng
curl http://localhost:8080/rng
curl http://localhost:8080/rng
curl http://localhost:8080/rng # 실패
# 버그 확인
docker container ls # 15초 이후 상태가 이상으로 변경됨
FROM diamol/dotnet-aspnet
ENV RngApi:Url=http://numbers-api/rng
CMD dotnet Utilities.HttpCheck.dll -c RngApi:Url -t 900 &&\ # 헬스체크 유틸로 api 체크 한 뒤 실행
dotnet Numbers.Web.dll
WORKDIR /app
COPY --from=http-check-builder /out/ .
COPY --from=builder /out/ .
docker container run -d -p 8081:80 diamol/ch08-numbers-web:v3
docker container ls -all
8-4. 도커 컴포즈에 헬스 체크와 디펜던시 체크 정의하기
numbers-api:
image: diamol/ch08-numbers-api:v3
ports:
- "8087:80"
healthcheck:
interval: 5s # 헬스 체크 간격
timeout 1s # 응답시간 실패기준
retries: 2 # 이상으로 간주하는 연속 실패기준
start_period: 5s # 어플리케이션 시작 후 첫 헬스체크 딜레이 (시작하지도 않았는데 오류판단하면 안되니)
networks:
- app-net
numbers-web:
image: diamol/ch08-numbers-web:v3
restart: on-failure # 컨테이너 종료 시 재시작
ports:
- "8088:80"
healthcheck:
test: ["CMD", "dotnet", "Utilities.HttpCheck.dll", "-t", "150"] # 디펜던시 체크까지(150ms)
interval: 5s
timeout: 1s
retries: 2
start_period: 10s
networks:
- app-net