Docker가 애플리케이션 개발에 부여하는 이점은 독보적입니다. 한 번 설정한 프로젝트 환경을 언제나, 어떤 환경에서나, 몇 번이고 손쉽게 재현할 수 있게 해 주기 때문입니다.

Docker를 사용하면

  • 새로운 개발자가 프로젝트를 설정하는 데 드는 노력을 최소화할 수 있고
  • 개발자가 각자 본인이 선호하는 환경에서 개발할 수 있으며
  • 만들어진 애플리케이션이 서비스시에도 개발시와 동일한 환경에서 작동하므로 보다 안정성 있고 잘 제어된 빌드를 배포 가능합니다.

다만 Docker는 Linux 커널에 기초한 운영 체제에서 동작하도록 만들어졌기 때문에, 독자적인 커널을 사용하는 Windows에서 사용하려면 다소 귀찮은 작업이 필요합니다.

이 글에서는 Windows에서 Docker를 어떻게 구동할 수 있는지, 단계별로 설명하도록 하겠습니다. 보다 자세한 정보를 필요로 할 경우, 아래 링크된 Docker 공식 설치 가이드를 참조하는 것을 추천합니다.

Install Docker Desktop on Windows
How to install Docker Desktop for Windows

시스템 요구사양 확인

이 글에서 설명하는 방법을 적용하려면 Windows 환경이 다음 조건을 만족해야 합니다.

  • Windows 10 64비트 Pro, Enterprise, Education 또는 Home 에디션
  • x64 시스템일 경우 버전 1903 이상, 빌드 18362 이상
  • ARM64 시스템일 경우 버전 2004 이상, 빌드 19041 이상

실행 창에서 winver를 입력하고 실행하면 운영체제 정보를 확인할 수 있습니다.

WSL 2 설치

WSL이란 Windows Subsystem for Linux의 약자로, Windows상에서 Linux용 커맨드나 앱을 실행할 수 있도록 설계된 기능입니다. Microsoft 사이트 배포 페이지에서 설치 가이드를 확인할 수 있으며, 아래는 그 전문을 요약한 내용입니다.

먼저 Windows powershell을 실행해 다음 커맨드를 실행합니다.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
WSL을 활성화하는 커맨드

이후 설명할 Docker Desktop을 사용하려면, WSL의 상위 버전인 WSL 2를 설치할 필요가 있습니다. 그 첫 단계로서, 다음과 같이 Virtual Machine 기능을 활성화합니다.

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Virtual Machine을 활성화하는 커맨드

다음으로, Linux 커널 업데이트 패키지를 다운로드합니다.

이제 WSL를 2버전으로 사용하도록 설정합니다.

wsl --set-default-version 2
WSL 기본 버전을 2로 설정하는 커맨드

이제 WSL 2를 구동할 터미널을 설치해야 합니다. Microsoft 스토어를 열고 다음 터미널 중에 하나를 선택해 설치합니다. 저는 Ubuntu 20.04 LTS을 주로 사용하고 있습니다.

설치가 끝나고 앱을 실행하면 UNIX 사용자를 설정하는 다이얼로그가 나타납니다. Windows에서 사용자 계정을 설정한 것과 마찬가지로, Linux 시스템에서 사용할 아이덴티티를 설정하는 과정입니다.

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers

Enter new UNIX username: dev
New Password: ****************
Retype new password: ****************

passwd: password updated successfully
Installation successful!

dev@DESKTOP-00AAAAA:~$
WSL 터미널을 처음 실행했을 때 나타나는 다이얼로그

마지막 라인을 보면 dev@DESKTOP-00AAAAA:~$ 부분이 보일 것입니다. DESKTOP-00AAAAA 컴퓨터의 dev 사용자, 현재 위치는 사용자 계정 (윈도우즈의 C:\Users\<사용자> 같은 경로에 해당한다고 보면 됩니다) 최상위 위치임을 나타냅니다.

(이 위치를 파일 탐색기에서 확인하고 싶다면, 터미널에 explorer.exe . 또는 /mnt/c/windows/explorer.exe . 를 실행하면 됩니다.)

설치가 끝난 후에 WSL 2가 성공적으로 설치됐는지 확인하고 싶다면 powershell에서 wsl --list --verbose 커맨드를 통해 설치된 모든 WSL 시스템과 해당하는 WSL 버전을 확인 가능합니다.

PS C:\Users\Dev> wsl --list --verbose
  NAME                   STATE           VERSION
* Ubuntu-20.04           Stopped         2

Docker Desktop 설치

