다음을 통해 공유


Docker용 Visual Studio 컨테이너 도구

Visual Studio에 Docker 컨테이너 개발용으로 포함된 도구는 쉽게 사용할 수 있으며 컨테이너화된 애플리케이션의 빌드, 디버깅, 배포를 크게 단순화합니다. 단일 프로젝트용 컨테이너를 사용해 작업하거나 Docker Compose 또는 Service Fabric을 통한 컨테이너 오케스트레이션을 사용하여 여러 컨테이너의 여러 서비스를 작업할 수 있습니다.

필수 조건

Visual Studio에서 Docker 지원

Docker 지원은 ASP.NET 프로젝트, ASP.NET Core, .NET Core 및 .NET Framework 콘솔 프로젝트에서 사용할 수 있습니다.

Visual Studio의 Docker에 대한 지원은 고객 요구에 대응하여 여러 릴리스에 걸쳐 변경되었습니다. 프로젝트에 추가할 수 있는 Docker 지원에는 두 가지 수준이 있으며, 지원되는 옵션은 프로젝트의 유형 및 Visual Studio 버전에 따라 다릅니다. 일부 지원되는 프로젝트 유형에서 오케스트레이션을 사용하지 않고 단일 프로젝트용 컨테이너만 원하는 경우 Docker 지원을 추가하면 됩니다. 다음 수준은 컨테이너 오케스트레이션 지원으로, 선택한 특정 오케스트레이터용으로 적절한 지원 파일을 추가합니다.

Visual Studio 2019를 사용하면 Docker Compose, Kubernetes 및 Service Fabric을 컨테이너 오케스트레이션 서비스로 사용할 수 있습니다.

참고 항목

.NET Framework 또는 .NET Core 콘솔 프로젝트를 만들 때 Docker 지원을 추가할 수 있는 옵션이 없습니다. .NET Core 콘솔 애플리케이션 프로젝트를 만든 후 Docker 지원 추가 옵션을 사용할 수 있습니다. .NET Framework 콘솔 애플리케이션 프로젝트는 프로젝트가 생성된 후 Docker 지원 추가 옵션을 지원하지 않습니다. .NET Framework 또는 .NET Core 콘솔 프로젝트를 만든 후 Service Fabric 또는 Docker Compose를 사용하여 컨테이너 오케스트레이터 지원 추가 옵션을 지원합니다.

Visual Studio 2019 버전 16.4 이상에서는 실행 중인 컨테이너를 보고, 사용할 수 있는 이미지를 찾아보고, 환경 변수, 로그 및 포트 매핑을 보고, 파일 시스템을 검사하고, 디버거를 연결하거나, 컨테이너 환경 내에서 터미널 창을 열 수 있는 컨테이너 창을 사용할 수 있습니다. 컨테이너 창 사용을 참조하세요.

필수 조건

Visual Studio에서 Docker 지원

Docker 지원은 ASP.NET 프로젝트, ASP.NET Core, .NET Core 및 .NET Framework 콘솔 프로젝트에서 사용할 수 있습니다.

Visual Studio의 Docker에 대한 지원은 고객 요구에 대응하여 여러 릴리스에 걸쳐 변경되었습니다. 프로젝트에 추가할 수 있는 Docker 지원에는 몇 가지 옵션이 있으며, 지원되는 옵션은 프로젝트의 유형 및 Visual Studio 버전에 따라 다릅니다. 일부 지원되는 프로젝트 유형에서 오케스트레이션을 사용하지 않고 단일 프로젝트용 컨테이너만 원하는 경우 Docker 지원을 추가하면 됩니다. 다음 수준은 컨테이너 오케스트레이션 지원으로, 선택한 특정 오케스트레이터용으로 적절한 지원 파일을 추가합니다.

Visual Studio 2022 버전 17.9 이상을 사용하면 .NET 7 이상 프로젝트에 Docker 지원을 추가할 때 Docker 지원을 추가하기 위해 선택할 수 있는 두 가지 컨테이너 빌드 유형이 있습니다. Dockerfile을 추가하여 컨테이너 이미지를 빌드하는 방법을 지정하거나 .NET SDK에서 제공하는 기본 제공 컨테이너 지원을 사용하도록 선택할 수 있습니다.

또한 Visual Studio 2022 이상에서는 컨테이너 오케스트레이션을 선택할 때 Docker Compose 또는 Service Fabric을 컨테이너 오케스트레이션 서비스로 사용할 수 있습니다.

