WSL2보다 더 간단하게 구축하는 Multipass와 도커 개발 환경

🧐 | 2022-10-20

안녕하세요, 넷마블 기술전략실 조병승입니다.

지난번 멀티패스(Multipass) 활용글이었던 “Multipass 우분투 VM에도 고정 IP를 붙여보자” 이후로 거의 반년 넘게 지났네요. 제 직군이 엔지니어가 아니다보니, 멀티패스를 쓰면서 누적되는 변칙 상황이 많이 생기지 않아서 전해드릴 팁이 많지 않았던 것 같습니다.

얼마 전, 넷마블 기술분석팀 박정욱님이 올려주신 “도커 데스크톱 없이 구축하는 WSL2와 도커 개발 환경” 글을 보다가, 멀티패스에서도 이 같은 방법으로 도커를 쓸 수 있으리라는 생각이 들었습니다. 아니나 다를까, 멀티패스에는 모든 것이 이미 준비돼 있었습니다.

멀티패스가 어색하신 분들도 계시므로, 간략한 해설을 추가해서 도커 개발 환경 구축 방법을 공유합니다. 이하 내용은 WSL2에 대칭되는 부분에 멀티패스를 넣는 만큼, 윈도우 환경을 기준으로 하겠습니다. (맥이나 리눅스에서도 초기 설정 방법은 크게 다르지 않습니다.)

도커가 기본 탑재된 우분투 이미지

먼저, 멀티패스에서 설치할 수 있는 우분투 이미지 종류를 살펴보겠습니다. 단순히 버전별 이미지뿐 아니라, 꽤 다양한 프리셋 이미지가 있음을 알 수 있습니다.

$ multipass find

일반 우분투 버전을 설치하고 그 안에 도커 설치를 하나하나씩 하는 방법도 있습니다만, 멀티패스에는 도커 프리셋이 이미 있으므로 이를 활용하면 됩니다. 도커 프리셋 이미지로 VM을 생성합니다.

// multipass launch [프리셋 이미지 이름] -n [생성할 VM 이름]
$ multipass launch docker -n dockermtps

Creating dockermtps /
…
Launched: dockermtps

사실상 도커를 사용하기 위한 코어 기능은 이것만으로 모두 끝났습니다. 윈도우 터미널에서 멀티패스 내부 VM을 직접 실행해서 확인해보면 바로 확인할 수 있습니다.

// multipass exec [멀티패스 VM 이름] [실행할 명령어]
$ multipass exec dockermtps docker run hello-world

Alias 설정

이제부터는 더 간편하게 사용하기 위해 필요한 간단 Alias 설정입니다. 윈도우에서 멀티패스 VM 안에 있는 도커를 바로 실행하려면 시스템 환경 변수를 추가해야 합니다. 추가할 변수를 멀티패스에서 받아야 합니다.

// multipass alias [멀티패스 VM 이름]:[윈도우에서 실행할 명령어] 
$ multipass alias dockermtps:docker

You'll need to add the script alias folder to your path for aliases to work
without prefixing with `multipass`. For now, you can just do:

In PowerShell:
$ENV:PATH="$ENV:PATH;C:/Users[사용자 이름]/AppData/local/multipass/bin"

Or in Command Prompt:
PATH=%PATH%;C:/Users/[사용자 이름]/AppData/local/multipass/bin

바로 복사 붙여넣기로 쓸 수 있는 Alias 설정값을 얻었습니다. 얻은 Alias 설정값을 윈도우 터미널에서 파워셸이나 커맨드 명령에 입력하면 즉시 적용됩니다. 하지만 윈도우 터미널을 종료하고 재실행하거나 재부팅 할 때 Alias 설정값을 잃어버리기 때문에, 매번 다시 설정해야 합니다. 멀티패스 기준에서는 이미 발급한 Alias라서 다시 ‘docker’로는 설정값을 넣을 수 없기 때문에, 한번 발급받았을 때 별도로 Alias 설정값을 보관해야 하는 번거로움이 생깁니다.

