[docker] docker-machine을 맥북프로에서 VMwareFusion 으로 실행하기 Computer Tip

가장 빨리 만나는 docker 등의 책에서 보면 docker-machine 의 언급이 없습니다.
올 4월까지도 베타버전의 docker-machine이 이제는 정식 버전이 된 듯 합니다.
암튼 위 책에서 특정 호스트에서 docker의 컨테이너로 개발하고 배포할 때
Vagrant 등을 이용하면 된다고 하였으나 이제는 그런 것 다  필요없이 docker-machine을
이용하면 되는군요.

우선 맥북프로 (16기가 메모리에 맥북프로의 SSD 정도는 되어야 여러 docker를 잘 돌려볼 수 있겠더군요)에서
docker 및 docker-machine을 설치하는 방법은 의외로 무척 간단했습니다.

터미널을 열어,

$ brew install docker
$ brew install docker-machine

으로 간단히 설치하였습니다.

docker-machine 은 다음과 같은 명령어 들이 있습니다.

Commands:
  active Print which machine is active
  config Print the connection config for machine
  create Create a machine
  env Display the commands to set up the environment for the Docker client
  inspect Inspect information about a machine
  ip Get the IP address of a machine
  kill Kill a machine
  ls List machines
  regenerate-certs Regenerate TLS Certificates for a machine
  restart Restart a machine
  rm Remove a machine
  ssh Log into or run a command on a machine with SSH.
  scp Copy files between machines
  start Start a machine
  status Get the status of a machine
  stop Stop a machine
  upgrade Upgrade a machine to the latest version of Docker
  url Get the URL of a machine
  help, h Shows a list of commands or help for one command

우선 생성을 위하여 create 명령을 이용해 봅니다.

$ docker-machine create --driver vmwarefusion osxdock --vmwarefusion-memory-size 2048
Creating SSH key...
Creating VM...
Starting osxdock...
Waiting for VM to come online...
To see how to connect Docker to this machine, run: docker-machine env osxdock

만약 VirtualBox 를 가상머신 제어기로 이용한다면 --driver vmwarefusion  대신 --driver virtualbox 라고 하면 됩니다.

다커머신으로 만들어진 가상머신의 목록을 살펴보려면 ls 명령을 이용합니다.

$ docker-machine ls
NAME      ACTIVE   DRIVER         STATE     URL                        SWARM
osxdock            vmwarefusion   Running   tcp://172.17.128.13:2376   

상태를 보면 Running 이지만 아직 active 한 상태는 아닙니다.

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

env 명령을 내려보면 위와 같이 결과가 나오는데
이런 환경변수를 등록하면 맥에서 내린 docker 명령 자체가 해당 다커머신으로 전달되어
그 머신 안에서 docker 명령을 내린 것과 동일한 결과를 얻습니다.

$ eval "$(docker-machine env osxdock)"
명령을 내리고,


$ docker-machine ls
NAME      ACTIVE   DRIVER         STATE     URL                        SWARM
osxdock   *        vmwarefusion   Running   tcp://172.17.128.13:2376   

확인해 보면 active 한 것을 알 수 있습니다.

$ docker-machine active
osxdock
위와 같이 active 한 것만 볼 수도 있습니다.

이제 docker 의 이미지 목록을 확인해 봅니다.

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

아직 이미지는 생성되지 않았습니다.

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
535020c3e8ad: Pull complete 
af340544ed62: Pull complete 
library/hello-world:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:02fee8c3220ba806531f606525eceb83f4feb654f62b207191b1c9209188dedd
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:

위와 같이 hello-world 라는 docker 이미지를 만들어 실행하고 

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hello-world         latest              af340544ed62        5 weeks ago         960 B

확인을 해 보면 다커 이미지가 있습니다.
(맥에서 생성한 docker 이미지는 실제로 해당 다커머신에 배포 됩니다)

이제는 

아주 간단하게 현재 다커 머신의 ip를 확인해 보기 위하여
$ docker-machine ip osxdock
172.17.128.13

명령을 통해서 해당 다커머신이 실행되고 있는 ip를 확인할 수 있습니다.