참고 항목

전체 .NET Framework 콘솔 프로젝트 템플릿을 사용하는 경우 프로젝트 작성 후 지원되는 옵션은 Service Fabric 또는 Docker Compose를 사용하는 옵션과 함께 컨테이너 오케스트레이터 지원 추가입니다. 프로젝트 작성 시 지원 추가와 오케스트레이션이 없는 단일 프로젝트에 대한 Docker 지원 추가는 사용 가능한 옵션이 아닙니다.

Visual Studio 2022에서는 실행 중인 컨테이너를 보고, 사용할 수 있는 이미지를 찾아보고, 환경 변수, 로그 및 포트 매핑을 보고, 파일 시스템을 검사하고, 디버거를 연결하거나, 컨테이너 환경 내에서 터미널 창을 열 수 있는 컨테이너 창을 사용할 수 있습니다. 컨테이너 창 사용을 참조하세요.

참고 항목

Docker의 라이선스 요구 사항은 Docker Desktop의 버전에 따라 다를 수 있습니다. Docker 설명서를 참조하여 사용자의 상황에서 개발을 위해 Docker Desktop 버전을 사용하기 위한 현재 라이선스 요구 사항을 이해합니다.

Docker 지원 추가

다음 스크린샷에 표시된 것처럼 새 프로젝트를 만들 때 Docker 지원 사용을 선택하여 프로젝트 생성 중에 Docker 지원을 사용하도록 설정할 수 있습니다.

Visual Studio에서 새 ASP.NET Core 웹앱에 Docker 지원을 사용하도록 설정하는 방법을 보여 주는 스크린샷

Visual Studio에서 새 ASP.NET Core 웹앱에 Docker 지원을 사용하도록 설정하는 방법을 보여 주는 스크린샷

참고 항목

.NET Framework 프로젝트(.NET Core 아님)의 경우 Windows 컨테이너만 사용할 수 있습니다.

솔루션 탐색기에서 추가>도커 지원를 선택해 기존 프로젝트에 도커 지원을 추가할 수 있습니다. 추가 > Docker 지원추가 > 컨테이너 오케스트레이터 지원 명령은 다음 스크린샷에 표시된 것처럼 솔루션 탐색기에서 ASP.NET Core 프로젝트에 해당하는 프로젝트 노드의 오른쪽 클릭 메뉴(또는 바로 가기 메뉴)에 있습니다.

Visual Studio에서 Docker 지원 메뉴 옵션을 추가하는 방법을 보여 주는 스크린샷

Visual Studio에서 Docker 지원 메뉴 옵션을 추가하는 방법을 보여 주는 스크린샷

Docker 지원 추가

Docker 지원을 추가하거나 사용 설정하면 Visual Studio에서 프로젝트에 다음을 추가합니다.

  • Dockerfile 파일
  • .dockerignore 파일
  • Microsoft.VisualStudio.Azure.Containers.Tools.Targets에 대한 NuGet 패키지 참조

추가하는 Dockerfile은 다음 코드와 유사합니다. 이 예제에서는 프로젝트 이름이 WebApplication-Docker이고 Linux 컨테이너를 선택했습니다.

#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:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

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

FROM build AS publish
RUN dotnet publish "WebApplication-Docker.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication-Docker.dll"]

Dockerfile 컨테이너 빌드 유형을 사용하여 Docker 지원 추가

.NET 7 이상 프로젝트에 Docker 지원을 추가하거나 사용하도록 설정하면 Visual Studio에 컨테이너 스캐폴딩 옵션 대화 상자가 표시됩니다. 이 대화 상자에서는 운영 체제(Linux 또는 Windows)를 선택할 수 있을 뿐만 아니라 Dockerfile 또는 .NET SDK와 같은 컨테이너 빌드 유형을 선택할 수도 있습니다. 이 대화 상자는 .NET Framework 프로젝트 또는 Azure Functions 프로젝트에 표시되지 않습니다.

17.11 이상에서는 컨테이너 이미지 배포판Docker 빌드 컨텍스트를 지정할 수도 있습니다.

Docker 지원을 추가하기 위한 컨테이너 스캐폴딩 옵션 대화 상자를 보여 주는 스크린샷.

컨테이너 이미지 배포판은 컨테이너가 기본 이미지로 사용하는 OS 이미지를 지정합니다. Linux 및 Windows 간에 컨테이너 유형으로 전환하면 이 목록이 변경됩니다.

