티스토리 뷰

 

macOS에서 docker를 사용하기 위해 그간 Docker Desktop을 사용해왔었는데 유료화 소식이 전해져 왔다. Docker Desktop은 개인은 무료, 기업은 직원이 250명 이상이거나 연매출이 대략 110억($10 million) 이상인 경우 유료 버전을 사용해야 한다 (아직 유예기간 있음). 

https://www.docker.com/blog/updating-product-subscriptions/

 

Docker is Updating and Extending Our Product Subscriptions - Docker Blog

Learn from Docker experts to simplify and advance your app development and management with Docker. Stay up to date on Docker events and new version announcements!

www.docker.com

 

Docker Desktop을 집에서 개인적인 용도로 사용하는 건 앞으로도 무료기 때문에 문제가 없지만 프로그램의 CPU 사용량 때문에 탈출하려고 마음 먹고 있었다. 배터리 사용량은 말할것도 없다. m1에서는 혹시 괜찮으려나? 아무튼, 이런 상황에도 Docker Desktop을 걷어내고 다른 프로그램으로 셋팅하는데 시간을 들일 명분이 부족했는데 이번 유료화 소식은 대탈출하기 위한 좋은 트리거가 됐다.

Docker Desktop의 화려한 CPU 사용량, 높은 배터리 사용은 덤이다

 

# 멀티패스(multipass)로 가자

Docker Desktop의 대체로 선택한 프로그램은 멀티패스다. 멀티패스는 맥 또는 윈도우(또는 리눅스) 머신에서 우분투 기반 도커 호스팅을 매우 빠르게 실행할 수 있게 만든다 (Microservices Up & Running에서 발췌). 즉, 우분투 가상 환경을 macOS 위에 돌리고 그 안에서 도커를 설치해서 필요한 컨테이너를 구축하는 방식이다.

멀티패스 홈페이지

 

설치를 진행하고 기존에 사용하던 redis container와 PostgreSQL 등을 이전해보기로 한다. 아래는 multipass를 설치하는 과정이다.

  • brew를 사용해서 설치
    • brew install --cask multipass
  • 직접 pkg를 다운로드하여서 설치해도 된다
    • 우선 macOS를 선택하고 pkg를 다운로드한다
    • 패키지를 설치한다
  • virtualbox 홈페이지로 가서 패키지를 다운로드하고 설치해준다.

 

  • 드라이버로 virtualbox를 세팅해준다. 개인 취향으로 hyperkit을 선택할 수도 있지만 이때는 네트워크 옵션을 사용할 수 없다. ( 혹시 hyperkit을 원한다면 brew install hyperkit으로 설치해주면 된다 ) 
    • sudo multipass set local.driver=virtualbox
  • 우분투 환경을 만들어준다. 아래 예시에서 dubuntu는 환경의 이름일 뿐이다. dubuntu는 글에서 계속 사용되는데 글을 읽으시는 분은 본인이 지정한 이름을 사용하면 된다.
    • multipass launch --name dubuntu
  • 가상 환경을 멈추려면 stop 옵션을 사용하면 된다. 반대로 실행하기 위해서는 start를 써주면 된다. 
    • multipass stop dubuntu
  • 가상환경 삭제는 delete 옵션을 사용한다. delete로 삭제하더라도 deleted 상태로 남아있고 recover 옵션을 통해 살릴 수 있는데 purge 옵션을 통해 완전히 삭제할 수 있다.
    • multipass delete dubuntu
      multipass purge
  • multipass 자체를 맥에서 삭제하려면 아래와 같이 brew uninstall을 활용하도록 한다
    • brew uninstall multipass

 

여기까지 진행했으면 설치의 모든 과정이 끝났다. multipass list 옵션을 통해 방금 설치한 dubuntu 환경을 확인할 수 있다. 이걸 보면 하이퍼바이저를 통한 가상 환경을 운영해본 사람이라면 대충 감이 올 것이다. 마치 vmware에서 이미지를 찍어내는 느낌이기 때문이다. 실제로 하이퍼바이저를 virtualbox로 설정했다면 virtualbox 애플리케이션을 통해 확인도 가능하다.

$ multipass list
Name                    State             IPv4             Image
dubuntu                 Running           172.17.0.1       Ubuntu 20.04 LTS

아래와 같이 dubuntu 가상 환경으로 진입이 가능하고 이어서 우분투 환경에 필요한 패키지를 설치할 수도 있다.

$ multipass exec dubuntu -- bash
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@dubuntu:~$

이러한 환경은 여러 개 생성할 수 있는데 기본 환경을 지정해서 사용하도록 하자. 아래는 방금 만든 dubuntu를 기본 환경으로 설정하는 예시이다. 우선 exit를 통해 가상 환경에 빠져나와서 아래 내용을 실행해보자. 기본 컨테이너로 지정되면 multipass shell 명령을 통해 바로 가상 환경으로 진입이 가능해진다.

$ multipass set client.primary-name=dubuntu
$ multipass shell
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-81-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Mon Sep  6 09:13:01 KST 2021

  System load:  0.01              Processes:               107
  Usage of /:   27.4% of 4.67GB   Users logged in:         0
  Memory usage: 18%               IPv4 address for enp0s2: 192.168.64.2
  Swap usage:   0%


1 update can be applied immediately.
To see these additional updates run: apt list --upgradable


The list of available updates is more than a week old.
To check for new updates run: sudo apt update

Last login: Mon Sep  6 09:11:35 2021 from 192.168.64.1
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@dubuntu:~$

 

아래와 같이 환경에 들어가서 도커를 설치해준다. 

