다음을 통해 공유


빠른 시작: Visual Studio의 Docker

Visual Studio를 사용하면 컨테이너화된 .NET, ASP.NET 및 ASP.NET Core 앱을 쉽게 빌드, 디버그 및 실행하고 Azure Container Registry, Docker Hub, Azure App Service 또는 사용자 고유의 Container Registry에 게시할 수 있습니다. 이 문서에서는 ASP.NET Core 앱을 Azure Container Registry에 게시합니다.

필수 구성 요소

  • Docker Desktop
  • Visual Studio 2019에는 웹 개발, Azure Tools 워크로드 및/또는 .NET Core 크로스-플랫폼 개발 워크로드가 설치되어 있습니다.
  • .NET Core를 사용하여 개발을 위한 .NET Core 개발 도구
  • Azure Container Registry에 게시하려면 Azure 구독이 필요합니다. 무료 평가판을신청하세요.

설치 및 설정

Docker 설치의 경우 먼저 windows용 Docker Desktop에서 정보를 검토합니다.설치하기 전에 알아야 할 사항. 다음으로, docker Desktop 설치합니다.

Docker 컨테이너에 프로젝트 추가

  1. ASP.NET Core Web App 템플릿을 사용하여 새 프로젝트를 만들거나 .NET Core 대신 .NET Framework를 사용하려는 경우 ASP.NET 웹 애플리케이션(.NET Framework)선택합니다.

  2. 새 웹 애플리케이션 만들기 화면에서 Docker 지원 사용 확인란이 선택되어 있는지 확인합니다.

    Docker 지원 사용 확인란의 스크린샷.

    스크린샷은 .NET Core를 보여줍니다. .NET Framework를 사용하는 경우 약간 다르게 보입니다.

  3. 원하는 컨테이너 유형(Windows 또는 Linux)을 선택하고 만들기를 클릭합니다.

Dockerfile 개요

최종 Docker 이미지를 만들기 위한 레시피인 Dockerfile프로젝트에 만들어집니다. 내의 명령에 대한 이해는 Dockerfile 참조 참조하세요.

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

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

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

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

위의 Dockerfile dotnet/core/aspnet 이미지를 기반으로 하며 프로젝트를 빌드하고 컨테이너에 추가하여 기본 이미지를 수정하는 지침을 포함합니다. .NET Framework를 사용하는 경우 기본 이미지가 달라집니다.

새 프로젝트 대화 상자의 HTTPS 구성 확인란을 선택하면 Dockerfile 두 개의 포트가 노출됩니다. 하나의 포트는 HTTP 트래픽에 사용됩니다. 다른 포트는 HTTPS에 사용됩니다. 확인란을 선택하지 않으면 단일 포트(80)가 HTTP 트래픽에 노출됩니다.

디버그

도구 모음의 디버그 드롭다운 목록에서 Docker 선택하고 앱 디버깅을 시작합니다. 인증서 신뢰에 대한 메시지가 표시될 수 있습니다. 계속하려면 인증서를 신뢰하도록 선택합니다.

출력 창의 컨테이너 도구 옵션은 수행 중인 작업을 보여 줍니다. 처음으로 기본 이미지를 다운로드하는 데 시간이 걸릴 수 있지만 후속 실행 시 훨씬 빠릅니다.

메모

디버깅을 위해 포트를 변경해야 하는 경우 launchSettings.json 파일에서 변경할 수 있습니다. 컨테이너 시작 설정참조하세요.

컨테이너 창

Visual Studio 2019 버전 16.4 이상이 있는 경우 컨테이너 창을 사용하여 사용 가능한 이미지뿐만 아니라 컴퓨터에서 실행 중인 컨테이너를 볼 수 있습니다.

IDE의 검색 상자를 사용하여 컨테이너 창을 열고(사용할 Ctrl+Q 누르고), container입력하고, 목록에서 컨테이너 창을 선택합니다.

컨테이너 창을 이동한 후 창 배치 가이드에 따라 편집기 아래와 같은 편리한 위치에 탑재할 수 있습니다.

창에서 컨테이너를 찾고 각 탭을 단계별로 실행하여 환경 변수, 포트 매핑, 로그 및 파일 시스템을 확인합니다.

컨테이너 창의 스크린샷

자세한 정보를 보려면 컨테이너 창을 참조하십시오.

Docker 이미지 게시

