Fedora Podman으로 Visual Studio Code Remote Container 사용하기

Visual Studio Code에서 Remote Container 확장 프로그램을 통해 개발환경을 컨테이너 내에 구축할 수 있다. 편하기도 편하지만, 여러 개발환경을 동시에 사용해야 할 경우 개발환경끼리 꼬이는 일이 없게 해준다. OS 환경을 깨끗하게 유지할 수 있는 것은 덤이다.

Windows 10의 WSL2와 Ubuntu 20.04에서는 가이드대로 Docker를 설치하면 별다른 설정 없이 Remote Container 확장 프로그램을 사용할 수 있지만, Fedora는 그렇지 않다. Fedora 32는 기본 컨테이너 엔진으로 Podman을 사용하기 때문이다. 물론 Fedora 32에 Docker를 설치해서 사용할 수 있는 방법이 있지만, 꼭 그래야 할 이유가 없다면 아래 방법을 통해 기본 제공되는 Podman으로도 VS Code의 Remote Container 확장 프로그램을 사용할 수 있다.

1. Remote – Container 확장 프로그램 설정에서 Remote > Containers: Docker Path에 “podman”을 입력한다.

2. devcontainer.json에 runArgs 항목을 추가하여 –security-opt label=disable 옵션을 준다.

VS Code Remote Container 확장 프로그램에서 제공하는 기본 템플릿 중 하나인 Node.js 개발환경 devcontainer.json을 예로 들면, 31번째 줄처럼 수정해 주는 것이다.

// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.134.1/containers/typescript-node
{
	"name": "Node.js & TypeScript",
	"build": {
		"dockerfile": "Dockerfile",
		// Update 'VARIANT' to pick a Node version: 10, 12, 14
		"args": { "VARIANT": "12" }
	},

	// Set *default* container specific settings.json values on container create.
	"settings": { 
		"terminal.integrated.shell.linux": "/bin/bash"
	},

	// Add the IDs of extensions you want installed when the container is created.
	"extensions": [
		"dbaeumer.vscode-eslint",
		"ms-vscode.vscode-typescript-tslint-plugin"
	],

	// Use 'forwardPorts' to make a list of ports inside the container available locally.
	// "forwardPorts": [],

	// Use 'postCreateCommand' to run commands after the container is created.
	// "postCreateCommand": "yarn install",

	// Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root.
	// "remoteUser": "node",
	
	"runArgs": [ "--security-opt", "label=disable" ],
}

이렇게 두 가지만 설정해 주면 문제없이 Remote Container가 동작한다. 첫번째 설정은 당연하게도 Remote Container 확장 프로그램이 Docker 대신에 Podman을 사용하도록 하는 것이고, 두번째 설정은 해당 컨테이너의 SELINUX label separation을 비활성화 하는 것이다. 두번째 설정을 하지 않으면, 컨테이너 내에서 소스코드 파일에 접근할 수 없기 때문에 Remote Container가 사실상 무용지물이 된다.

Leave a Comment