이 출시되었습니다! 11월의 새로운 기능 및 수정 사항을 읽어보세요.

개발 환경

컨테이너 기반 서비스를 로컬 환경 또는 원격 환경에서 개발할지 선택할 수 있습니다. 로컬 환경은 개발자 워크스테이션의 운영 체제입니다. 로컬 환경을 사용한다는 것은 워크스테이션에 설치된 Docker를 사용하여 서비스 컨테이너를 빌드하고 실행한다는 것을 의미합니다. Docker는 Windows, macOS 및 다양한 Linux 배포판에서 지원됩니다. 시스템 및 하드웨어 요구 사항은 Docker 설치 페이지를 참조하십시오.

원격 개발 환경은 개발자 워크스테이션과 다릅니다. SSH로 액세스 가능한 원격 머신, 개발자 워크스테이션에서 실행되는 가상 머신 또는 개발 컨테이너일 수 있습니다. 원격 환경은 로컬 환경에 비해 장점을 가질 수 있으며, 주요 장점은 개발 중에 서비스가 프로덕션에서 실행될 때와 동일한 운영 체제를 사용할 수 있다는 것입니다. 원격 환경을 사용하려면 docker 명령(Docker CLI)이 해당 환경 내에서 사용 가능하고 기능적인지 확인해야 합니다.

두 번째 중요한 선택은 일반 프로세스로 실행되는 서비스를 디버깅할지, 아니면 컨테이너에서 실행되는 서비스를 디버깅할지 여부입니다.

개발 환경 선택 가이드라인

  1. 다음과 같은 경우 로컬 환경을 사용하십시오.

    • 개발 및 서비스 컨테이너 내에서 동일한 OS 사용
    • 로컬 환경 위에 필요한 도구 및 종속성 설치
  2. 원격 환경이 필요한 경우 먼저 개발 컨테이너 사용을 고려하십시오.

  3. 컨테이너에서 실행되는 서비스를 디버깅할 수 있지만 추가적인 복잡성이 따릅니다. 기본적으로 일반 디버깅을 사용하고, 필요할 때 컨테이너에서 디버깅하십시오.

Container Tools 확장은 .NET, Node.js 및 Python 기반 서비스의 컨테이너 디버깅을 네이티브로 지원합니다.

원격 개발 환경에서 Docker CLI 활성화

원격 개발 환경에서 Docker CLI를 활성화하는 방법은 선택한 원격 환경 유형에 따라 다릅니다.

개발 컨테이너

개발 컨테이너의 경우 컨테이너 내 Docker CLI를 로컬 머신에서 실행되는 Docker 데몬으로 리디렉션해야 합니다.

먼저 개발 컨테이너에 Docker CLI가 설치되어 있는지 확인하십시오. 정확한 단계는 컨테이너가 사용하는 Linux 배포판에 따라 다릅니다.

Ubuntu 기반 배포판의 예시입니다(.devcontainer/Dockerfile에서)

    ...
    && apt-get -y install software-properties-common \
    && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - 2>/dev/null \
    && add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" \
    && apt-get update -y \
    && apt-get install -y docker-ce-cli \
    && apt-get install -y python python-pip \
    && pip install docker-compose \
    ...

다음으로 Docker 소켓이 개발 컨테이너에 매핑되었는지 확인하십시오(.devcontainer/devcontainer.json에서)

    ...
    "runArgs": [ "-v", "/var/run/docker.sock:/var/run/docker.sock"]
    ...

Linux용 Windows 하위 시스템

Windows Subsystem for Linux는 Windows에서 컨테이너 기반 서비스 개발에 훌륭한 선택입니다. Windows Subsystem for Linux 버전 2(WSL 2)를 강력히 권장합니다. Docker Desktop for Windows는 WSL 2와 함께 작동하도록 업데이트되었으며 WSL 2 배포판에서 Docker CLI를 활성화하는 그래픽 설정이 있습니다.

Enable Docker inside WSL 2 distribution

Docker 개발에 WSL 2를 사용하려면 Windows 10 버전 2004 이상 및 Docker Desktop for Windows 버전 2.2.0.5 이상이 필요합니다.

이전 버전의 WSL(WSL 1)은 호스트의 Docker 데몬에 연결하는 쉬운 방법을 제공하지 않습니다.

원격 머신

원격 머신에서 컨테이너 개발을 활성화하는 권장 방법은 Docker 데몬을 포함하여 머신에 전체 Docker를 설치하는 것입니다.

참고: Docker Desktop 제품은 물리적 Windows 및 macOS 머신에서만 지원되며 가상 머신에서는 지원되지 않습니다. 가상 머신을 원격 개발 환경으로 사용하려면 Docker Engine이 설치된 Linux VM을 사용하는 것이 좋습니다.