시스템 환경 변수 추가

Alias 설정값 자체를 시스템 환경 변수에 등록하면, 위에서 겪은 번거로움조차 없애버릴 수 있습니다. ‘Path’에 디렉터리값을 추가하면, 모든 설정이 끝납니다.

멀티패스가 준 Alias 설정값에서는 디렉터리 구분자가 ‘/’로 돼 있습니다. 시스템 환경 변수에 복사 붙여넣기 할 때, 윈도우 환경이므로 디렉터리 구분자를 ‘\’로 바꿔야 합니다.

// 멀티패스 기본 제공 Alias 설정값
C:/Users/[사용자 이름]/AppData/local/multipass/bin

// 시스템 환경 변수에 넣는 설정값
C:\Users\[사용자 이름]\AppData\local\multipass\bin

변경한 설정은 재부팅 없이 바로 적용되므로, 윈도우 터미널만 재실행하면 됩니다. 이제 멀티패스 명령어(multipass exec)를 쓰지 않고 도커 명령어를 바로 쓸 수 있습니다.

세팅 끝!

멀티패스에 미리 준비된 도커 프리셋 이미지로 VM을 설치하고, Alias 설정값을 시스템 환경 변수에 추가한 것으로 모든 세팅이 끝났습니다.

포테이너(Portainer)

도커 데스크탑 애플리케이션과 대칭되는 기능은 포테이너(Portainer.io)로 대처해서 쓸 수 있습니다. 마침 도커 프리셋 이미지에 기본 탑재돼 있으므로, 9000번 포트로 접속해서 사용하시면 됩니다.

만약 9000번 포트로 포테이너에 접속해서 만나는 최초 화면에서 “Your Portainer instance timed out for security purposes. To re-enable your Portainer instance, you will need to restart Portainer.”라는 에러 메시지를 만난다면, 안내 문구 그대로 포테이너 컨테이너를 재실행하면 최초 관리자 계정 설정 페이지를 볼 수 있습니다. (멀티패스 공식 문서에서는 IP 주소가 10으로 시작해야 한다고 돼 있지만, 10으로 시작하지 않고 172로 시작하는 사설 IP주소를 쓰셔도 무방합니다.)

$ docker ps

CONTAINER ID   IMAGE                    COMMAND        CREATED       STATUS          PORTS
                             NAMES
a2549c1bc6ea   portainer/portainer-ce   "/portainer"   4 hours ago   Up 57 seconds   8000/tcp, 9443/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   portainer


$ docker restart portainer

portainer

물론, 필요없으신 분들은 바로 삭제하시면 됩니다.

$ docker rm -f portainer

정말 끝!

이게 정말 끝인지 Nginx를 설치해서 한번 확인해보겠습니다.

$ docker run --name mtpsnginx -p 80:80 -d nginx

WSL2에서 겪었던 과정 대비 정말 간단히 끝나지 않았나요? 개인적으로 WSL2에서 멀티패스 환경으로 넘어온 이후, 가장 만족감이 높았던 순간이 떠올라서 이렇게 간단히 정리해봤습니다.

멀티패스와 WSL2는 아직은 완벽히 동급 성능을 내는 VM이 아닙니다. 기반 엔진으로 Hyper-v를 쓰는 것은 같지만, 윈도우 안에서 동작하는 방법에 차이가 있기 때문에 멀티패스가 모든 상황에서 WSL2에 대칭되긴 어려울 수 있습니다. 간편하게 쓰려고 하나둘 살펴보면서 대칭되는 기능을 찾다 보니, 몇 가지 비교할 부분이 보였을 뿐입니다.

WSL2에서 도커 환경을 구축하기 위해 필요했던 다소 긴 설정 과정이 귀찮은 분들이 계신다면, 멀티패스가 새로운 대안이 될 수 있기를 바랍니다.