Dev Container 생성
Visual Studio Code Dev Containers 확장은 Docker 컨테이너를 완전한 기능을 갖춘 개발 환경으로 사용할 수 있도록 합니다. 이를 통해 폴더 또는 저장소를 컨테이너 안에서 열고 Visual Studio Code의 전체 기능 세트를 활용할 수 있습니다. 프로젝트의 devcontainer.json 파일은 VS Code가 **개발 컨테이너**에 어떻게 액세스(또는 생성)해야 하는지, 그리고 정의된 도구 및 런타임 스택을 어떻게 사용할지에 대한 정보를 VS Code에 알려줍니다. 이 컨테이너는 애플리케이션을 실행하거나 코드베이스 작업에 필요한 별도의 도구, 라이브러리 또는 런타임을 제공하는 데 사용할 수 있습니다.
Dev Container 생성 경로
이 문서에서는 VS Code에서 개발(dev) 컨테이너를 생성하는 단계를 살펴보겠습니다.
- VS Code가 컨테이너를 시작하는 방법과 연결 후 수행할 작업을 설명하는
devcontainer.json을 생성합니다. - Dockerfile을 사용하여 새 소프트웨어 설치와 같이 dev 컨테이너의 변경 사항을 만들고 유지합니다.
- Docker Compose를 통해 여러 컨테이너를 구성합니다.
- 변경 사항을 만들 때 dev 컨테이너를 빌드하여 변경 사항이 적용되었는지 확인합니다.
위의 단계를 거치면 완전히 작동하는 dev 컨테이너가 완성됩니다. 이 튜토리얼의 다음 단계로 이동하여 더 많은 기능을 추가하거나, 중지하고 현재 dev 환경에서 작업을 시작할 수 있습니다.
참고: Dev Containers 확장은 미리 정의된 컨테이너 구성을 목록에서 선택할 수 있는 Dev Containers: Add Dev Container Configuration Files... 명령을 제공합니다.
devcontainer.json및 Dockerfile을 단계별로 구축하는 대신 즉시 완전한 dev 컨테이너를 사용하고 싶다면 Dev Container 생성 자동화로 건너뛸 수 있습니다.
devcontainer.json 파일 생성
VS Code의 컨테이너 구성은 devcontainer.json 파일에 저장됩니다. 이 파일은 디버깅 구성의 launch.json 파일과 유사하지만, 개발 컨테이너를 시작(또는 연결)하는 데 사용됩니다. dev 컨테이너 구성은 .devcontainer/devcontainer.json 아래에 있거나 프로젝트 루트에 .devcontainer.json 파일(점 접두사에 유의)로 저장됩니다.
이미지를 devcontainer.json의 시작점으로 사용할 수 있습니다. 이미지는 다양한 도구와 운영 체제가 미리 설치된 미니 디스크 드라이브와 같습니다. 이미지를 컨테이너 레지스트리에서 가져올 수 있으며, 컨테이너 레지스트리는 이미지를 저장하는 저장소 컬렉션입니다. 다음은 미리 빌드된 TypeScript 및 Node.js VS Code 개발 컨테이너 이미지를 사용하는 간단한 devcontainer.json 예시입니다.
{
"image": "mcr.microsoft.com/devcontainers/typescript-node:0-18"
}
다음과 같은 작업을 수행하도록 구성을 변경할 수 있습니다.
- Git과 같은 추가 도구를 컨테이너에 설치합니다.
- 확장을 자동으로 설치합니다.
- 추가 포트를 전달하거나 게시합니다.
- 런타임 인수를 설정합니다.
- 기존 Docker Compose 설정을 재사용하거나 확장합니다.
- 고급 컨테이너 구성을 추가합니다.
이 예시에서 .devcontainer.json에 Code Spell Checker 확장을 설치하고 포트 3000을 자동으로 전달하려면 다음과 같이 구성합니다.
{
"image": "mcr.microsoft.com/devcontainers/typescript-node",
"customizations": {
"vscode": {
"extensions": ["streetsidesoftware.code-spell-checker"]
}
},
"forwardPorts": [3000]
}
참고: 기본 이미지에 포함된 내용에 따라 추가 구성이 이미 컨테이너에 추가됩니다. 예를 들어, 위의
streetsidesoftware.code-spell-checker확장을 추가했으며, 컨테이너에는mcr.microsoft.com/devcontainers/typescript-node의 일부이므로"dbaeumer.vscode-eslint"도 포함됩니다. 이는 devcontainer.json을 사용하여 미리 빌드할 때 자동으로 발생하며, 이에 대한 자세한 내용은 미리 빌드 섹션에서 확인할 수 있습니다.
위의 devcontainer.json으로 dev 컨테이너가 작동하며, 연결하여 개발을 시작할 수 있습니다. Dev Containers: Reopen in Container 명령으로 시도해 보세요.

