Programming/OS, Program, Framework Tip

AMD 해킨토시에서 docker-machine으로 Docker 사용하기

awesometic 2021. 3. 25. 22:37
반응형

Docker on VirtualBox

AMD 해킨토시는 기본적으로 Apple Hypervisor 가 지원되지 않습니다. Apple Hypervisor는 macOS 위에서 가상 머신을 좀 더 용이하게 지원해주기 위한 하나의 레이어예요. 말하자면, 프로그램을 개발할 때 가상화 기술을 쓰고 싶은데 시스템 함수로 커널과 직접 통신하며 짜기가 너무 어려우니 애플에서 가상화는 이걸 써라 하고 제공해주는 느낌입니다. 보통 API들이 다 그렇죠..

아니, 오랜만에 글을 써서 말이 길어지네요. 어쨋든 AMD CPU의 SVM의 정체를 반평생 인텔 CPU만 써왔던 애플에서는 전혀 알 수가 없습니다. 그래서 지원이 되지 않아요.

그래도 Docker를 포함한 가상머신을 사용할 수 있는 방법이 있습니다.  VirtualBox는 자체 가상화 엔진을 사용하거든요.

docker-machine

Docker에선 공식적으로 docker-machine이라고 해서, 다수의 원격지 서버 안의 Docker를 쉽게 제어할 수 있도록 도구를 제공해줍니다. 해석이 모호한 분들을 위해, 영어로는 이렇게 쓰여 있습니다.

Whether your primary system is Mac, Windows, or Linux, you can install Docker Machine on it and use docker-machine commands to provision and manage large numbers of Docker hosts. It automatically creates hosts, installs Docker Engine on them, then configures the docker clients. Each managed host (“machine”) is the combination of a Docker host and a configured client.

그래서 사실은 AMD 해킨토시에서 어떻게 돌리기 위한 그런 건 아닙니다. 다만 용도를 변경해서 사용해보자면, docker-machine으로 Docker 가상머신을 생성하는 건 docker-machine을 사용 중인 로컬 PC에도 가능하므로, 엔진을 VirtualBox로 지정하고 로컬에 만들어 보자는 것입니다.

그래서 어떻게?

일단 macOS용 Docker를 먼저 설치합니다. Docker 앱 자체를 사용할 순 없어도 이 앱 안에 필요한 도구들이 포함되어 있기 때문입니다.

설치가 완료되면 Terminal을 열어 아래 명령어들을 입력합니다.

ln -s "/Applications/Docker.app/Contents/Resources/bin/com.docker.cli" /usr/local/bin/com.docker.cli
ln -s "/Applications/Docker.app/Contents/Resources/bin/docker" /usr/local/bin/docker
ln -s "/Applications/Docker.app/Contents/Resources/bin/docker-compose" /usr/local/bin/docker-compose
ln -s "/Applications/Docker.app/Contents/Resources/bin/docker-credential-desktop" /usr/local/bin/docker-credential-desktop
ln -s "/Applications/Docker.app/Contents/Resources/bin/docker-credential-osxkeychain" /usr/local/bin/docker-credential-osxkeychain

다음, macOS에는 brew라는 훌륭한 패키지 관리 프로그램이 있습니다. brew를 설치합니다.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

 

그리고 brew를 통해 VirtualBox와 docker-machine을 설치합니다.

brew install virtualbox docker-machine

다 됐습니다. 마지막으로 docker-machine 명령어로 Machine 하나를 생성합니다.

docker-machine create \
--driver "virtualbox" \
--virtualbox-cpu-count "1" \
--virtualbox-disk-size "40000" \
--virtualbox-memory "8192" \
--virtualbox-no-vtx-check \
default

명령어를 간단하게 살펴보자면, 

  • --driver: 해당 Machine에서 사용할 가상화 엔진이라고 생각하시면 됩니다.
  • --virtualbox-cpu-count: 사용할 CPU 코어 수. 제 경우 1을 넘어가면 오히려 성능이 줄어들었습니다.
  • --virtualbox-disk-size: 사용할 저장소 공간. MB 단위이고, 예제에선 40GB를 할당하게 됩니다.
  • --virtualbox-memory: 사용할 램 용량. 예제에선 8GB를 할당했습니다.
  • --virtualbox-no-vtx-check: Machine이 시작할 때 PC에서 가상화를 지원하는지 체크합니다. 필요 없으므로 옵션을 넣어줬습니다.
  • default: Machine의 이름이 들어갈 부분입니다. 근데 로컬 PC에서 사용할 것이므로, 이름을 따로 지정해주지 않고 시스템에서 기본값으로 먼저 사용하도록 해줍니다.

인터넷만 연결되어 있다면 정상적으로 Machine이 생성될 것입니다.

설치 마지막 부분에 Docker 클라이언트에 어떻게 연결하는 지 알고 싶다면 "docker-machine env default" 를 입력하라고 합니다. 입력해보면 다음과 같이 나타납니다.

export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.103:2376"
export DOCKER_CERT_PATH="/Users/awesometic/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval $(docker-machine env default)

해당 Docker Machine에 연결하기 위한 환경 변수들을 알려주세요. 마지막 말처럼, 저 명령어를 입력해 Docker Machine에 연결할 수 있도록 합니다.

eval $(docker-machine env default)

"default" Docker Machine이 제대로 돌고 있는지 아래 명령어로 확인하실 수 있습니다.

~ ❯ docker-machine ls                                                  22:24:54
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER      ERRORS
default   *        virtualbox   Running   tcp://192.168.99.103:2376           v19.03.12

ACTIVE 상태이므로, 이제 "docker" 명령어를 사용할 수 있습니다.

참고

 

Docker and Docker Compose on AMD OSX Hackintosh via Docker Machine

Docker and Docker Compose on AMD OSX Hackintosh via Docker Machine - docker-compose-hackintosh.md

gist.github.com

 

Docker Machine overview

 

docs.docker.com

 

Get started with Docker Machine and a local VM

 

docs.docker.com

반응형