Skip to content

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: 컨테이너 내부에서 사용할 환경 변수를 설정합니다.