이 명령을 실행한 후 VS Code가 다시 시작되면, 이제 포트 3000이 전달되고 ESLint 확장이 설치된 Node.js 및 TypeScript dev 컨테이너 안에 있습니다. 연결되면 상태 표시줄 왼쪽에 있는 녹색 원격 표시기를 통해 dev 컨테이너에 연결되어 있음을 확인할 수 있습니다.

추가 dev 컨테이너 시나리오
devcontainer.json 파일을 통해 다음을 수행할 수 있습니다.
- 도구 체인을 격리하거나 설정을 빠르게 하기 위해 독립 실행형 컨테이너를 시작합니다.
- 이미지, Dockerfile 또는 Docker Compose로 정의된 컨테이너 배포 애플리케이션과 작업합니다.
- dev 컨테이너 내부에서 Docker 또는 Kubernetes를 사용하여 앱을 빌드하고 배포합니다.
devcontainer.json의 지원되는 워크플로가 요구 사항을 충족하지 않으면, 이미 실행 중인 컨테이너에 연결할 수도 있습니다.
팁: 원격 Docker 호스트를 사용하고 싶으신가요? 자세한 설정은 원격 Docker 호스트에서 개발하기 문서를 참조하세요.
추가 소프트웨어 설치
dev 컨테이너에 추가 소프트웨어를 설치하고 싶을 수 있습니다. VS Code가 컨테이너에 연결되면 VS Code 터미널을 열고 컨테이너 내부의 OS에 대한 명령을 실행할 수 있습니다. 이를 통해 새 명령줄 유틸리티를 설치하고 Linux 컨테이너 내부에서 데이터베이스 또는 애플리케이션 서비스를 시작할 수 있습니다.
대부분의 컨테이너 이미지는 Debian 또는 Ubuntu를 기반으로 하며, apt 또는 apt-get 명령을 사용하여 새 패키지를 설치합니다. Ubuntu 문서에서 해당 명령에 대해 더 자세히 알아볼 수 있습니다. Alpine 이미지는 유사한 apk 명령을 포함하고 있으며, CentOS / RHEL / Oracle SE / Fedora 이미지는 yum 또는 최근에는 dnf를 사용합니다.
설치하려는 소프트웨어에 대한 설명서에는 일반적으로 특정 지침이 제공되지만, 컨테이너에서 root로 실행하는 경우 sudo로 명령 앞에 접두사를 붙일 필요가 없을 수 있습니다.
예를 들어,
# If running as root
apt-get update
apt-get install <package>
root로 실행하는 경우 sudo가 컨테이너에 구성되어 있다면 소프트웨어를 설치할 수 있습니다. 모든 미리 정의된 컨테이너에는 sudo가 설정되어 있지만, 컨테이너에 비루트 사용자 추가 문서는 자체 컨테이너에 대해 이 설정을 구성하는 데 도움이 될 수 있습니다. 그럼에도 불구하고 sudo를 설치하고 구성하면 root를 포함한 어떤 사용자로 실행하든 이를 사용할 수 있습니다.
# If sudo is installed and configured
sudo apt-get update
sudo apt-get install <package>
예를 들어 Git을 설치하고 싶다고 가정해 봅시다. VS Code의 통합 터미널에서 다음 명령을 실행할 수 있습니다.
# If sudo is installed and configured
sudo apt-get update
# Install Git
sudo apt-get install git
devcontainer.json의 "features" 속성을 사용하여 미리 정의된 기능 세트 또는 자체 기능에서 도구 및 언어를 설치할 수도 있습니다.
예를 들어, 다음을 사용하여 최신 버전의 Azure CLI를 설치할 수 있습니다.
"features": {
"ghcr.io/devcontainers/features/azure-cli:1": {
"version": "latest"
}
}
더 자세한 내용은 Dev Container 기능 사양을 참조하세요.
다시 빌드
.devcontainer 폴더의 내용을 편집할 때 변경 사항을 적용하려면 다시 빌드해야 합니다. 컨테이너를 업데이트하려면 Dev Containers: Rebuild Container 명령을 사용하세요.
하지만 컨테이너를 **다시 빌드**하면 수동으로 설치한 모든 항목을 **다시 설치**해야 합니다. 이 문제를 방지하려면 devcontainer.json의 postCreateCommand 속성을 사용하거나 사용자 지정 Dockerfile을 사용하면 됩니다.
사용자 지정 Dockerfile은 Docker의 빌드 캐시를 활용하여 postCreateCommand보다 더 빠른 다시 빌드 결과를 얻을 수 있습니다. 그러나 Dockerfile은 dev 컨테이너가 생성되고 작업 공간 폴더가 마운트되기 전에 실행되므로 작업 공간 폴더의 파일에 액세스할 수 없습니다. Dockerfile은 작업 공간 파일과 독립적으로 패키지 및 도구를 설치하는 데 가장 적합합니다.
postCreateCommand 작업은 컨테이너가 생성된 후에 실행되므로, npm install과 같은 명령을 실행하거나 소스 트리의 셸 스크립트(마운트한 경우)를 실행하는 데 이 속성을 사용할 수도 있습니다.
"postCreateCommand": "bash scripts/install-dependencies.sh"
대화형 bash 셸을 사용하여 .bashrc가 로드되도록 하여 셸을 환경에 맞게 자동으로 사용자 지정할 수도 있습니다.
"postCreateCommand": "bash -i scripts/install-dependencies.sh"
NVM과 같은 도구는 셸을 대화형 모드로 전환하기 위해 -i를 사용하지 않으면 작동하지 않습니다.
"postCreateCommand": "bash -i -c 'nvm install --lts'"
명령이 종료되지 않으면 컨테이너가 시작되지 않습니다. 예를 들어 postCreateCommand에 애플리케이션 시작을 추가하면 명령이 종료되지 않습니다.
컨테이너가 시작될 때마다 실행되는 postStartCommand도 있습니다. 매개변수는 postCreateCommand와 동일하게 작동하지만, 명령은 생성 시점이 아닌 시작 시 실행됩니다.
devcontainer.json에서 이미지를 직접 참조하거나 postCreateCommand 또는 postStartCommand를 통해 소프트웨어를 설치하는 대신, Dockerfile을 사용하는 것이 훨씬 효율적인 방법입니다.
Dockerfile
Dockerfile도 .devcontainer 폴더에 저장됩니다. devcontainer.json의 image 속성을 dockerfile로 바꿀 수 있습니다.
{
"build": { "dockerfile": "Dockerfile" },
"customizations": {
"vscode": {
"extensions": ["dbaeumer.vscode-eslint"]
}
},
"forwardPorts": [3000]
}
새 소프트웨어를 설치하는 것과 같은 변경 사항을 만들 때 Dockerfile의 변경 사항은 dev 컨테이너를 다시 빌드해도 유지됩니다.
Dockerfile에서 FROM을 사용하여 이미지를 지정하고, RUN 명령을 사용하여 소프트웨어를 설치합니다. &&를 사용하여 여러 명령을 연결할 수 있습니다.
FROM mcr.microsoft.com/devcontainers/javascript-node:0-18
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install git
참고:
DEBIAN_FRONTEND내보내기는 컨테이너와 작업할 때 경고를 방지합니다.
Dev Container 생성 자동화
.devcontainer를 수동으로 만드는 대신, 명령 팔레트(F1)에서 Dev Containers: Add Dev Container Configuration Files... 명령을 선택하면 필요한 파일을 프로젝트에 시작점으로 추가할 수 있으며, 이를 요구 사항에 맞게 추가로 사용자 지정할 수 있습니다.
이 명령을 사용하면 폴더 내용에 따라 미리 정의된 컨테이너 구성 목록에서 선택할 수 있습니다.

