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

디스크 성능 향상

Dev Containers 확장은 기본적으로 로컬 파일 시스템의 소스 코드를 "바인드 마운트"를 사용하여 가져옵니다. 이것은 가장 간단한 옵션이지만, macOS 및 Windows에서는 컨테이너 내부에서 yarn install과 같은 명령을 실행할 때 디스크 성능이 저하될 수 있습니다. 이러한 유형의 문제를 해결하기 위해 몇 가지 방법을 사용할 수 있습니다.

Windows의 WSL 2 파일 시스템에 소스 코드 저장

Windows 10 2004 이상 버전에는 전체 Linux 커널을 제공하고 WSL 1에 비해 성능이 크게 향상된 Windows Subsystem for Linux (WSL 2)의 개선된 버전이 포함되어 있습니다. Docker Desktop 2.3 이상 버전에는 VM 대신 WSL에서 Docker를 실행하는 새로운 WSL 2 엔진이 포함되어 있습니다. 따라서 소스 코드를 WSL 2 파일 시스템에 저장하면 권한 설정과 같은 항목에 대한 호환성이 향상되고 성능이 향상됩니다.

VS Code에서 이 새 엔진을 사용하는 방법에 대한 자세한 내용은 Windows에서 컨테이너에 WSL 2 폴더 열기를 참조하십시오.

비디오: Windows에서 Dev Containers 속도 향상

컨테이너 볼륨에 저장소 복제 사용

Dev Containers: 컨테이너 볼륨에 저장소 복제... 명령은 로컬 파일 시스템에 바인딩하는 대신 격리된 로컬 Docker 명명된 볼륨을 사용합니다. 파일 트리를 어지럽히지 않는 것 외에도 로컬 볼륨은 Windows 및 macOS에서 성능이 향상되는 추가 이점이 있습니다.

격리된 컨테이너 볼륨에 Git 저장소 또는 GitHub PR 열기에서 이 접근 방식을 사용하는 방법에 대한 자세한 내용을 참조하십시오.

다음 두 섹션에서는 다른 시나리오에서 명명된 볼륨을 사용하는 방법을 설명합니다.

명령된 볼륨 사용

macOS와 Windows는 VM에서 컨테이너를 실행하므로 "바인드" 마운트는 컨테이너의 파일 시스템을 직접 사용하는 것만큼 빠르지 않습니다. 다행히 Docker에는 컨테이너의 파일 시스템처럼 작동하지만 컨테이너 재구축 후에도 유지되는 로컬 "명명된 볼륨"이라는 개념이 있습니다. 따라서 node_modules와 같은 패키지 폴더, 데이터 폴더 또는 쓰기 성능이 중요한 build와 같은 출력 폴더를 저장하는 데 이상적입니다. devcontainer.json에서 참조하는 내용에 따라 적절한 단계를 따르십시오.

Dockerfile 또는 이미지:

yarn install 속도를 높이는 방법을 설명하기 위해 vscode-remote-try-node 저장소를 사용하겠습니다.

다음 단계를 따르세요.

  1. devcontainer.json에서 workspaceMount 속성을 사용하여 VS Code에 소스 코드를 바인딩할 위치를 알립니다. 그런 다음 mounts 속성 (VS Code 1.41+)을 사용하여 node_modules 하위 폴더를 명명된 로컬 볼륨으로 마운트합니다.

    "mounts": [
        "source=${localWorkspaceFolderBasename}-node_modules,target=${containerWorkspaceFolder}/node_modules,type=volume"
    ]
    

    참고: source에서 ${localWorkspaceFolderBasename}, ${devcontainerId} 또는 하드코딩된 이름을 사용할 수 있습니다.

  2. 이 저장소는 VS Code를 루트가 아닌 "node" 사용자로 실행하므로 사용자가 폴더에 액세스할 수 있는지 확인하기 위해 postCreateCommand를 추가해야 합니다.

    "remoteUser": "node",
    "mounts": [
        "source=${localWorkspaceFolderBasename}-node_modules,target=${containerWorkspaceFolder}/node_modules,type=volume"
    ],
    "postCreateCommand": "sudo chown node node_modules"
    

    컨테이너에서 root로 실행하는 경우에는 이 두 번째 단계가 필요하지 않습니다.

이미 컨테이너를 빌드하고 연결한 경우, 변경 사항을 적용하려면 명령 팔레트(F1)에서 Dev Containers: Rebuild Container를 실행하세요. 그렇지 않으면 Dev Containers: Open Folder in Container...를 실행하여 컨테이너에 연결하세요.

