아래 그림과 같이 코드스페이스 인스턴스를 생성합니다.
-
.devcontainer
디렉토리를 리포지토리 루트에 만듭니다. -
.devcontainer
디렉토리 아래 아래와 같은 세 파일을 만듭니다.Dockerfile
devcontainer.json
on-create.sh
-
on-create.sh
파일에 실행 권한을 줍니다.chmod +x .devcontainer/on-create.sh
https://github.com/devcontainers/images 또는 Docker Hub에서 베이스 이미지를 참조합니다. 아래는 몇가지 예시입니다.
-
Ubuntu 20.04 LTS 기반에 .NET SDK 7을 설치한 베이스 이미지
ARG VARIANT="7.0-jammy" FROM mcr.microsoft.com/dotnet/sdk:${VARIANT} ENV PATH $PATH:/home/vscode/.dotnet:/home/vscode/.dotnet/tools
devcontainer.json
파일의 기본 구조는 아래와 같습니다.
{
"name": "DevContainer 이름",
"build": {
// 컨테이너 기본 이미지 설정
},
"forwardPorts": [
// 포트 포워딩
],
"features": {
// 추가 기능
},
"overrideFeatureInstallOrder": [
// 추가 기능 설치 순서
],
"customizations": {
"vscode": {
// 코드스페이스 커스터마이징
"extensions": [
// VS Code 익스텐션
],
"settings": {
// VS Code 환경 설정
}
}
},
// on-create.sh 스크립트 실행 명령어
"onCreateCommand": "/bin/bash ./.devcontainer/on-create.sh > ~/on-create.log",
// DevContainer 사용자 계정
"remoteUser": "vscode"
}
-
build
속성을 정의합니다. 아래는 .NET을 예시로 들었습니다.{ ... "build": { "dockerfile": "./Dockerfile", "context": ".", "args": { "VARIANT": "7.0" } }, ... }
-
forwardPorts
속성을 정의합니다. 아래는3000
,5000
,5001
,8080
,44380
포트를 포워딩하겠다는 의미입니다.{ ... "forwardPorts": [ 3000, 5000, 5001, 8080, 44380 ], ... }
-
features
속성을 정의합니다. 설치를 원하는 피처는 https://github.com/devcontainers/features 리포지토리를 참조합니다. 아래는 Azure CLI, GitHub CLI, node 등을 설치하는 예시입니다.{ ... "features": { // Azure CLI "ghcr.io/devcontainers/features/azure-cli:latest": { "version": "latest" }, // GitHub CLI "ghcr.io/devcontainers/features/github-cli:latest": { "version": "latest" }, // node.js "ghcr.io/devcontainers/features/node:latest": { "version": "lts", "nodeGypDependencies": true, "nvmInstallPath": "/usr/local/share/nvm" }, // common utilities "ghcr.io/devcontainers/features/common-utils:latest": { "installZsh": true, "installOhMyZsh": true, "upgradePackages": true, "username": "vscode", "uid": "1000", "gid": "1000" } }, ... }
-
features
속성에 정의한 피처들을 설치하기 위한 순서를 정의합니다. 여기서는common-utils
피처를 가장 먼저 설치하고 나머지 피처는 어떤 순서로 설치하든 상관없게끔 했습니다.{ ... "overrideFeatureInstallOrder": [ "ghcr.io/devcontainers/features/common-utils" ], ... }
-
코드스페이스에 설치할 익스텐션을 정의합니다. 여기서는 GitHub 코파일럿 익스텐션, C# 익스텐션, Azure 익스텐션을 설치하는 것을 예로 들었습니다.
{ ... "customizations": { "vscode": { "extensions": [ // GitHub 코파일럿 관련 "GitHub.copilot", "GitHub.copilot-labs", "GitHub.copilot-chat", // C# 관련 "ms-dotnettools.vscode-dotnet-pack", "kreativ-software.csharpextensions", // Azure 관련 "ms-vscode.vscode-node-azure-pack", "ms-azuretools.vscode-bicep" ], } }, ... }
더 많은 익스텐션을 설치하고 싶다면 https://marketplace.visualstudio.com/vscode에서 검색한 후 추가하세요.
-
코드스페이스 UI 구성을 정의합니다. 아래는 미니맵을 비활성화하고 파일을 확장자 기준으로 정리하는 것을 예로 들었습니다.
{ ... "customizations": { "vscode": { ... "settings": { "editor.minimap.enabled": false, "explorer.sortOrder": "type" } } }, ... }
devcontainer.json
파일로 컨테이너 설정을 끝낸 이후, 마지막으로 추가 기능을 설치하는 스크립트입니다. 아래 내용은 운영체제 업데이트 및 추가 패키지를 설치하는 과정에 대한 예시입니다.
## Install additional apt packages
sudo apt-get update \
&& sudo apt-get install -y dos2unix libsecret-1-0 xdg-utils \
&& sudo apt clean -y \
&& sudo rm -rf /var/lib/apt/lists/*
## Configure git
git config --global pull.rebase false
git config --global core.autocrlf input
## GitHub Copilot CLI ##
npm install -g @githubnext/github-copilot-cli
eval "$(github-copilot-cli alias -- "$0")"
## GitHub Copilot CLI ##
echo '
# Add GitHub Copilot CLI alias
alias ghcp='github-copilot-cli'
eval "$(github-copilot-cli alias -- "$0")"
' >> $HOME/.zshrc
echo '
# Add GitHub Copilot CLI alias
alias ghcp='github-copilot-cli'
eval "$(github-copilot-cli alias -- "$0")"
' >> $HOME/.bashrc
## AZURE BICEP CLI ##
az bicep install
## AZURE DEV CLI ##
curl -fsSL https://aka.ms/install-azd.sh | bash
-
아래 명령어를 실행시켜 변경사항을 저장하고 리포지토리에 반영합니다.
git add . git commit -m "Add devcontainer settings" git push origin
-
F1
키를 눌러Codespaces: Full Rebuild Container
명령을 실행시킵니다. -
아래 명령어를 통해 각종 도구가 제대로 설치가 되었는지 확인합니다.
# OS 정보 cat /etc/os-release # .NET SDK 설치 여부 dotnet --list-sdks # 파워셸 설치 여부 pwsh --version # nvm 설치 여부 nvm --version # node 설치 여부 node --version # npm 설치 여부 npm --version # GitHub CLI 설치 여부 gh --version # Azure CLI 설치 여부 az --version # Azure Dev CLI 설치 여부 azd version # 기타 환경 변수 확인 printenv -0 | sort -z | tr '\0' '\n'