앱의 개발 및 디버그 주기가 완료되면 앱의 프로덕션 이미지를 만들 수 있습니다.

  1. 구성 드롭다운 목록을 릴리스로 변경한 후 앱을 빌드합니다.

  2. 솔루션 탐색기 프로젝트를 마우스 오른쪽 단추로 클릭하고 게시할선택합니다.

  3. 게시 대화 상자에서 Docker Container Registry 탭을 선택합니다.

    게시 대화 상자의 스크린샷 - Docker Container Registry를 선택합니다.

  4. 새 Azure Container Registry 만들기을 선택합니다.

    게시 대화 상자의 스크린샷 - 새 Azure 컨테이너 레지스트리 만들기를 선택합니다.

  5. 원하는 값을 새 Azure Container Registry 만들기에 입력하세요.

    설정 제안된 값 묘사
    DNS 접두사 전역적으로 고유한 이름 컨테이너 레지스트리를 고유하게 식별하는 이름입니다.
    구독 구독 선택 사용할 Azure 구독입니다.
    리소스 그룹 myResourceGroup 컨테이너 레지스트리를 만들 리소스 그룹의 이름입니다. 선택하여 새 리소스 그룹을 만듭니다.
    SKU 표준 컨테이너 레지스트리의 서비스 계층
    레지스트리 위치 가까운 위치 귀하 근처 또는 컨테이너 레지스트리를 사용할 다른 서비스 근처의 지역에서 위치를 선택하십시오.

    Visual Studio의 Azure Container Registry 만들기 대화 상자 스크린샷

  6. 생성클릭합니다. 이제 게시 대화 상자에 만든 레지스트리가 표시됩니다.

    만든 Azure Container Registry를 보여 주는 게시 대화 상자의 스크린샷

  7. 마침 선택하여 Azure에서 새로 만든 레지스트리에 컨테이너 이미지를 게시하는 프로세스를 완료합니다.

    성공적인 게시를 보여 주는 스크린샷

다음 단계

이제 레지스트리에서 Docker 이미지를 실행할 수 있는 호스트(예: Azure Container Instances )로 컨테이너를 끌어올 수 있습니다.

Visual Studio를 사용하면 컨테이너화된 .NET, ASP.NET 및 ASP.NET Core 앱을 쉽게 빌드, 디버그 및 실행하고 Azure Container Registry, Docker Hub, Azure App Service 또는 사용자 고유의 Container Registry에 게시할 수 있습니다. 이 문서에서는 Azure Container Registry에 ASP.NET Core 앱을 게시합니다.

필수 구성 요소

  • Docker Desktop
  • Web Development, Azure Tools 워크로드 및/또는 .NET 데스크톱 개발 워크로드가 설치된 Visual Studio 2022
  • Azure Container Registry에 게시하려면 Azure 구독이 필요합니다. 무료 평가판등록하세요.

설치 및 설정

Docker 설치의 경우 먼저 windows용 Docker Desktop에서 정보를 검토합니다.설치하기 전에 알아야 할 사항. 다음으로, docker Desktop 설치합니다.

Docker 컨테이너에 프로젝트 추가

  1. Visual Studio 프로젝트를 만들기 전에 Docker Desktop에서 Visual Studio 프로젝트에서 사용하려는 컨테이너 유형(Windows 또는 Linux)을 실행하고 있는지 확인합니다.

    Docker Desktop에서 사용하는 컨테이너 유형을 변경하려면 작업 표시줄에서 Docker 아이콘(whale)을 마우스 오른쪽 단추로 클릭하고 Linux 컨테이너로 전환 또는 Windows 컨테이너로 전환 선택합니다.

    경고

    Visual Studio 프로젝트를 만든 후 컨테이너 유형을 전환하면 Docker 이미지 파일이 로드되지 않을 수 있습니다.

  2. ASP.NET Core Web App 템플릿을 사용하여 새 프로젝트를 만들거나 .NET Core 대신 .NET Framework를 사용하려는 경우 ASP.NET 웹 애플리케이션(.NET Framework)선택합니다.

  3. 새 웹 애플리케이션 만들기 화면에서 Docker 지원 사용 확인란이 선택되어 있는지 확인합니다.

    Docker 지원 사용 확인란의 스크린샷

    스크린샷은 .NET 8.0의 최신 릴리스를 보여줍니다. .NET Framework를 사용하는 경우 대화 상자가 약간 다르게 보입니다.

  4. 원하는 컨테이너 유형(Windows 또는 Linux)을 선택하고 만들기선택합니다.

Dockerfile 개요

Visual Studio는 프로젝트에 Dockerfile 만들어 최종 Docker 이미지를 만드는 방법에 대한 레시피를 제공합니다. 자세한 내용은 Dockerfile에서 사용되는 명령에 대한 자세한 내용은 Dockerfile 참조 참조하세요.

#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-1809 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["MyWepApp/MyWebApp.csproj", "MyWebApp/"]
RUN dotnet restore "./MyWebApp/./MyWebApp.csproj"
COPY . .
WORKDIR "/src/MyWebApp"
RUN dotnet build "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/build

# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false

# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]

위의 Dockerfile .NET 8 이미지와 MCR(Microsoft Container Registry) 기반으로 하며, MyWebApp 프로젝트를 빌드하고 컨테이너에 추가하여 기본 이미지를 수정하는 지침을 포함합니다. .NET Framework를 사용하는 경우 기본 이미지가 다릅니다.

새 프로젝트 대화 상자의 HTTPS 구성 확인란을 선택하면 Dockerfile 두 개의 포트가 노출됩니다. 하나의 포트는 HTTP 트래픽에 사용됩니다. 다른 포트는 HTTPS에 사용됩니다. 확인란을 선택하지 않으면 단일 포트(80)가 HTTP 트래픽에 노출됩니다.