Docker Desktop은 Mac 또는 Windows에서 Docker를 손쉽게 구동할 수 있도록 공식 배포되는 애플리케이션으로, Docker 엔진, 커맨드 라인 인터페이스(CLI), Compose, Kubernetes 등 Docker를 사용하는 데 필요한 유틸리티를 종합하고 있습니다.

Docker Desktop은 WSL 2를 통합한 인터페이스를 지원하며, Docker 스크립트를 처음 다뤄 보는 사람도 다양한 작업을 간편히 수행할 수 있도록 도와줍니다.

Docker Hub에서 Docker Desktop 받기

Docker 관련 유틸리티들은 Docker Hub이라는 저장소에서 찾아볼 수 있습니다. 이곳에서 Docker Desktop for Windows를 찾아 설치하는 것으로 위에 설명한 Docker 엔진, CLI 등이 내 컴퓨터에 설치됩니다.

설치가 끝나면, 애플리케이션을 실행하고 설정 메뉴에서 다음과 같이 설정해 줍니다.

Settings > General 메뉴
  • Start Docker Desktop when you log in (시스템 시작시 Docker Desktop을 시작)을 해제합니다. 이 글을 쓰는 시점에서 Docker Desktop 앱은 메모리 소모와 관련된 이슈가 있습니다. 가급적이면 사용하지 않을 땐 꺼 두는 것이 리소스를 절약할 수 있습니다.
  • Use the WSL 2 based engine (WSL2 백엔드 엔진을 사용)을 설정합니다. WSL 2를 이미 설치했기 때문에, 이 항목은 기본값으로 체크되어 있을 것입니다.
Settings > Resources > WSL integration 메뉴

설치했던 WSL 터미널을 Docker와 연결할 수 있습니다. Resource 메뉴의 WSL integration 탭에서, Docker와 연결할 터미널을 선택하고 Apply & Restart 버튼을 누르면 됩니다.

Docker Desktop의 메모리 이슈

위와 같이 WSL 2를 사용해 Docker Desktop에서 컨테이너를 구동하다 보면, Vmmem이란 프로세스가 호스트 컴퓨터의 메모리와 CPU를 빠르게 소모해 나가는 현상을 체험하게 됩니다.

Docker 이미지를 호스팅할 때 사용할 컴퓨터의 리소스는 제한되어 있지 않기 때문에, 수동으로 설정해 주는 것으로 문제를 해결할 수 있습니다. (출처: How to stop WSL2 from hogging all your RAM with Docker)

C:\Users\<사용자> 경로에서 .wslconfig 파일을 만들고, 본인의 컴퓨터에 알맞는 설정을 작성해 저장하면 됩니다.

[wsl2]
memory=4GB # WSL 2의 가상 머신 메모리 사용을 4GB로 제한
processors=5 # WSL 2 가상 머신이 2개의 가상 프로세서를 사용하게 함

WSL 파일 시스템에 필요한 패키지 설치

WSL은 Windows와 별개의 파일 시스템을 사용하기 때문에, 개발에 필요한 리소스는 WSL에 한 번 다시 설치해 주어야 합니다.

WSL에 Node.js 설치

가령 저와 같이 Node.js를 필요로 하신다면, WSL 2를 사용하여 Node.js 개발 환경 설치를 참조해 설치를 완료할 수 있습니다. 아래는 간단한 요약입니다.

  • WSL 터미널을 열고
  • sudo apt-get update — 패키지 리스트의 캐시를 만듭니다.
  • sudo apt-get install curl — 패키지 관리자 curl을 설치합니다.
  • curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash — nvm(Node.js 버전 관리자)을 설치합니다. 설치되었는지는 command -v nvm을 실행했을 때 nvm이 로깅되는 것으로 확인 가능합니다.
  • nvm install --lts — 안정적인 최신 Node.js를 설치합니다. 설치 후에는 nvm ls 또는 node --version으로 설치된 버전을 확인 가능합니다.
  • 패키지 매니저로 npm 대신 yarn을 사용하고자 한다면 curl -o- -L https://yarnpkg.com/install.sh | bash로 설치하고 yarn --version으로 확인 가능합니다.

VS Code 확장 설치

VS Code를 사용해 개발할 경우, 다음과 같은 확장 프로그램을 사용해 Docker를 편리하게 이용할 수 있습니다.

  • Docker — Docker 스크립트를 실행하거나 디버깅하는 데 도움을 줍니다.
  • Remote — Docker 컨테이너의 파일을 VS Code에서 여는 데 도움을 줍니다.