커스텀 유틸리티의 필요성
- curl은 웹 애플리케이션이나 API를 테스트하는 데 매우 유용한 도구
- 보안 정책상의 이유로 이미지에 curl을 포함시킬 수 없기 때문에, 실무에서 개발하는 애플리케이션을 테스트하는 목적으로 사용이 어려움
- 실제 애플리케이션 체크에는 애플리케이션과 같은 언어로 구현된 별도의 커스텀 유털리티를 사용하는 것이 권장됨
- 이에 따른 장점은 다음과 같다.
- 애플리케이션과 같은 도구를 사용하므로 이미지에 추가적인 소프트웨어를 포함시킬 필요가 없다.
- 재시도 횟수나 분기 등 셀 스크럽트로는 표현하기 까다로운 복잡한 체크 로직을 적용할 수 있다.
- 애플리케이션과 같은 설정을 사용해 대상 URL을 여러 곳에 반복 정의하거나 수정에서 누락시키는 일을 방지할 수 있다.
- 애플리케이션과 같은 라이브러리 환경에서 컨테이너 실행 전에 확인이 필요한 모든 사항을 검증할 수 있다.
- 데이터베이스 접속이나 인증서 파일의 존재 유무 등
Dockerfile 적용
API 컨테이너
- 닷넷 코어로 구현한 간단한 HTTP 테스트 유틸리티를 사용해 API 이미지의 헬스 체크
# app image
001) FROM diamol/dotnet-aspnet
002)
003) ENTRYPOINT ["dotnet", "Numbers.Api.dll"]
004) HEALTHCHECK CMD ["dotnet", "Utilities.HttpCheck.dll", "-u", "http://localhost/health"]
005)
006) WORKDIR /app
007) COPY --from=http-check-builder /out/ .
008) COPY --from=builder /out/ .
- 004: HEALTHCHECK 인스트럭션에서 curl 대신 닷넷 코어로 구현된 테스트 유틸리티 사용
웹 컨테이너
- 다양한 상황에 대응할 수 있도록 유연하다는 것도 HTTP 테스트 유틸리티의 장점
- API 사용 가능 여부를 확인하는 디펜던시 체크에도 같은 유틸리티를 사용
001) FROM diamol/dotnet-aspnet
002)
003) ENV RngApi__Url=http://numbers-api/rng
004)
005) CMD dotnet Utilities.HttpCheck.dll -c RngApi:Url -t 900 && \
006) dotnet Numbers.Web.dll
007)
008) WORKDIR /app
009) COPY --from=http-check-builder /out/ .
010) COPY --from=builder /out/ .
- 005:
-c
옵션은 애플리케이션과 같은 설정 파일을 읽어 대상 URL을 지정-t
옵션은 유틸리티가 요청에 대한 응답을 기다릴 제한 시간을 설정
컨테이너 실행
001) ➜ docker container run -dp 8081:80 diamol/ch08-numbers-web:v3
002) ➜
003) ➜ docker container ls --all --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}"
004) CONTAINER ID NAMES IMAGE STATUS
005) 56ecb1f7b255 xenodochial_hamilton diamol/ch08-numbers-web:v3 Exited (1) 2 minutes ago
- 001: 컨테이너 실행 시 HTTP 테스트 유틸리티를 사용해 디펜던시 체크를 수행
- 005: 디펜던시 체크가 실패해 컨테이너가 종료됐다.