Visual Studio 2022 버전 17.7 이상을 사용하면 .NET 8 대상으로 지정할 수 있습니다. 이 경우 상승된 권한보다는 일반 사용자로서 앱을 더 안전하게 실행할 수 있다는 이점이 있습니다. Visual Studio for .NET 8 프로젝트에서 생성된 기본 Dockerfile은 일반 사용자로 실행되도록 구성됩니다. 기존 프로젝트에서 이 동작을 사용하도록 설정하려면 기본 이미지의 Dockerfile에 USER app 줄을 추가합니다. 또한 포트 80은 일반 사용자에 대해 제한되므로 80 및 443 대신 포트 8080 및 8081을 노출합니다. 포트 8080은 HTTP 트래픽에 사용되고 포트 8081은 HTTPS에 사용됩니다. 일반 사용자로 실행하려면 컨테이너가 .NET 8 기본 이미지를 사용해야 하며 앱은 .NET 8 앱으로 실행되어야 합니다. 올바르게 구성된 경우 Dockerfile에는 다음 예제와 같이 코드가 포함되어야 합니다.

FROM mcr.microsoft.com/dotnet/aspnet:8.0-preview AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

디버그

도구 모음의 디버그 드롭다운 목록에서 Docker 선택하고 앱 디버깅을 시작합니다. 인증서 신뢰에 대한 메시지가 표시될 수 있습니다. 계속하려면 인증서를 신뢰하도록 선택합니다.

출력 창의 컨테이너 도구 옵션은 수행 중인 작업을 보여 줍니다. 처음으로 기본 이미지를 다운로드하는 데 시간이 걸릴 수 있지만 후속 실행 시 더 빠릅니다.

빌드가 완료되면 브라우저가 열리고 앱의 홈페이지가 표시됩니다. 브라우저 주소 표시줄에서 디버깅을 위한 localhost URL 및 포트 번호를 볼 수 있습니다.

메모

디버깅을 위해 포트를 변경해야 하는 경우 launchSettings.json 파일에서 변경할 수 있습니다. 컨테이너 시작 설정참조하세요.

컨테이너 창

컨테이너 창을 사용하여 컴퓨터 및 사용 가능한 다른 이미지에서 실행 중인 컨테이너를 볼 수 있습니다.

IDE의 검색 상자를 사용하여 컨테이너 창을 열고(사용할 Ctrl+Q 누르고), container입력하고, 목록에서 컨테이너 창을 선택합니다.

컨테이너 창을 이동시키고 창 배치 가이드를 따라 편집기 아래와 같은 편리한 위치에 배치할 수 있습니다.

창에서 컨테이너를 찾고 각 탭을 단계별로 실행하여 환경 변수, 포트 매핑, 로그 및 파일 시스템을 확인합니다.

컨테이너 창의 스크린샷

자세한 내용은 컨테이너 창 사용하기을 참조하십시오.

Docker 이미지 게시

앱의 개발 및 디버그 주기가 완료되면 앱의 프로덕션 이미지를 만들 수 있습니다.

  1. 구성 드롭다운 목록을 으로 변경하고 릴리스 앱을 빌드합니다.

  2. 솔루션 탐색기 프로젝트를 마우스 오른쪽 단추로 클릭하고 게시할선택합니다.

  3. 게시 대화 상자에서 Docker Container Registry 탭을 선택합니다.

    게시 대화 상자의 스크린샷 - Docker Container Registry를 선택합니다.

  4. 새 Azure Container Registry만들기를 선택합니다.

    게시 대화 상자의 스크린샷 - 새 Azure 컨테이너 레지스트리 만들기를 선택합니다.

  5. 원하는 값을 새 Azure Container Registry만드기에서 입력합니다.

    설정 제안된 값 묘사
    DNS 접두사 전역적으로 고유한 이름 컨테이너 레지스트리를 고유하게 식별하는 이름입니다.
    구독 구독 선택 사용할 Azure 구독입니다.
    리소스 그룹 myResourceGroup 컨테이너 레지스트리를 만들 리소스 그룹의 이름입니다. 선택하여 새 리소스 그룹을 만듭니다.
    SKU 표준 컨테이너 레지스트리의 서비스 계층
    레지스트리 위치 가까운 위치 지역 가까운 위치 또는 컨테이너 레지스트리를 사용할 수 있는 다른 서비스 근처를 선택합니다.

    Visual Studio의 Azure Container Registry 만들기 대화 상자 스크린샷

  6. 선택만들기. 이제 게시 대화 상자에 만든 레지스트리가 표시됩니다.

    만든 Azure Container Registry를 보여 주는 게시 대화 상자의 스크린샷

  7. 마침 선택하여 Azure에서 새로 만든 레지스트리에 컨테이너 이미지를 게시하는 프로세스를 완료합니다.

    성공적인 게시를 보여 주는 스크린샷

다음 단계

이제 레지스트리에서 Docker 이미지를 실행할 수 있는 호스트(예: Azure Container Instances )로 컨테이너를 끌어올 수 있습니다.

추가 리소스