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

개발 컨테이너 CLI

이 주제에서는 개발 컨테이너 명령줄 인터페이스(dev container CLI)를 다룹니다. 이 CLI를 사용하면 개발 컨테이너를 빌드하고 관리할 수 있으며, 개발 컨테이너 사양의 동반자 역할을 합니다.

개발 컨테이너

일관되고 예측 가능한 환경은 생산적이고 즐거운 소프트웨어 개발 경험의 핵심입니다.

컨테이너(예: Docker 컨테이너)는 과거에 배포 시 앱을 표준화하는 데 사용되었지만, 지속적 통합(CI), 테스트 자동화, 전체 기능을 갖춘 코딩 환경을 포함한 추가 시나리오를 지원할 수 있는 훌륭한 기회가 있습니다. **개발 컨테이너**는 이러한 작업 환경을 제공하고 복잡하고 분산되어 있거나 요구 사항이 몇 가지뿐인 프로젝트에 필요한 도구와 소프트웨어를 갖추도록 보장합니다.

Diagram comparing dev versus production containers

개발 컨테이너는 Visual Studio Code의 Dev Containers 확장 및 GitHub Codespaces에서 지원됩니다. 이 지원은 컨테이너화된 환경을 구성하기 위한 구조화된 JSON(주석 포함)(jsonc) 메타데이터 형식인 devcontainer.json에 의해 지원됩니다.

프로덕션 워크로드를 컨테이너화하는 것이 일반화됨에 따라 dev 컨테이너는 VS Code 이외의 시나리오에서도 널리 사용되고 있습니다. 모든 환경에서 dev 컨테이너를 지원하기 위해 개발 컨테이너 사양에 대한 작업이 시작되었습니다. 이 사양은 모든 도구에서 누구나 일관된 개발 환경을 구성할 수 있도록 지원합니다. 오픈 소스 **dev container CLI**는 사양의 참조 구현 역할을 합니다.

개발 컨테이너 CLI

VS Code 및 Codespaces와 같은 도구가 사용자 프로젝트에서 devcontainer.json 파일을 감지하면 CLI를 사용하여 dev 컨테이너를 구성합니다. dev container CLI는 개별 사용자와 다른 도구가 devcontainer.json 메타데이터를 읽고 이를 기반으로 dev 컨테이너를 생성할 수 있는 참조 구현입니다.

이 CLI는 직접 사용하거나 VS Code 및 Codespaces와 현재 통합되는 방식과 유사하게 제품 환경에 통합될 수 있습니다. 현재 간단한 단일 컨테이너 옵션과 다중 컨테이너 시나리오를 위한 Docker Compose와의 통합을 모두 지원합니다.

CLI는 devcontainers/cli 리포지토리에서 사용할 수 있습니다.

설치

명령 팔레트(F1)에서 **Dev Containers: devcontainer CLI 설치** 명령을 선택하여 Dev Containers 확장을 통해 CLI를 빠르게 사용해 볼 수 있습니다.

대체 설치

CLI를 다른 곳에서 사용하는 추가 옵션이 있습니다.

  • npm 패키지 설치
  • GitHub Action 또는 Azure DevOps 작업 사용
  • 소스에서 CLI 빌드

이 페이지에서는 npm 패키지 사용에 중점을 둘 것입니다.

npm install

npm 패키지를 설치하려면 Python, Node.js(버전 14 이상) 및 C/C++가 설치되어 있어야 종속성 중 하나를 빌드할 수 있습니다. VS Code 기여 방법 위키에 권장되는 도구 세트에 대한 자세한 내용이 나와 있습니다.

npm install -g @devcontainers/cli

CLI를 실행하고 도움말 텍스트를 볼 수 있는지 확인

devcontainer <command>

Commands:
  devcontainer up                   Create and run dev container
  devcontainer build [path]         Build a dev container image
  devcontainer run-user-commands    Run user commands
  devcontainer read-configuration   Read configuration
  devcontainer features             Features commands
  devcontainer templates            Templates commands
  devcontainer exec <cmd> [args..]  Execute a command on a running dev container

Options:
  --help     Show help                                                 [boolean]
  --version  Show version number                                       [boolean]

참고: CLI를 VS Code를 통해 설치한 경우 dev 컨테이너를 여는 open 명령이 나열됩니다.

CLI 실행

CLI를 설치한 후에는 이 Rust 샘플과 같은 샘플 프로젝트로 사용해 볼 수 있습니다.

Rust 샘플을 로컬 컴퓨터로 클론하고 CLI의 up 명령으로 dev 컨테이너를 시작합니다.

git clone https://github.com/microsoft/vscode-remote-try-rust
devcontainer up --workspace-folder <path-to-vscode-remote-try-rust>

그러면 컨테이너 레지스트리에서 컨테이너 이미지를 다운로드하고 컨테이너를 시작합니다. 이제 Rust 컨테이너가 실행 중이어야 합니다.

