devcontainer-compose
Devcontainer.json
.devcontainer/devcontainer.json
로 저장하고 컨테이너에서 개발 하는 경우 유용
Dockerfile을 사용하는 Devcontainer 템플릿
{
"name": "Project Name",
"build": {
"dockerfile": "Dockerfile",
"context": "..",
"args": {
"VARIANT": "16-bullseye"
}
},
"runArgs": ["--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined"],
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
"extensions": [
"dbaeumer.vscode-eslint",
"ms-python.python"
],
"mounts": [
"source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached",
"source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=/home/node/.ssh,type=bind,consistency=cached"
],
"workspaceFolder": "/workspace",
"forwardPorts": [3000, 5000],
"postCreateCommand": "npm install",
"remoteUser": "node",
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
},
"containerEnv": {
"NODE_ENV": "development"
}
}
Dockerfile 설정
build
: Dockerfile을 사용하여 컨테이너를 빌드하는 설정입니다. dockerfile
: 사용할 Dockerfile의 경로를 지정합니다. context
: Dockerfile의 빌드 컨텍스트를 지정합니다. args
: Dockerfile에 전달할 빌드 인자를 지정합니다.
컨테이너 실행 옵션
runArgs
: 컨테이너 실행 시 추가할 Docker 실행 인자를 지정합니다.
VS Code 설정
settings
: VS Code의 설정을 지정합니다. extensions
: 컨테이너에 설치할 VS Code 확장을 지정합니다.
네트워크 설정
forwardPorts
: 호스트에서 컨테이너로 포워딩할 포트를 지정합니다. - 동적 포트 할당: 호스트 측의 실제 포트 번호는 VS Code에 의해 동적으로 할당됩니다. 이는 호스트에서 해당 포트가 이미 사용 중일 경우 충돌을 방지하기 위함입니다.
- 만약 특정 호스트 포트를 명시적으로 지정하고 싶다면, devcontainer.json 파일에서 appPort 설정을 사용할 수 있습니다. 예를 들어
"appPort": ["3000:3000", "5000:5000"]
와 같이 지정할 수 있습니다. ({host port}:{container port})
초기화 및 사용자 설정
postCreateCommand
: 컨테이너 생성 후 실행할 명령어를 지정합니다. remoteUser
: 컨테이너 내에서 사용할 사용자를 지정합니다.
추가 기능
features
: 컨테이너에 추가할 개발 도구나 런타임을 지정합니다. 여기서는 Docker-in-Docker 기능을 추가합니다.
파일 시스템 및 마운트
mounts
: 호스트의 디렉토리나 파일을 컨테이너에 마운트합니다. 여기서는 SSH 키를 마운트합니다.
환경 변수
containerEnv
: 컨테이너 내부에서 사용할 환경 변수를 설정합니다.