다음 이미지를 사용할 수 있습니다.

Windows:

  • Windows Nano Server(권장, 8.0 버전 이상만 사용 가능, 네이티브 AOT(Ahead-of-Time) 배포 프로젝트에는 미리 설정되지 않음)
  • Windows Server Core(8.0 이상에서만 사용 가능)

Linux:

  • 기본값(Debian이지만 태그는 "8.0")
  • Debian
  • Ubuntu
  • Chiseled Ubuntu
  • Alpine

참고 항목

Chiseled Ubuntu 이미지를 기반으로 하고 네이티브 AOT(Ahead-of-Time) 배포를 사용하는 컨테이너는 고속 모드에서만 디버그할 수 있습니다. Visual Studio에서 Docker 컨테이너 사용자 지정하기를 확인하세요.

Docker 빌드 컨텍스트는 Docker 빌드에 사용되는 폴더를 지정합니다. Docker 빌드 컨텍스트를 확인하세요. 기본값은 솔루션 폴더이며, 이 폴더를 사용하는 것이 좋습니다. 빌드에 필요한 모든 파일은 이 폴더 하에 있어야 하며, 프로젝트 폴더 또는 다른 폴더를 선택하는 경우에는 일반적으로 그렇지 않습니다.

Dockerfile을 선택하면 Visual Studio에서 프로젝트에 다음을 추가합니다.

  • Dockerfile 파일
  • .dockerignore 파일
  • Microsoft.VisualStudio.Azure.Containers.Tools.Targets에 대한 NuGet 패키지 참조

추가하는 Dockerfile은 다음 코드와 유사합니다. 이 예제에서는 프로젝트 이름이 WebApplication-Docker이고 Linux 컨테이너를 선택했습니다.

#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
EXPOSE 80
EXPOSE 443

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

FROM build AS publish
RUN dotnet publish "WebApplication-Docker.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication-Docker.dll"]

Docker파일 없이 .NET 앱 컨테이너화하기

.NET 7 SDK가 설치된 Visual Studio 2022 17.9 이상에서는 .NET 6 이상을 대상으로 하는 ASP.NET Core 프로젝트에서 컨테이너 빌드에 대해 .NET SDK의 기본 제공 지원을 사용할 수 있습니다. 즉, Dockerfile이 필요하지 않습니다. dotnet 게시를 사용하여 .NET 앱 컨테이너화를 참조하세요. 대신 프로젝트 파일에서 MSBuild 속성을 사용하여 컨테이너를 구성하고 Visual Studio를 사용하여 컨테이너를 시작하는 설정은 .json 구성 파일, launchSettings.json 인코딩 됩니다.

컨테이너 빌드 유형으로 선택된 .NET SDK를 사용하여 Docker 지원을 추가하기 위한 컨테이너 스캐폴딩 옵션 대화 상자를 보여 주는 스크린샷.

여기서는 Dockerfile 대신 .NET SDK의 컨테이너 관리를 사용하도록 컨테이너 빌드 유형으로 .NET SDK를 선택합니다.

컨테이너 이미지 배포판은 컨테이너가 기본 이미지로 사용하는 OS 이미지를 지정합니다. Linux 및 Windows 간에 컨테이너로 전환하면 이 목록이 변경됩니다. 사용 가능한 이미지 목록은 이전 섹션을 참조하세요.

시작 시 .NET SDK 컨테이너 빌드 항목 launchSettings.json 다음 코드와 같습니다.

"Container (.NET SDK)": {
  "commandName": "SdkContainer",
  "launchBrowser": true,
  "launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
  "environmentVariables": {
    "ASPNETCORE_HTTPS_PORTS": "8081",
    "ASPNETCORE_HTTP_PORTS": "8080"
  },
  "publishAllPorts": true,
  "useSSL": true
}

.NET SDK는 컨테이너 기본 이미지 및 설정할 환경 변수와 같이 Dockerfile에 인코딩될 수 있는 일부 설정을 관리합니다. 컨테이너 구성을 위해 프로젝트 파일에서 사용할 수 있는 설정은 컨테이너 사용자 지정에 나열됩니다. 예를 들어 컨테이너 이미지 배포판은 프로젝트 파일에 ContainerBaseImage 속성으로 저장됩니다. 나중에 프로젝트 파일을 편집하여 변경할 수 있습니다.