선택할 수 있는 미리 정의된 컨테이너 구성은 첫 번째 파티 및 커뮤니티 인덱스에서 제공되며, 이는 Dev Container 사양의 일부입니다. 사양의 일부로 devcontainers/templates 저장소에 템플릿 세트를 호스팅합니다. 해당 저장소의 src 폴더를 검색하여 각 템플릿의 내용을 확인할 수 있습니다.
Dev Containers: Add Dev Container Configuration Files... 사용을 마친 후, dev 컨테이너에 쉽게 추가할 수 있는 도구 및 언어인 기능 목록이 표시됩니다. Dev Containers: Configure Container Features를 사용하면 기존 구성을 업데이트할 수 있습니다.

기존 Dockerfile을 재사용할 수도 있습니다.

이제 devcontainer.json과 Dockerfile이 있으므로 컨테이너 구성 파일 편집의 일반적인 프로세스를 살펴보겠습니다.
전체 구성 편집 루프
컨테이너 구성을 편집하는 것은 쉽습니다. 컨테이너를 다시 빌드하면 로컬 소스 코드를 제외한 컨테이너가 시작 내용으로 "재설정"되므로, VS Code는 컨테이너 구성 파일(devcontainer.json, Dockerfile, docker-compose.yml)을 편집할 때 자동으로 다시 빌드하지 않습니다. 대신, 구성을 더 쉽게 편집하는 데 사용할 수 있는 몇 가지 명령이 있습니다.
이러한 명령을 사용하는 일반적인 편집 루프는 다음과 같습니다.

