[Docker] Visual Studio 2019와 .NET 5를 통해 생성된 Windows Container 파일구조

Docker 질문글입니다.
Azure 카테고리와 맞지 않지만, 가상화라는면에서 여기에 올리면 좋겠다고 생각하여 여기에 질문글 작성합니다.

제 프로세스는 아래와 같습니다.

  1. Visual Studio 2019 Pro 실행

  2. ‘작업자 서비스’ 탬플릿으로 프로젝트 생성 MSDN

  3. 프로젝트 이름 정하고 Windows로 Docker 프로젝트 생성

위의 순서대로 하면 기본 Dockerfile과 함께 기본 ASP.NET Core 백그라운드 서비스 앱이 완성됩니다.
이 프로그램은 1초마다 현재 시간을 찍는 프로그램 인데요. (질문과 무관)
그것과는 상관없이 파일구조가 궁금합니다.

기본으로 생성되는 Dockerfile을 수정해서 아래와 같이 만들었습니다.

FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
WORKDIR /app
ENTRYPOINT ["dotnet", "WorkerService1.dll"]

그리고 Visual Studio를 통해 Debug하면 다음과 같이 보여줍니다.

보시면 제가 dockerfile 스크립트에 작성한게 없는 것들도 나와 있습니다.
윈도우 컨테이너 기본으로 따라오는 거라고 하기엔 src 폴더를 보면 다른 프로젝트들도 섞여있습니다.
혹시 Cache가 있나 싶어서 docker 명령어를 찾아서

docker system prune -a

라는 명령어도 쳐봤지만, Image만 모두 제거될 뿐 별다른 차도는 없었습니다.

이건 왜 그런건가요?

1개의 좋아요

어제 오늘 삽질해본 결과 VIsual Studio에서 자동으로 만들어 주는게 맞는 것 같다는 생각이 들었습니다.
본 샘플 프로젝트는 아니지만, 제가 만들려고 했던 프로젝트에 Dockerfile이 작성된 것이 있었는데 Visual Studio에서는 별탈없이 디버깅이 되었습니다. 디버깅이 되었다는 것은 현 Dockerfile로 이미지 빌드에 성공했고, 이 이미지를 기반으로 컨테이너를 생성했다는 얘기가 됩니다.

하지만 그 Dockerfile을 가지고 그대로 powershell을 열어 빌드하니까 안되는 것이 많았습니다.
우선 windows container의 기본 shell이 cmd.exe이기 때문에 제가 사용하던 sed 명령어가 먹지 않았습니다.
따라서 수동으로 Dockerfile의 SHELL 명령어를 통해 powershell로 강제지정했고, 저희가 사용하는 Azure DevOps Artifact와도 Personal Access Token 부분이 제대로 되지 않아서 구글링하여 따로 처리했습니다.

powershell을 통해 하나하나 빌드 과정을 수행해보니 dockerfile에 대한 명령어도, powershell에 대한 명령어도 숙달이 좀 된 것 같아서 삽질하는 동안은 많이 스트레스를 받았지만 얻은 것은 있다고 생각합니다. 하지만 정말로 visual studio가 이것저것 해주는 지는 확인을 못해서 조금 찜찜하네요.

개발툴이 편리하게 개발하도록 여러가지를 자동화해준다는 것을 알았지만 pipeline을 통해 하나하나 외부환경에서 빌드를 해야할 때는 오히려 방해가 되는 것 같습니다.

3개의 좋아요

음… 저 DockerFile은 정상 작동할 수 없어보입니다.
그럼에도 실행되었다면…
Visual Studio가 언급하신 DockerFile을 사용하지 않고 자체적으로 작성하여 컨테이너를 실행하는것 같습니다.

(Windows container라도 docker라면 기존 사용법과 다를리는 없을텐데…)

FROM mcr.microsoft.com/dotnet/runtime:5.0 AS base
WORKDIR /app
COPY published/WorkerService1.dll ./  << 도커 이미지를 만들땐 이런식으로 실행하고자하는 App을 넣어야합니다. 
ENTRYPOINT ["dotnet", "WorkerService1.dll"]

아마 Visual studio가 dockerFile을 자동 생성할때
도커 이미지로 넣을 Project의 경로 설정을 @Vincent 님의 생각과 다르게 받아 적용한거 같습니다.

2개의 좋아요