<PropertyGroup>
    <ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0-alpine-amd64</ContainerBaseImage>
</PropertyGroup>

컨테이너 창 사용

컨테이너 창을 사용하면 머신에서 컨테이너와 이미지를 보고 무슨 일이 일어나고 있는지를 알 수 있습니다. 파일 시스템, 탑재된 볼륨, 환경 변수, 사용된 포트를 보고 로그 파일을 검사할 수 있습니다.

빠른 실행(Ctrl+Q)을 사용하고 containers을 입력하여 Containers 창을 엽니다. 도킹 컨트롤을 사용하여 창을 어딘가에 배치할 수 있습니다. 창의 너비 때문에 화면 아래쪽에 도킹할 때 가장 잘 작동합니다.

컨테이너를 선택하고, 탭을 사용하여 사용 가능한 정보를 봅니다. 확인하려면 Docker 지원 앱을 실행하고, 파일 탭을 연 다음, 폴더를 확장하여 컨테이너에 배포된 앱을 봅니다.

컨테이너 창의 스크린샷

컨테이너 창의 스크린샷

자세한 내용은 컨테이너 창 사용을 참조하세요.

Docker Compose 지원

Docker Compose를 사용하여 다중 컨테이너 솔루션을 작성하려면 프로젝트에 컨테이너 오케스트레이터 지원을 추가합니다. 이렇게 하면 동일한 docker-compose.yml 파일에 정의된 경우 일련의 컨테이너(전체 솔루션 또는 프로젝트 그룹)를 동시에 실행 및 디버그할 수 있습니다.

Docker Compose를 사용하여 컨테이너 오케스트레이터 지원을 추가하려면 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 추가 > 컨테이너 오케스트레이션 지원을 선택합니다. 그런 다음, 컨테이너를 관리할 Docker Compose를 선택합니다.

프로젝트에 컨테이너 오케스트레이터 지원을 추가하면 다음과 같이 솔루션 탐색기에서 프로젝트에 Dockerfile이 추가되고(아직 없는 경우) 솔루션에 docker-compose 폴더가 추가되는 것을 볼 수 있습니다:

Visual Studio 솔루션 탐색기의 Docker 파일 스크린샷

Visual Studio 솔루션 탐색기의 Docker 파일 스크린샷

docker-compose.yml이 이미 있는 경우에는 Visual Studio에서 이 파일에 필수 구성 코드 줄을 추가합니다.

Docker Compose를 사용하여 제어할 다른 프로젝트에 이 프로세스를 반복합니다.

많은 서비스를 사용하는 경우, 디버깅 세션에서 시작하려는 서비스의 하위 집합을 선택하여 시간과 컴퓨팅 리소스를 절약할 수 있습니다. Compose 서비스의 하위 집합 시작을 참조하세요.

참고 항목

원격 Docker 호스트는 Visual Studio 도구에서 지원되지 않습니다.

Service Fabric 지원

Visual Studio에서 Service Fabric 도구를 사용하면 Azure Service Fabric용으로 개발 및 디버그하고, 로컬에서 실행하고, Azure에 배포할 수 있습니다.

Visual Studio 2019 이상은 Windows 컨테이너 및 Service Fabric 오케스트레이션을 사용하여 컨테이너화된 마이크로 서비스 개발을 지원합니다.

더 자세한 자습서가 필요한 경우, 자습서: Azure Service Fabric에 Windows 컨테이너로 .NET 애플리케이션 배포.

Azure Service Fabric에 대한 자세한 내용은 Service Fabric을 참조하세요.

지속적인 업데이트 및 연속 통합(CI/CD)

Visual Studio는 Azure Pipelines와 원활하게 통합되어 서비스 코드 및 구성의 변경 사항에 대해 자동화된 연속 통합 및 지속적인 업데이트를 제공합니다. 시작하려면 첫 번째 파이프라인 만들기를 참조하세요.

Service Fabric의 경우 자습서: Azure DevOps Projects 를 사용하여 Azure Service Fabric에 ASP.NET Core 앱 배포를 참조하세요.

다음 단계

서비스 구현 및 컨테이너 작업에서 Visual Studio 도구 사용에 대한 자세한 내용을 보려면 다음 문서를 참조하세요.

로컬 Docker 컨테이너에서 앱 디버그

Visual Studio를 사용하여 컨테이너 레지스트리에 ASP.NET 컨테이너 배포