이제 다커 머신에 직접 ssh로 접속해 보겠습니다.
$ docker-machine ssh osxdock
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.8.2, build master : aba6192 - Thu Sep 10 20:58:17 UTC 2015
Docker version 1.8.2, build 0a8c2e3
docker@osxdock:~$

이쁜 위와 같은 boot2docker 이미지도 나오는군요. (동일 폰트 길리로 보면 됩니다)

docker@osxdock:~$ cat /etc/issue 
Core Linux

앗! Core OS가 알아서 다커 머신으로 설치되는 군요.

docker@osxdock:~$ ifconfig
docker0   Link encap:Ethernet  HWaddr 02:42:DA:54:AF:96  
          inet addr:172.18.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:daff:fe54:af96/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:76 (76.0 B)  TX bytes:258 (258.0 B)

eth0      Link encap:Ethernet  HWaddr 00:0C:29:91:78:BE  
          inet addr:172.17.128.13  Bcast:172.17.255.255  Mask:255.255.0.0
          inet6 addr: fe80::20c:29ff:fe91:78be/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1343 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1064 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:229582 (224.2 KiB)  TX bytes:160911 (157.1 KiB)

인터페이스를 확인해 보니 coreOS의 eth0이 바로 다커머신에서 확인한 그 ip 입니다.
docker0 라는 인터페이스는 그 안에 있는 다커 연동 용이 아닐까 추정해 보는데요...

다시 다커머신 안에서 
docker@osxdock:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
hello-world         latest              af340544ed62        5 weeks ago         960 B

음... 아까 맥에서 docker 명령으로 만들었던 것이 그대로 만들어 진 것이네요.

그 밖에 
$ docker-machine scp foo.txt osxdock:~/foo.txt
위와 같은 명령으로 맥에서 해당 다커머신으로 scp 로 파일을 복사할 수 있습니다.

이제 다커 머신을 종료시키려면,

$ docker-machine stop osxdock
Gracefully shutting down osxdock...
와 같이 stop 명령을 이용하면 됩니다.

또한 처음 기동시킬 때 eval로 active 시킨 것의 반대 개념으로

$ eval "$(docker-machine env -u)"
라고 해 줍니다.

마지막으로 다커 머신 자체를 삭제하려면

$ docker-machine rm osxdock
라고 하여 만든 것을 지울 수 있습니다.


다시 한번 응용해 보겠습니다.
$ alias dm='docker-machine' # 다 치기 귀찮아서...
$ dm create --driver vmwarefusion cos1
$ dm create --driver vmwarefusion cos2
$ dm create --driver vmwarefusion cos3

위 처럼 cos1, cos2, cos3 이라는 세 개의 VMWare Fusion 가상머신의 인스턴스를 만들었습니다.
그 위치는 ~/.docker/machine/machines 에 존재하는데 (VMWare Fusion UI 에는 보이지 않습니다)

그리고 cos1을 active 시키기 위해,

$ eval "$(dm env cos1)"
cmcMBPR:machines mcchae$ dm ls
NAME      ACTIVE   DRIVER         STATE     URL                        SWARM
cos1      *        vmwarefusion   Running   tcp://172.17.128.17:2376   
cos2               vmwarefusion   Running   tcp://172.17.128.18:2376   
cos3               vmwarefusion   Running   tcp://172.17.128.19:2376   
osxdock            vmwarefusion   Running   tcp://172.17.128.13:2376  

또는,

$ eval "$(dm env cos2)"
cmcMBPR:machines mcchae$ dm ls
NAME      ACTIVE   DRIVER         STATE     URL                        SWARM
cos1               vmwarefusion   Running   tcp://172.17.128.17:2376   
cos2      *        vmwarefusion   Running   tcp://172.17.128.18:2376   
cos3               vmwarefusion   Running   tcp://172.17.128.19:2376   
osxdock            vmwarefusion   Running   tcp://172.17.128.13:2376   

아하 결국 해당 어느 다커머신에게 다커 명령을 내리겠는가 하는 것이군요.

이제 디플로이 관련 부분은 이 다커머신을 활용하면 되겠습니다.
다음에는 이것을 이용하여 해당 다커를 돌려보면 되겠습니다.


어느 분께는 도움이 되셨기를...


덧글

댓글 입력 영역

구글애드텍스트