원격 머신에 Docker가 설치되고 작동하면 VS Code의 Remote - SSH 확장 프로그램( Remote Development 확장 팩)을 사용하여 원격 머신에 연결하고 해당 환경에서 작업할 수 있습니다.

  1. VS Code 명령 팔레트(⇧⌘P (Windows, Linux Ctrl+Shift+P))를 열고 Remote-SSH: Add new SSH host... 명령을 실행합니다. 프롬프트에 따라 대상 호스트에 대한 연결을 설정합니다.

  2. Remote-SSH: Connect to host... 명령을 실행하고 호스트에 연결합니다.

  3. 새로운 VS Code 창이 열리고 대상 머신의 컨텍스트에서 실행됩니다. 비밀번호 인증을 사용하는 경우 여기에서 비밀번호를 입력해야 합니다. 사용 편의를 위해 SSH 키 인증 설정을 강력히 권장합니다.

  4. 확장 프로그램 보기에서 Container Tools 확장을 설치합니다(원격 호스트에 설치). (이 단계 후 다시 시작해야 할 수 있습니다.)

    Screenshot - Installing the Container Tools extension

참고: Container Tools 확장을 사용하여 컨테이너 이미지를 빌드하고 소스 코드를 가지고 있는 경우, 위의 방법은 개발자 워크스테이션이 아닌 원격 호스트에 소스 코드가 체크인되어 있음을 의미할 가능성이 높습니다. Container Explorer 기능에만 Container Tools 확장을 사용하는 경우 이 참고 사항을 무시해도 됩니다.

로컬 Linux VM

개발자 워크스테이션에서 실행되는 Linux 가상 머신을 사용하려면 원격 머신에 설치하는 것과 동일한 방식으로 VM에 Docker를 설치하고 VS Code Remote-SSH 확장을 사용하여 VM에 연결해야 합니다.

또는 개발 환경 내에 Docker CLI만 설치하고 Docker 컨텍스트 메커니즘을 사용하여 개발자 워크스테이션에서 실행되는 Docker 호스트(엔진)를 가리킬 수 있습니다. 이 접근 방식의 주요 고려 사항은 VM에서 호스트의 Docker 엔진으로의 네트워크 연결을 보장하고 안전하게 수행하는 것입니다. 한 가지 옵션은 개발자 워크스테이션으로 SSH 터널링 또는 Remote - Tunnels를 사용하는 것입니다. 다른 옵션은 Docker 엔진이 HTTPS 포트에서 수신 대기하도록 하는 것입니다. VM 내에서 실행되는 Docker CLI에서 호스트 Docker 엔진을 사용하려면 SSH 및 공개 키 인프라(PKI)에 능숙해야 합니다. 대부분의 사용자에게는 가상 머신 내에 전체 Docker를 설치하는 것을 권장합니다.

컨테이너에서 디버깅

Container Tools 확장은 컨테이너 내에서 실행되는 .NET 및 Node.js 기반 서비스 디버깅을 지원합니다. 현재 다른 프로그래밍 언어는 지원되지 않습니다.

컨테이너 디버깅은 컨테이너가 프로세스보다 더 강력한 격리 메커니즘이므로 일반 디버깅보다 설정하기 어려울 수 있습니다. 특히

  • VS Code 프로세스 내에서 실행되는 디버그 엔진은 디버깅 중인 서비스 프로세스와 통신해야 합니다. 컨테이너 내에서 실행되는 서비스의 경우, 이는 공통 네트워크(일반적으로 Docker 호스트 네트워크)를 통한 네트워크 통신을 의미합니다. 컨테이너에는 디버그 엔진이 서비스 프로세스(Node.js) 또는 컨테이너 내에서 실행되는 디버거 프록시(.NET)에 연결할 수 있도록 Docker 호스트 네트워크를 통해 적절한 포트가 노출되어야 합니다.
  • 빌드 시 생성된 소스 파일 정보는 빌드 환경(VS Code가 실행되는 곳)의 컨텍스트에서 유효합니다. 컨테이너 파일 시스템은 빌드 환경 파일 시스템과 다르며, 디버거가 중단점에서 히트될 때 올바른 소스 파일을 표시하도록 소스 파일의 경로를 다시 매핑해야 합니다.

위의 고려 사항 때문에 일반적으로 일반 디버깅을 사용하고, 필요할 때 컨테이너 디버깅을 사용하는 것이 좋습니다.

컨테이너 내에서 디버깅을 설정하는 방법에 대한 자세한 내용은 ASP.NET Core 퀵스타트, Node.js 퀵스타트Container Tools 확장 작업 속성(docker-builddocker-run 작업)을 참조하십시오.

다음 단계

더 자세히 알아보려면 다음을 읽어보십시오.

© . This site is unofficial and not affiliated with Microsoft.