이 접근 방식에 대한 두 가지 참고 사항

  1. 컨테이너에서 node_modules 폴더를 삭제하면 볼륨과의 연결이 끊어질 수 있습니다. 필요한 경우 node_modules 폴더의 내용을 삭제하십시오 (rm -rf node_modules/* node_modules/.*).

  2. 이 방법을 사용하면 로컬에 빈 node_modules 폴더가 생성된다는 것을 알게 될 것입니다. 이는 컨테이너의 볼륨 마운트 지점이 로컬 파일 시스템 바인드 마운트 내부에 있기 때문입니다. 이것은 예상된 것이며 무해합니다.

Docker Compose:

vscode-remote-try-node는 Docker Compose를 사용하지 않지만 단계는 유사하지만 볼륨 마운트 구성은 다른 파일에 배치됩니다.

  1. Docker Compose 파일 (또는 확장된 파일)에서 적절한 서비스에 대해 node_modules 하위 폴더에 대한 명명된 로컬 볼륨 마운트를 추가합니다. 예시

    version: '3'
    services:
      your-service-name-here:
        volumes:
          # Or wherever you've mounted your source code
          - .:/workspace:cached
          - try-node-node_modules:/workspace/node_modules
        # ...
    
    volumes:
      try-node-node_modules:
    
  2. 다음으로 devcontainer.jsonworkspaceFolder 속성이 실제 소스 코드가 마운트되는 위치와 일치하는지 확인하십시오.

    "workspaceFolder": "/workspace"
    
  3. 루트가 아닌 사용자로 컨테이너에서 실행하는 경우 루트가 아닌 사용자, 루트로 마운트되었을 수 있으므로 마운트하는 폴더의 소유자를 업데이트하는 postCreateCommand를 추가하십시오. user-name-goes-here를 해당 사용자로 바꾸십시오.

    "remoteUser": "node",
    "workspaceFolder": "/workspace",
    "postCreateCommand": "sudo chown user-name-goes-here node_modules"
    

이미 컨테이너를 빌드하고 연결한 경우, 변경 사항을 적용하려면 명령 팔레트(F1)에서 Dev Containers: Rebuild Container를 실행하세요. 그렇지 않으면 Dev Containers: Open Folder in Container...를 실행하여 컨테이너에 연결하세요.

비디오: dev container에서 npm install 속도 향상

소스 트리 전체에 명명된 볼륨 사용

마지막으로 위의 옵션 중 어느 것도 요구 사항을 충족하지 못하면 한 단계 더 나아가 로컬이 아닌 **명명된 볼륨 안에 전체 소스 트리를 복제**할 수 있습니다. 기존 devcontainer.json 구성을 수정하여 명명된 볼륨을 설정할 수 있습니다 (볼륨의 이름을 원하는 대로 your-volume-name-here로 업데이트).

devcontainer.json에서 참조하는 내용에 따라

  • Dockerfile 또는 이미지: devcontainer.json에서 다음 속성을 사용하여 로컬 명명된 볼륨을 컨테이너에 마운트합니다.

    "workspaceMount": "source=your-volume-name-here,target=/workspace,type=volume"
    "workspaceFolder": "/workspace",
    
  • Docker Compose: 적절한 서비스에 대해 docker-compose.yml을 다음으로 업데이트 (또는 확장)합니다.

    version: '3'
    services:
      your-service-name-here:
        volumes:
            - your-volume-name-here:/workspace
        # ...
    
    volumes:
      your-volume-name-here:
    

    또한 devcontainer.jsonworkspaceFolder 속성이 볼륨이 마운트되는 위치 (또는 볼륨 내부의 하위 폴더)와 일치하는지 확인해야 합니다.

    "workspaceFolder": "/workspace"
    

이미 컨테이너를 빌드하고 연결한 경우, 변경 사항을 적용하려면 명령 팔레트(F1)에서 Dev Containers: Rebuild Container를 실행하세요. 그렇지 않으면 Dev Containers: Open Folder in Container...를 실행하여 컨테이너에 연결하세요.

다음으로, 명령 팔레트의 Git: Clone 명령을 사용하거나 통합 터미널을 시작합니다 (⌃⇧` (Windows, Linux Ctrl+Shift+`)) git clone 명령을 사용하여 소스 코드를 /workspace 폴더에 복제합니다.

마지막으로 파일 > 열기... / 폴더 열기... 명령을 사용하여 컨테이너에서 복제된 저장소를 엽니다.

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