- 명령 팔레트(F1)에서 Dev Containers: Add Dev Container Configuration Files...로 시작합니다.
- 필요에 따라
.devcontainer폴더의 내용을 편집합니다. - Dev Containers: Reopen in Container로 시도합니다.
- 오류가 발생하면 나타나는 대화 상자에서 Open Folder Locally를 선택합니다.
- 창이 새로 고쳐진 후, 빌드 로그의 복사본이 콘솔에 표시되어 문제를 조사할 수 있습니다. 필요에 따라
.devcontainer폴더의 내용을 편집합니다. (닫은 경우 Dev Containers: Show Container Log 명령을 사용하여 로그를 다시 볼 수도 있습니다.) - Dev Containers: Rebuild and Reopen in Container를 실행하고 필요한 경우 4단계로 이동합니다.
이미 성공적인 빌드가 있는 경우, 컨테이너에 연결되어 있을 때 .devcontainer 폴더의 내용을 필요에 따라 편집한 다음 명령 팔레트(F1)에서 Dev Containers: Rebuild Container를 선택하여 변경 사항을 적용할 수 있습니다.
Dev Containers: Clone Repository in Container Volume 명령을 사용할 때도 컨테이너에서 반복적으로 작업할 수 있습니다.
- 명령 팔레트(F1)에서 Dev Containers: Clone Repository in Container Volume으로 시작합니다. 입력한 저장소에
devcontainer.json이 없으면 시작점을 선택하라는 메시지가 표시됩니다. - 필요에 따라
.devcontainer폴더의 내용을 편집합니다. - Dev Containers: Rebuild Container로 시도합니다.
- 오류가 발생하면 나타나는 대화 상자에서 Open in Recovery Container를 선택합니다.
- 이 "복구 컨테이너"에서 필요에 따라
.devcontainer폴더의 내용을 편집합니다. - 문제가 계속 발생하면 Dev Containers: Reopen in Container를 사용하고 4단계로 이동합니다.
Docker Compose 사용
어떤 경우에는 단일 컨테이너 환경으로 충분하지 않을 수 있습니다. 예를 들어 데이터베이스와 같은 복잡한 구성 요소를 추가하고 싶다고 가정해 봅시다. Dockerfile에 직접 추가하거나 추가 컨테이너를 통해 추가할 수 있습니다. 다행히 Dev Containers는 Docker Compose로 관리되는 다중 컨테이너 구성을 지원합니다.
다음 중 하나를 수행할 수 있습니다.
- 기존의 수정되지 않은
docker-compose.yml에 정의된 서비스와 작업합니다. - 서비스 개발에 사용할 새
docker-compose.yml을 생성하거나(기존 파일을 복사) 생성합니다. - 기존 Docker Compose 구성을 확장하여 서비스를 개발합니다.
- 별도의 VS Code 창을 사용하여 여러 Docker Compose 정의 서비스를 동시에 작업합니다.
참고: Alpine Linux 컨테이너를 사용할 때 일부 확장 프로그램은 네이티브 코드 내의
glibc종속성으로 인해 작동하지 않을 수 있습니다.
VS Code는 Docker Compose 파일의 특정 서비스에 대해 **필요한 모든 컨테이너를 자동으로 시작**하도록 구성할 수 있습니다. 명령줄을 사용하여 구성된 컨테이너를 이미 시작한 경우, VS Code는 지정한 **실행 중인 서비스에 연결**합니다. 이를 통해 위에서 설명한 Docker 이미지 및 Dockerfile 워크플로와 동일한 빠른 설정 이점을 다중 컨테이너 워크플로에 제공하면서도 선호하는 경우 명령줄을 사용할 수 있습니다.
빠르게 시작하려면 작업하려는 폴더를 VS Code에서 **열고** 명령 팔레트(F1)에서 Dev Containers: Add Dev Container Configuration Files... 명령을 실행하세요.
폴더 내용에 따라 정렬된 필터링 가능한 목록에서 첫 번째 파티 및 커뮤니티 인덱스에서 미리 정의된 컨테이너 구성을 선택하라는 메시지가 표시됩니다. VS Code UI에서 Docker Compose의 시작점으로 다음 템플릿 중 하나를 선택할 수 있습니다.
- 기존 Docker Compose - 프로젝트 루트에 있는
docker-compose.yml파일을 재사용할 수 있는 파일 세트를 기존 프로젝트에 포함합니다. - Node.js & MongoDB - 다른 컨테이너에 있는 MongoDB 데이터베이스에 연결하는 Node.js 컨테이너입니다.
- Python & PostgreSQL - 다른 컨테이너에 있는 PostgreSQL에 연결하는 Python 컨테이너입니다.
- Docker-Outside-of-Docker Compose - Docker CLI를 포함하고 Docker Unix 소켓을 볼륨 마운트하여 dev 컨테이너 내부에서 로컬 Docker 설치에 액세스하는 방법을 보여줍니다.
선택 후 VS Code는 해당 폴더에 적절한 .devcontainer/devcontainer.json(또는 .devcontainer.json) 파일을 추가합니다.
구성을 수동으로 만들 수도 있습니다. Docker Compose 파일을 수정하지 않고 재사용하려면 .devcontainer/devcontainer.json에서 dockerComposeFile 및 service 속성을 사용할 수 있습니다.
예를 들어,
{
"name": "[Optional] Your project name here",
"dockerComposeFile": "../docker-compose.yml",
"service": "the-name-of-the-service-you-want-to-work-with-in-vscode",
"workspaceFolder": "/default/workspace/path/in/container/to/open",
"shutdownAction": "stopCompose"
}
workspaceFolder 및 shutdownAction과 같은 기타 사용 가능한 속성에 대한 정보는 devcontainer.json 참조를 참조하세요.
.devcontainer/devcontainer.json 파일을 폴더에 추가한 후, 명령 팔레트(F1)에서 Dev Containers: Reopen in Container 명령(또는 아직 컨테이너 안에 있지 않은 경우 Dev Containers: Open Folder in Container...)을 실행합니다.
컨테이너가 아직 실행 중이 아니면 VS Code는 이 예시에서 docker-compose -f ../docker-compose.yml up을 호출합니다. service 속성은 시작될 서비스가 아니라 VS Code가 연결해야 하는 Docker Compose 파일의 서비스를 나타냅니다. 수동으로 시작한 경우 VS Code는 지정한 서비스에 연결됩니다.
또한 Docker Compose 파일의 개발용 복사본을 만들 수도 있습니다. 예를 들어 .devcontainer/docker-compose.devcontainer.yml이 있었다면 devcontainer.json의 다음 줄만 변경하면 됩니다.
"dockerComposeFile": "docker-compose.devcontainer.yml"
그러나 종종 Docker Compose 파일 복사본을 만드는 대신 **다른 파일로 확장**하는 것이 더 나은 방법입니다. 다음 섹션에서 Docker Compose 파일 확장에 대해 다룹니다.
기본 컨테이너 명령이 실패하거나 종료될 때 컨테이너가 종료되는 것을 방지하려면 devcontainer.json에 지정한 서비스에 대해 Docker Compose 파일을 다음과 같이 수정할 수 있습니다.
# Overrides default command so things don't shut down after the process ends.
command: /bin/sh -c "while sleep 1000; do :; done"
아직 하지 않았다면, Docker Compose 파일의 volumes 목록을 사용하여 로컬 소스 코드를 컨테이너에 **바인드 마운트**할 수 있습니다.
예를 들어,
volumes:
# Mounts the project folder to '/workspace'. The target path inside the container
# should match what your application expects. In this case, the compose file is
# in a sub-folder, so you will mount '..'. You would then reference this path as the
# 'workspaceFolder' in '.devcontainer/devcontainer.json' so VS Code starts here.
- ..:/workspace:cached
그러나 Linux에서는 바인드 마운트를 사용할 때 비루트 사용자를 설정하고 지정해야 할 수 있습니다. 그렇지 않으면 생성하는 모든 파일이 root가 됩니다. 자세한 내용은 dev 컨테이너에 비루트 사용자 추가를 참조하세요. VS Code를 다른 사용자로 실행하려면 devcontainer.json에 다음을 추가하세요.
"remoteUser": "your-user-name-here"
모든 프로세스를 다른 사용자로 실행하려면 Docker Compose 파일의 해당 서비스에 다음을 추가하세요.
user: your-user-name-here
개발용 사용자 지정 Dockerfile을 만들지 않는 경우, 서비스 컨테이너 내부에 curl과 같은 추가 개발자 도구를 설치하고 싶을 수 있습니다. 이러한 도구를 컨테이너 이미지에 추가하는 것보다 효율성은 떨어지지만, 이 목적으로 postCreateCommand 속성을 사용할 수도 있습니다.
소프트웨어 설치에 대한 자세한 내용은 추가 소프트웨어 설치를 참조하고, postCreateCommand 속성에 대한 자세한 내용은 devcontainer.json 참조를 참조하세요.
애플리케이션이 C++, Go, Rust 또는 ptrace 기반 디버거를 사용하는 다른 언어로 빌드된 경우 Docker Compose 파일에 다음 설정을 추가해야 합니다.
# Required for ptrace-based debuggers like C++, Go, and Rust
cap_add:
- SYS_PTRACE
security_opt:
- seccomp:unconfined
컨테이너를 처음 만든 후 devcontainer.json, Docker Compose 파일 또는 관련 Dockerfile의 업데이트를 적용하려면 Dev Containers: Rebuild Container 명령을 실행해야 합니다.
Docker Compose에서 localhost 사용
Docker 문서에 설명된 대로 docker-compose.yml 파일에 다른 서비스를 추가할 수 있습니다. 그러나 이 서비스에서 실행되는 모든 것을 컨테이너 내 localhost에서 사용할 수 있도록 하거나 서비스를 로컬로 전달하려면 서비스 구성에 다음 줄을 추가하세요.
# Runs the service on the same network as the database container, allows "forwardPorts" in devcontainer.json function.
network_mode: service:db
Node.js 및 MongoDB 예제 dev 컨테이너에서 network_mode: service:db의 예시를 볼 수 있습니다.
개발을 위해 Docker Compose 파일 확장
기존 배포/비개발 중심 docker-compose.yml을 참조하는 데는 몇 가지 잠재적인 단점이 있습니다.
예를 들어,
- Docker Compose는 엔트리 포인트가 종료되면 컨테이너를 종료합니다. 이는 앱을 반복적으로 다시 시작해야 하는 디버깅 상황에서 문제가 됩니다.
- 또한 로컬 파일 시스템을 컨테이너에 매핑하지 않거나 액세스하려는 데이터베이스와 같은 다른 리소스에 포트를 노출하지 않을 수 있습니다.
- 로컬
.ssh폴더의 내용을 컨테이너로 복사하거나 위에 Docker Compose 사용 섹션에 설명된 ptrace 옵션을 설정하고 싶을 수 있습니다.
이러한 문제 및 이와 유사한 문제를 해결하기 위해 여러 docker-compose.yml 파일을 사용하여 기본 구성을 재정의하거나 보완하는 방식으로 전체 Docker Compose 구성을 확장할 수 있습니다.
예를 들어, 이 추가 .devcontainer/docker-compose.extend.yml 파일을 고려해 보세요.
version: '3'
services:
your-service-name-here:
volumes:
# Mounts the project folder to '/workspace'. While this file is in .devcontainer,
# mounts are relative to the first file in the list, which is a level up.
- .:/workspace:cached
# [Optional] Required for ptrace-based debuggers like C++, Go, and Rust
cap_add:
- SYS_PTRACE
security_opt:
- seccomp:unconfined
# Overrides default command so things don't shut down after the process ends.
command: /bin/sh -c "while sleep 1000; do :; done"
이 동일한 파일은 필요한 경우 포트 매핑과 같은 추가 설정을 제공할 수 있습니다. 이를 사용하려면 특정 순서로 원본 docker-compose.yml 파일과 .devcontainer/docker-compose.extend.yml을 참조하세요.
{
"name": "[Optional] Your project name here",
// The order of the files is important since later files override previous ones
"dockerComposeFile": ["../docker-compose.yml", "docker-compose.extend.yml"],
"service": "your-service-name-here",
"workspaceFolder": "/workspace",
"shutdownAction": "stopCompose"
}
그러면 VS Code는 컨테이너를 시작할 때 **두 파일 모두 자동으로 사용**합니다. 명령줄에서 직접 시작할 수도 있습니다.
docker-compose -f docker-compose.yml -f .devcontainer/docker-compose.extend.yml up
postCreateCommand 속성을 사용하면 컨테이너 내부에 추가 도구를 설치할 수 있지만, 어떤 경우에는 개발 전용 특정 Dockerfile을 갖고 싶을 수 있습니다. 이와 동일한 접근 방식을 사용하여 기존 Docker Compose 파일을 수정하지 않고 개발 전용 사용자 지정 Dockerfile을 참조할 수도 있습니다. 예를 들어 .devcontainer/docker-compose.extend.yml을 다음과 같이 업데이트할 수 있습니다.
version: '3'
services:
your-service-name-here:
# Note that the path of the Dockerfile and context is relative to the *primary*
# docker-compose.yml file (the first in the devcontainer.json "dockerComposeFile"
# array). The sample below assumes your primary file is in the root of your project.
build:
context: .
dockerfile: .devcontainer/Dockerfile
volumes:
- .:/workspace:cached
command: /bin/sh -c "while sleep 1000; do :; done"
축하합니다! Visual Studio Code에서 dev 컨테이너를 구성했습니다. 팀원 및 다양한 프로젝트 간에 컨테이너 구성을 공유하는 방법을 배우려면 계속 읽어보세요.
저장소에 구성 파일 추가
devcontainer.json 파일을 소스 제어에 추가하여 사용자 지정 Dev Container 템플릿을 쉽게 공유할 수 있습니다. 이러한 파일을 저장소에 포함하면, 저장소의 로컬 복사본을 VS Code에서 여는 사람은 누구나 Dev Containers 확장이 설치되어 있다면 자동으로 컨테이너에서 폴더를 다시 열도록 요청받게 됩니다.