# 여기 모든 커맨드는 duntuntu 컨테이너 안에서 입력되어야 한다. 복사&붙여넣기 편의를 위해 터미널 정보는 제거했다.
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install build-essential -y
sudo snap install docker
echo 'export PATH=/snap/bin:$PATH' >> ~/.bashrc
source ~/.bashrc 
sudo groupadd docker
sudo usermod -aG docker $USER

도커 그룹 권한 부여하는 과정이 있었으므로 변경 사항이 적용되도록 재시작을 해준다. 위에서 기본 환경을 dubuntu로 잡아줬기 때문에 아래 명령어 입력 시 dubuntu가 재시작된다.

$ multipass restart

 

이제 기본적인 설정이 마무리되었고 redis를 설치해서 사용해보도록 하자.

ubuntu@dubuntu:~$ docker run --name local-redis -p 6379:6379 -d redis
812b7d13c5214056906558827e4e5e3d2a36e01840540b46f1ee98473e605290
ubuntu@dubuntu:~$

위에 포트 포워딩까지 설정해준 이유는 dubuntu 자체가 별도의 네트워크로 운영되기 때문에 host(MacOS)에서 접근하려면 외부로 포트를 열어줘야 하기 때문이다. virtualbox에 네트워크에도 아래와 같이 포트 포워딩을 설정해준다. 맥 터미널에서 입력해주면 된다. 하나씩 살펴보면 위에서 생성한 dubuntu에 대해서 nat를 세팅하는데 구분할 수 있는 이름은 'redis', 그리고 6379로 들어오는걸 6379로 내보내겠다는 의미다. 뒤쪽 6379 포트가 호스트를 나타내고, 앞쪽 6379가 가상 머신 안에 있는 포트를 나타낸다.

$ sudo VBoxManage controlvm "dubuntu" natpf1 "redis,tcp,,6379,,6379"

 

여기까지 따라왔다면 host(MacOS)에서 방금 설치된 redis에 접근해보도록 하자. 여기서 redis-cli는 설치되어 있다고 가정한다. 

$ redis-cli ping
PONG

 

다음은 Postgresql 포트도 포워딩 설정해준다.

$ sudo VBoxManage controlvm "dubuntu" natpf1 "postgres,tcp,,5432,,5432"

그리고 dubuntu 환경에서 postgres를 설치하면 된다.

ubuntu@dubuntu:~$ docker run --name local-postgresql -e POSTGRES_HOST_AUTH_METHOD=trust -p 5432:5432 -d postgres

 

 

# 마무리

자, 여기까지 multipass의 설치부터 기본적인 환경 세팅, 운영까지 살펴봤다. 기존에 호스트에서 컨테이너를 바라보던 프로그램은 아무것도 바꿀 필요가 없다. 컨테이너를 호스팅 하는 주체만 docker desktop에서 multipass로 변경됐을 뿐이다. docker desktop의 경우 클릭 클릭 몇 번이면 세팅이 돼서 multipass가 뭔가 해야 할게 많은 것처럼 느껴지지만 설치하는 고통만 잠깐 있을 뿐 그 외에는 아주 무난하다. 가상 환경에 접속해서 필요한 도커 컨테이너를 설치하는 등은 이미 여러 개발자에게 아주 친숙한 부분이니까 말이다.

사실 여기 글에서는 최초 설치가 어려움 없이 한방에 잘 풀린 것 같지만 사실 그렇지 않다. multipass의 하이퍼바이저를 virtualbox로 설정하려면 VirtualBox가 기본적으로 설치되어 있어야 하며, hyperkit을 사용할 때 /var/run/multipass_socket의 권한 문제도 맞닥뜨렸다. 하이퍼바이저를 교체하면서 사용해보니 또 재밌는 현상들이 나타난다. 아무튼, 여기 글은 온전히 자연스러운 플로우로만 설명하다 보니 많이 누락되었지만 혹시 이 글을 참고해서 환경을 세팅하는데 어려움이 있다면 댓글로 문의하시기 바란다. 필자는 누군가의 문제를 같이 푸는 걸 즐기는 사람이다 :) 

댓글
  • 프로필사진 비밀댓글입니다 2021.09.07 18:24
  • 프로필사진 비밀댓글입니다 2021.09.08 08:07
  • 프로필사진 Terry multipass에 대해 열심히 글을 쓰셨습니다만..딱히 vagrant에 비해서는 메리트가 없어보이네요..
    일단 multipass는 ubuntu os만 된다는 것이 문제이고..
    이렇게 multipass를 통해 ubuntu를 설치하더라도 docker는 별도로 multipass 안에 들어가서 설치해야 하고..
    그럴바엔 여러 os 지원하고 프로그래밍적으로 각종 프로그램 설치가 가능한 vagrant가 더 메리트가 있다고 생각합니다..
    2021.09.08 01:12
  • 프로필사진 BlogIcon Jaeyeon Baek 결국 여기서 vagrant, multipass 이런 소프트웨어는 가상머신 안에서 docker를 돌려주기 위한 수단일 뿐입니다. vagrant도 좋은 선택지가 될 것 같습니다. 의견 감사합니다 :) 2021.09.08 08:06 신고
  • 프로필사진 후잉 좋은 자료 감사합니다 윗분 말씀대로 하는 것도 좋겠지만 저는 간단하게 명령어 한 줄로 빨리 가상환경을 구축할 수 있다는 점에서 멀티패스가 더 좋아 보입니다(우분투만 사용합니다) 베이그런트도 배우면 좋겠지만 아직 사용하지 않는 관점에서 보면 뭔가 복잡해보였습니다 2021.10.09 00:41
  • 프로필사진 BlogIcon Jaeyeon Baek 답변 감사합니다 :) 2021.10.10 21:47 신고
댓글쓰기 폼