[88 ms] dev-containers-cli 0.1.0.
[165 ms] Start: Run: docker build -f /home/node/vscode-remote-try-rust/.devcontainer/Dockerfile -t vsc-vscode-remote-try-rust-89420ad7399ba74f55921e49cc3ecfd2 --build-arg VARIANT=bullseye /home/node/vscode-remote-try-rust/.devcontainer
[+] Building 0.5s (5/5) FINISHED
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 38B                                        0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for mcr.microsoft.com/vscode/devcontainers/r  0.4s
 => CACHED [1/1] FROM mcr.microsoft.com/vscode/devcontainers/rust:1-bulls  0.0s
 => exporting to image                                                     0.0s
 => => exporting layers                                                    0.0s
 => => writing image sha256:39873ccb81e6fb613975e11e37438eee1d49c963a436d  0.0s
 => => naming to docker.io/library/vsc-vscode-remote-try-rust-89420ad7399  0.0s
[1640 ms] Start: Run: docker run --sig-proxy=false -a STDOUT -a STDERR --mount type=bind,source=/home/node/vscode-remote-try-rust,target=/workspaces/vscode-remote-try-rust -l devcontainer.local_folder=/home/node/vscode-remote-try-rust --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --entrypoint /bin/sh vsc-vscode-remote-try-rust-89420ad7399ba74f55921e49cc3ecfd2-uid -c echo Container started
Container started
{"outcome":"success","containerId":"f0a055ff056c1c1bb99cc09930efbf3a0437c54d9b4644695aa23c1d57b4bd11","remoteUser":"vscode","remoteWorkspaceFolder":"/workspaces/vscode-remote-try-rust"}

그런 다음 이 dev 컨테이너에서 명령을 실행할 수 있습니다.

devcontainer exec --workspace-folder <path-to-vscode-remote-try-rust> cargo run

그러면 Rust 샘플이 컴파일되고 실행되어 다음이 출력됩니다.

[33 ms] dev-containers-cli 0.1.0.
   Compiling hello_remote_world v0.1.0 (/workspaces/vscode-remote-try-rust)
    Finished dev [unoptimized + debuginfo] target(s) in 1.06s
     Running `target/debug/hello_remote_world`
Hello, VS Code Dev Containers!
{"outcome":"success"}

위 단계는 CLI 리포지토리의 README에도 제공됩니다.

자동화

CI/CD 빌드 또는 테스트 자동화에서 dev container CLI를 사용하려면 devcontainers/ci 리포지토리에서 GitHub Actions 및 Azure DevOps 작업의 예를 찾을 수 있습니다.

사전 빌드

devcontainer build 명령을 사용하면 Dev Containers 확장 또는 GitHub Codespaces에서 사용하는 것과 동일한 단계에 따라 dev container 이미지를 빠르게 빌드할 수 있습니다. 이는 CI 또는 GitHub Actions와 같은 DevOps 제품을 사용하여 dev container 이미지를 사전 빌드하려는 경우 특히 유용합니다.

build.devcontainer 폴더 또는 .devcontainer.json 파일이 포함된 폴더에 대한 경로를 수락합니다. 예를 들어, devcontainer build --workspace-folder <my_repo>my_repo에 대한 컨테이너 이미지를 빌드합니다.

이미지 빌드 및 게시 예

예를 들어, 여러 프로젝트 또는 리포지토리에서 재사용하려는 여러 이미지를 사전 빌드할 수 있습니다. 이렇게 하려면 다음 단계를 따르세요.

  1. 소스 코드 리포지토리를 생성합니다.

  2. 사전 빌드하려는 각 이미지에 대해 dev 컨테이너 구성을 만들고 원하는 대로 사용자 지정합니다(개발 컨테이너 기능 포함). 예를 들어, 이 devcontainer.json 파일을 고려해 보세요.

    {
      "build": {
        "dockerfile": "Dockerfile"
      },
      "features": {
        "ghcr.io/devcontainers/features/docker-in-docker:1": {
          "version": "latest"
        }
      }
    }
    
  3. devcontainer build 명령을 사용하여 이미지를 빌드하고 이미지 레지스트리로 푸시합니다. 이미지 이름 지정 및 인증과 같은 추가 단계에 대한 정보는 이미지 레지스트리(예: Azure Container Registry, GitHub Container Registry 또는 Docker Hub)의 설명서를 참조하세요.

    devcontainer build --workspace-folder <my_repo> --push true --image-name <my_image_name>:<optional_image_version>
    

Docker로 빌드된 이미지 문제 방지

Dockerfiles 및 Docker Compose 파일은 VS Code 또는 devcontainer CLI 없이 사용할 수 있으므로 사용자가 이미지를 직접 빌드하려고 시도해서는 안 된다는 점을 알려야 할 수 있습니다. 자세한 내용은 고급 dev container 설명서에서 확인할 수 있습니다.

템플릿 및 기능

CLI를 사용하여 dev 컨테이너 템플릿기능을 작업할 수 있습니다. 템플릿을 만들고 사용할 때 다른 사람에게 게시하는 것이 좋습니다. 이에 대한 자세한 내용은 dev container 사양에서 확인할 수 있습니다.

피드백

dev container CLI 및 사양은 활발히 개발 중이며 피드백을 환영합니다. 피드백은 이 이슈 또는 devcontainers/cli 리포지토리의 새 이슈 및 풀 요청을 통해 제공할 수 있습니다.

다음 단계

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