팀이 일관된 환경 및 도구 체인을 사용하는 것 외에도, 새로운 기여자 또는 팀 구성원이 빠르게 생산성을 높이는 데 도움이 됩니다. 처음 기여하는 사람들은 더 적은 안내가 필요하고 환경 설정과 관련된 문제가 적게 발생합니다.
Dev Container에서 열기 배지 추가
사용자가 프로젝트를 Dev Containers에서 쉽게 열 수 있도록 저장소에 배지 또는 링크를 추가할 수도 있습니다. 필요한 경우 Dev Containers 확장을 설치하고, 저장소를 컨테이너 볼륨으로 복제한 다음, dev 컨테이너를 시작합니다.
예를 들어, https://github.com/microsoft/vscode-remote-try-java를 열기 위한 배지는 다음과 같습니다.
[](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/microsoft/vscode-remote-try-java)
open in dev container 링크를 직접 포함할 수도 있습니다.
If you already have VS Code and Docker installed, you can click the badge above or [here](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/microsoft/vscode-remote-try-java) to get started. Clicking these links will cause VS Code to automatically install the Dev Containers extension if needed, clone the source code into a container volume, and spin up a dev container for use.
대안: 저장소 구성 폴더
어떤 경우에는 자신이 제어하지 않거나 저장소 자체에 구성이 포함되지 않도록 하려는 저장소에 대한 구성을 만들고 싶을 수 있습니다. 이 상황을 처리하려면 로컬 파일 시스템에 구성 파일을 저장할 위치를 구성할 수 있으며, 이 파일은 저장소에 따라 자동으로 선택됩니다.
먼저, 저장소 컨테이너 구성 파일을 저장할 로컬 폴더를 Dev > Containers: Repository Configuration Paths 사용자 설정으로 업데이트하세요.
설정 편집기에서 'dev containers repo'를 검색하여 설정을 찾을 수 있습니다.

