여러 컨테이너에 연결
현재 Visual Studio Code 창 하나당 하나의 컨테이너에만 연결할 수 있습니다. 하지만 여러 VS Code 창을 실행하여 각각에 연결할 수 있습니다.
devcontainer.json을 사용하고 Docker Compose를 사용하려는 경우, 소스 트리 내 각 서비스마다 별도의 devcontainer.json 파일을 생성하여 공통 docker-compose.yml을 가리키도록 할 수 있습니다.
이 기능이 어떻게 작동하는지 이해하려면 이 예시 소스 트리를 살펴보세요.
📁 project-root
📁 .git
📁 .devcontainer
📁 python-container
📄 devcontainer.json
📁 node-container
📄 devcontainer.json
📁 python-src
📄 hello.py
📁 node-src
📄 hello.js
📄 docker-compose.yml
.git 폴더의 위치는 소스 제어가 제대로 작동하려면 컨테이너에서 해당 경로를 볼 수 있도록 해야 하므로 중요합니다.
다음으로 루트의 docker-compose.yml이 다음과 같다고 가정해 보겠습니다.
services:
python-api:
image: mcr.microsoft.com/devcontainers/python:1-3.12-bookworm
volumes:
# Mount the root folder that contains .git
- .:/workspace
command: sleep infinity
# ...
node-app:
image: mcr.microsoft.com/devcontainers/typescript-node:1-20-bookworm
volumes:
# Mount the root folder that contains .git
- .:/workspace
command: sleep infinity
# ...
그런 다음 Python 개발을 위해 ./devcontainer/python-container/devcontainer.json을 다음과 같이 설정할 수 있습니다.
{
"name": "Python Container",
"dockerComposeFile": ["../../docker-compose.yml"],
"service": "python-api",
"shutdownAction": "none",
"workspaceFolder": "/workspace/python-src"
}
다음으로, workspaceFolder를 변경하여 Node.js 개발을 위해 ./devcontainer/node-container/devcontainer.json을 설정할 수 있습니다.
{
"name": "Node Container",
"dockerComposeFile": ["../../docker-compose.yml"],
"service": "node-app",
"shutdownAction": "none",
"workspaceFolder": "/workspace/node-src"
}
devcontainer.json 파일의 "shutdownAction": "none"은 선택 사항이지만, VS Code가 닫힐 때 컨테이너를 계속 실행 상태로 유지합니다. 이렇게 하면 한 창을 닫아도 두 컨테이너가 실수로 종료되는 것을 방지할 수 있습니다.
여러 VS Code 창에서 여러 컨테이너에 연결
- 프로젝트의 루트 레벨에서 VS Code 창을 엽니다.
- 명령 팔레트(F1)에서 Dev Containers: Reopen in Container를 실행하고
Python Container를 선택합니다. - 그러면 VS Code가 두 컨테이너를 모두 시작하고 현재 창을 다시 로드한 후 선택한 컨테이너에 연결됩니다.
- 다음으로, 파일 > 새 창을 사용하여 새 창을 엽니다.
- 현재 창에서 루트 레벨의 프로젝트를 엽니다.
- 명령 팔레트(F1)에서 Dev Containers: Reopen in Container를 실행하고
Node Container를 선택합니다. - 현재 VS Code 창이 다시 로드되고 선택한 컨테이너에 연결됩니다.
이제 별도의 창에서 두 컨테이너와 모두 상호 작용할 수 있습니다.
단일 VS Code 창에서 여러 컨테이너에 연결
- 프로젝트의 루트 레벨에서 VS Code 창을 엽니다.
- 명령 팔레트(F1)에서 Dev Containers: Reopen in Container를 실행하고
Python Container를 선택합니다. - 그러면 VS Code가 두 컨테이너를 모두 시작하고 현재 창을 다시 로드한 후 선택한 컨테이너에 연결됩니다.
- 명령 팔레트(F1)에서 Dev Containers: Switch Container를 실행하고
Node Container를 선택합니다. - 현재 VS Code 창이 다시 로드되고 선택한 컨테이너에 연결됩니다.
- 동일한 명령으로 다시 전환할 수 있습니다.
두 개의 컨테이너에 연결할 때 Docker Compose 파일 확장
개발을 위해 Docker Compose 파일을 확장하려는 경우, 두 서비스 모두를 (필요에 따라) 확장하는 단일 docker-compose.yml을 사용하고 이 파일을 두 devcontainer.json 파일 모두에서 참조해야 합니다.
예를 들어, 이 docker-compose.devcontainer.yml 파일을 고려해 보겠습니다.
services:
python-api:
volumes:
- ~:~/local-home-folder # Additional bind mount
# ...
node-app:
volumes:
- ~/some-folder:~/some-folder # Additional bind mount
# ...
두 .devcontainer.json 파일은 다음과 같이 업데이트됩니다.
"dockerComposeFile": [
"../../docker-compose.yml",
"../../docker-compose.devcontainer.yml",
]
이 Compose 파일 목록은 컨테이너를 시작할 때 사용되므로 각 devcontainer.json에서 다른 파일을 참조하면 예상치 못한 결과가 발생할 수 있습니다.