본문 바로가기
AI Journey/개발 용어 및 개념

[개발 용어] Dev container (데브 컨테이너) Part 2 - 작성 방법 및 예시

by 보눔비스타 2025. 3. 10.

지난 글에서는 데브 컨테이너의 개념에 대해 살펴보았다. 이번 글에서는 데브 컨테이너의 구조 및 작성 방법에 대해 간단히 알아보려고 한다. 참고로 데브 컨테이너는 JSON 형식을 사용하는데, 나는 아직 JS도 알못이다. 😂 어쨌든 나중에 내가 개발을 하게 되면 참고하려고 쓰는 소위 '와드' 성격의 글임을 감안했으면 좋겠다.

형식(data format)

데브 컨테이너는 JSON (JavaScript Object Notation) 형식을 사용한다. 먼저 알아야 할 것은, JSON은 프로그래밍 언어가 아니라는 것이다. 데이터를 저장하고 교환하기 위한 경량 데이터 형식(data format)이다. 따라서 JSON 자체는 실행 가능한 코드(로직, 함수) 등을 포함하지 않는다. 단지 데이터를 구조화하는 방식일 뿐이다. 
 
파일명은 devcontainer.json으로, VS Code의 Dev Containers 확장 프로그램에서 인식한다. 
 

기본 구조

devcontainer.json 파일은 개발 환경을 정의하는 키-값 쌍으로 구성된다. 기본적으로 다음 요소들을 포함할 수 있다.

  • 필수 항목: 컨테이너의 기반 이미지 빌드 설정.
  • 선택 항목: 확장 프로그램, 포트 설정, 실행 명령어 등.
{
  "name": "환경 이름",
  "image": "사용할 도커 이미지",
  "extensions": ["설치할 VS Code 확장"],
  "postCreateCommand": "컨테이너 생성 후 실행할 명령"
}

 

여기서 image는 jpg, png 같은 이미지가 아니고, 운영체제, 소프트웨어, 설정 등이 압축된 환경 패키지를 가리킨다. 실행 가능한 소프트웨어 상태를 찍어놓은 일종의 스냅샷 또는 복사본으로 비유할 수 있을 것이다. 
예를 들어 "image": "python:3.9" 는 "파이썬 3.9가 이미 설치된 환경을 기반으로 데브 컨테이너를 만들어달라"는 지시다. 그러면 VS Code가 이 설정을 보고, Docker Hub(도커 이미지 저장소)에서 python:3.9 이미지를 내려받아 컨테이너를 실행한다. 그러면 파이썬 3.9가 깔린 환경이 바로 준비되는 것이다.

image에 대한 대한으로 build 속성을 써서 커스텀 Dockerfile로 환경을 만들 수도 있다. 이 부분에 대해서는 나중에 별도로 정리할 기회가 있을 것이다. 

 
주요 구성 요소

  • name: 개발 환경의 이름(식별용).
  • image 또는 build:
    • image: 기존 Docker 이미지 사용(예: "python:3.9").
    • build: 커스텀 Dockerfile로 이미지 빌드.
  • extensions: VS Code에서 사용할 확장 프로그램 목록.
  • postCreateCommand: 컨테이너 생성 후 실행할 초기화 명령(예: 패키지 설치).
  • 기타 (선택):
    • settings: VS Code 설정 커스터마이징.
    • ports: 포트 매핑.
    • workspaceFolder: 작업 디렉토리 지정.

작성 예시

1. Python 웹 개발

상황: "Flask라는 Python 프레임워크로 웹 앱을 만들고 싶어요. 근데 팀원이 5명인데, 각자 Python 버전이 다르고, 필요한 패키지 설치도 제각각이에요."
해결: .devcontainer.json에 다음과 같이 설정한다.

{
  "name": "Flask Dev Environment",
  "image": "python:3.9",
  "extensions": ["ms-python.python"],
  "postCreateCommand": "pip install flask"
}

"name": "Flask Dev Environment"

이 속성은 개발 환경의 이름을 정의함. 여기서는 "Flask Dev Environment"라는 이름이 지정되었으며, 이는 Flask(파이썬 웹 프레임워크)를 사용하기 위한 개발 환경임을 나타낸다. 

 

"image": "python:3.9"

컨테이너 이미지(Docker 이미지)를 지정함. 이 환경은 python:3.9라는 Docker 이미지를 기반으로 한다. 즉, 파이썬 3.9 버전이 설치된 환경이 시작점이다. 이는 개발 컨테이너가 실행될 때 해당 이미지를 가져와 사용한다는 뜻이다.

 

"extensions": ["ms-python.python"]

코드 편집기에 설치할 확장 프로그램(extensions)을 나열함. 여기서는 ms-python.python이라는 확장 프로그램을 설치하도록 지정함. 

 

"postCreateCommand": "pip install flask"

컨테이너가 생성된 후 실행할 명령어를 정의함. pip install flask 명령은 파이썬 패키지 관리자인 pip를 사용해 Flask 라이브러리를 설치한다. 컨테이너가 시작된 후 자동으로 Flask가 설치되어 웹 개발을 바로 시작할 수 있게 된다.


2. Node.js 프로젝트

상황: "Node.js 18 버전으로 작업해야 하는데, 내 컴퓨터엔 Node.js 16이 깔려 있고 업그레이드하기 귀찮아요."
해결: .devcontainer.json에 다음과 같이 설정한다.

{
  "name": "Node.js 18",
  "image": "node:18",
  "extensions": ["dbaeumer.vscode-eslint"]
}


컨테이너를 열면 Node.js 18 환경이 바로 준비된다. 내 컴퓨터의 Node.js 버전은 그대로 두고, 컨테이너에서만 새 버전을 사용하게 된다.

3. 데이터 사이언스

상황: "Jupyter Notebook과 Pandas, NumPy를 써야 하는데, 설치가 복잡하고 다른 프로젝트와 충돌해요."
해결: .devcontainer.json에 다음과 같이 설정한다.

{
  "name": "Data Science",
  "image": "jupyter/datascience-notebook",
  "extensions": ["ms-toolsai.jupyter"]
}


컨테이너를 열면 Jupyter와 데이터 사이언스 툴이 모두 준비된 환경이 시작된다.


오늘은 데브컨테이너를 작성하는 방법과 예시를 살펴보았다. 다음번에는 Docker의 개념에 대해서도 별도의 글로 정리해봐야겠다. 아직 모든 것이 낯설지만 하나씩 알아가는 것이 재밌다. 킵고잉 🐱‍🏍