개발 컨테이너 CLI
2022년 5월 18일, Brigit Murtaugh, @BrigitMurtaugh
요약
Dev container CLI로 어디서든 일관된 환경을 구축하세요.
Microsoft와 GitHub의 개발 컨테이너 팀은 새로운 개발 컨테이너 사양(Development Containers Specification)의 일부로 오픈 소스 명령줄 인터페이스(CLI)를 출시하게 되어 기쁘게 생각합니다. 이 이슈에서 피드백을 제공해 주시거나, devcontainers/cli 리포지토리에 새로운 이슈와 풀 리퀘스트를 제출해 주시면 감사하겠습니다.
일관성 = 즐거움
일관되고 예측 가능한 환경은 생산적이고 즐거운 소프트웨어 개발 경험의 핵심입니다.
컨테이너는 배포 시 앱을 표준화하는 데 사용되어 왔지만, 지속적 통합(CI), 테스트 자동화, 완전한 기능을 갖춘 코딩 환경을 포함한 추가 시나리오를 지원할 수 있는 좋은 기회가 있습니다. 개발 컨테이너는 이러한 완전한 기능을 갖춘 코딩 환경을 제공하며, 프로젝트가 복잡하고 분산되어 있거나 요구 사항이 적더라도 필요한 도구와 소프트웨어를 갖추도록 보장합니다.

Dev 컨테이너는 2019년에 Dev Containers 확장이 발표된 이후 Visual Studio Code에서 지원되었으며, 최근에는 GitHub Codespaces에서도 지원되고 있습니다. 이러한 지원은 컨테이너화된 환경을 구성하기 위한 구조화된 JSON(Comments 포함, jsonc) 메타데이터 형식인 devcontainer.json에 의해 지원됩니다.
프로덕션 워크로드를 컨테이너화하는 것이 일반화됨에 따라, dev 컨테이너는 VS Code를 넘어선 시나리오에서도 널리 유용해졌습니다. 저희는 이제 모든 도구에서 누구나 일관된 개발 환경을 구성할 수 있도록 지원하는 개발 컨테이너 사양(Development Containers Specification)에 대한 작업이 시작되었음을 발표하게 되어 기쁩니다. 또한, 오늘 저희는 여러분이 지금 시도해 볼 수 있는 이 사양의 주요 구성 요소인 dev container CLI를 공유하게 되어 기쁩니다.
Dev container CLI란 무엇인가요?
Dev container CLI는 dev container 사양에 대한 참조 구현입니다.
VS Code 및 Codespaces와 같은 도구에서 사용자의 프로젝트에서 devcontainer.json 파일을 감지하면 CLI를 사용하여 dev 컨테이너를 구성합니다. 이제 이 CLI를 참조 구현으로 공개하여 개별 사용자와 다른 도구가 devcontainer.json 메타데이터를 읽고 이를 기반으로 dev 컨테이너를 생성할 수 있도록 했습니다.
이 CLI는 직접 사용하거나 현재 Dev Containers 및 Codespaces와 통합되는 방식과 유사하게 제품 환경에 통합될 수 있습니다. 현재는 간단한 단일 컨테이너 옵션을 모두 지원하며, 다중 컨테이너 시나리오를 위해 Docker Compose와 통합됩니다.
CLI는 새로운 devcontainers/cli 리포지토리에서 검토할 수 있으며, 사양 리포지토리의 이 이슈에서 개발에 대한 자세한 내용을 읽을 수 있습니다.
어떻게 시도해 볼 수 있나요?
Dev container CLI를 사용해 보시고 여러분의 생각을 알려주시면 좋겠습니다. npm 패키지를 설치하거나 소스에서 CLI 리포지토리를 빌드하여 몇 가지 간단한 단계로 빠르게 시도해 볼 수 있습니다.
소스에서 빌드하는 방법에 대한 자세한 내용은 CLI 리포지토리의 README에서 확인할 수 있습니다. 이 게시물에서는 npm 패키지 사용에 집중하겠습니다.
npm 패키지를 설치하려면 Python, Node.js(버전 14 이상), C/C++를 설치하여 종속성 중 하나를 빌드해야 합니다. VS Code의 기여 방법 위키에는 권장 도구 세트에 대한 자세한 내용이 나와 있습니다.
npm install
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 exec <cmd> [args..] Execute a command on a running dev container
Options:
--help Show help [boolean]
--version Show version number [boolean]
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"}
축하합니다. dev container CLI를 성공적으로 실행하고 작동하는 모습을 확인했습니다!
이 단계들은 CLI 리포지토리의 README에도 나와 있습니다.
어떻게 참여할 수 있나요?
여러분의 피드백은 사양을 형성하고 확장하는 데 매우 중요하며, CLI에 대한 여러분의 생각을 듣고 싶습니다. CLI를 확인하고 여러분의 의견을 알려주세요. 여러분이 의견과 질문을 남길 수 있도록 이슈를 열었습니다. 다른 오픈 소스 프로젝트와 마찬가지로 리포지토리에 새로운 이슈나 PR을 제출할 수도 있습니다.
CLI 및 전체 사양은 활발히 개발 중입니다(사양은 아직 진행 중이며 아직 게시되지 않았습니다). 따라서 흥미로운 새로운 발전을 계속 지켜봐 주세요. 지금까지의 CLI에 대한 여러분의 피드백을 환영하며, 무엇을 시도할 수 있고 언제 사용할 수 있는지에 대한 업데이트를 계속 제공할 것입니다. 예를 들어 사양이 언제 제공될지에 대한 정보도 포함됩니다.
컨테이너 기반 개발의 미래에 대해 매우 기대하고 있으며 여러분의 피드백을 기다리고 있습니다. 도구와 사용자를 아우르는 보편적이고 생산적인 형식을 제공할 수 있기를 바랍니다.
행복한 코딩 되세요!
Brigit Murtaugh, @BrigitMurtaugh