.NET6 WorkerService 에서 Docker HEALTHCHECK 적용방법

개요

  • .NET6 WorkerService 에서 Docker HEALTHCHECK 적용하는 방법에 대해서 정리 진행합니다.

개발환경

  • 개발환경은 다음과 같습니다.
    • Docker : 20.10.12
    • .NET 6
    • Visual Studio 2022
  • 위 개발 환경으로 테스트 진행하였습니다.

테스트 목표

  • 테스트 하고자 하는 목표는, .NET 6 환경으로 Worker Serivce 프로젝트를 생성합니다.
  • 생성한 Worker Serivce 를 Docker Container 로 실행하여 docker ps -a 명령어를 통해 해당 컨테이너의 Status 를 확인할 때 Health 정보가 함께 보여지도록 하는 것입니다.

테스트 시나리오

  • 테스트 시나리오는 다음과 같습니다.
    • Worker Service 의 Dockerfile 안에 HEALTHCHECK 옵션을 추가합니다.
    • 테스트 하고자 하는 HEALTHCHECK 는 HealthCheckTest.sh 쉘 스크립트를 생성 후, HealthCheckTest.sh 안에 echo " "HelloCheck Test!!!!!!!!"" 명령을 입력한 후, 실제 해당 내용이 출력이되는지 확인합니다.
    • 또한, 컨테이너의 Status 를 조회하여 Status 에서 Health 상태가 같이 보이는지 확인합니다.

Worker Service 프로젝트 생성

  • 그럼 실제로 HEALTHCHECK 하는 방법에 대해서 알려 드리겠습니다.
  • 처음으로, Visual Studio 2022 를 실행하여 Worker Service 프로젝트 하나를 생성합니다.


HealthCheckTest.sh 생성하기

  • 앞에서, Worker Service 프로젝트를 생성하였습니다.
  • 다음으로, HealthCheckTest.sh 쉘 스크립트 파일을 생성 후 아래와 같이 내용을 입력해 줍니다.
#!/bin/bash

echo "HelloCheck Test!!!!!!!!"

exit 0;
  • HealthCheckTest.sh 쉘 스크립트가 실행되면, 처음에는 HelloCheck Test!!!!!!!! 내용이 출력될 것입니다.
  • 다음으로, exit 0; 명령어가 실행되는데 exit 가 0 이면 HEALTHCHECK 에서는 정상 값입니다.

Dockerfile 작성하기

  • 앞서, HealthCheckTest.sh 쉘 스크립트 파일을 생성하였습니다.
  • 다음으로 Dockerfile 안에 HEALTHCHECK 옵션을 설정해 주어야 합니다.
  • Dockerfile 안에 아래와 같이 작성합니다.
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WorkerService2/WorkerService2.csproj", "WorkerService2/"]
RUN dotnet restore "WorkerService2/WorkerService2.csproj"
COPY . .
WORKDIR "/src/WorkerService2"
RUN dotnet build "WorkerService2.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "WorkerService2.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
HEALTHCHECK --interval=10s --timeout=3s CMD sh /app/HealthCheckTest.sh
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WorkerService2.dll"]
  • 위에서 핵심은, HEALTHCHECK --interval=10s --timeout=3s CMD sh /app/HealthCheckTest.sh 옵션입니다.
  • 위 옵션은 10초 간격으로 3초 동안 HealthCheckTest.sh 쉘 스크립트를 실행하여 스크립트가 정상적으로 실행했다면, Health 이고 그렇지 않다면 비정상인지 체크하는 옵션입니다.
  • HEALTHCHECK 옵션을 추가해 주어야 컨테이너 Status 에 Health 정보가 표시됩니다.

Dockerfile 은 Worer Service 프로젝트 생성 시, Docker 옵션을 체크하였기 때문에 자동으로 생성됩니다.


Docker 이미지 생성하기

  • 앞서 Dockerfile 을 작성하였습니다.
  • 이제 해당 서비스를 build 하여 Docker 이미지로 생성해 줍니다.
  • Docker 이미지 빌드 명령어는 아래와 같습니다.
> docker build -t test_net -f .\WorkerService2\Dockerfile .
  • .\WorkerService2\Dockerfile 위 경로는 변경 될 수 있습니다.

Docker 컨테이너 실행하기

  • 이미지를 정상적으로 생성하였다면, 해당 이미지를 컨테이너로 실행해 주어야 합니다.
  • 컨테이너 실행 명령어는 다음과 같습니다.
> docker run -it --name health_test test_net

Docker Status 확인하기

  • Docker 컨테이너가 정상적으로 실행되었는지 확인하기 전, 우선 HEALTHCHECK 옵션이 설정되지 않은 상태면 어떻게 보이는지 확인하겠습니다.

HEALTHCHECK 옵션 설정 안되어 있는 경우

  • HEALTHCHECK 옵션이 설정되지 않은 경우, 아래와 같이 Status 에 Health 정보가 표시되지 않습니다.
  • 또한, docker inspect 명령어를 통해 Status 확인해도 Health 정보가 없는 것을 확인할 수 있습니다.


HEALTHCHECK 옵션 설정 된 경우

  • 다음은 HEALTHCHECK 옵션이 설정된 경우 모습입니다.
  • docker ps -a 명령어를 통해 Status 확인 결과, Status 에 Health 정보가 표시되는 것을 확인할 수 있습니다.

  • 또한, docker inspect 명령어를 통해 Status 확인해보면 Health 상태가 보이는 것을 확인할 수 있습니다.

728x90

'DOCKER' 카테고리의 다른 글

[도커] DockerFile HEALTHCHECK란?  (0) 2023.01.19
[Docker] Docker Hub 이미지 Pull denied 에러  (0) 2022.11.03
[Docker] PostgreSQL Docker Compose 파일 작성  (0) 2022.04.12
Docker 네트워크 사용법  (0) 2022.04.01
[Docker] 도커 볼륨  (0) 2021.11.08

이 글을 공유하기

댓글

Designed by JB FACTORY