.NET6 WorkerService 에서 Docker HEALTHCHECK 적용방법
- DOCKER
- 2023. 1. 19. 20:47
개요
- .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 |
이 글을 공유하기