다음으로, 저장소의 원격 위치를 반영하는 하위 폴더에 .devcontainer/devcontainer.json(및 관련 파일)을 배치합니다. 예를 들어 github.com/devcontainers/templates에 대한 구성을 만들고 싶다면 다음 폴더 구조를 만듭니다.
📁 github.com
📁 devcontainers
📁 templates
📁 .devcontainer
배치가 완료되면 Dev Containers 명령을 사용할 때 구성이 자동으로 선택됩니다. 컨테이너 안에서는 명령 팔레트(F1)에서 Dev Containers: Open Container Configuration File을 선택하여 관련 devcontainer.json 파일을 열고 추가 편집을 수행할 수도 있습니다.
구성 조회를 위해 사용되는 경로는 git remote -v의 출력에서 파생됩니다. 폴더를 컨테이너에서 다시 열려고 할 때 구성이 발견되지 않으면, 명령 팔레트(F1)에서 Dev Containers: Show Container Log를 확인하여 확인된 경로 목록을 확인하세요.
다음 단계
- 실행 중인 컨테이너에 연결 - 이미 실행 중인 Docker 컨테이너에 연결합니다.
- 고급 컨테이너 - 고급 컨테이너 시나리오에 대한 솔루션을 찾습니다.
- devcontainer.json 참조 -
devcontainer.json스키마를 검토합니다.