ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 도커 머신을 활용해 로컬 VM에 프로비저닝 해보자.
    개발일지/docker 2020. 6. 6. 17:48

    안녕하세요 개발하는 남자 개남입니다.

    오늘은 도커 머신에 대해 알아보고 머신 설치와 활용에 대해 알아보려고 합니다.

     

    우선 도커 머신(docker-machine)이 무엇인지 도커 공식 문서를 확인해 보겠습니다.

    Docker Machine enables you to provision multiple remote Docker hosts on various flavors of Linux.

    번역해보면, 원격의 여러 대의 서버에 도커 node 들을 손쉽게 관리하고 프로비저닝 가능한 툴입니다.

    즉, 제가 이해한 바로 설명하자면 도커 설치 없이 원격 서버나 로컬 VM 등에 도커를 활용할 수 있다는 의미입니다.

     

    도커를 설치해서 직접적으로 활용해도 되고 도커 머신(docker-machine)을 통해 도커를 제어해도 되는데 

    그렇다면 도커 머신(docker-machine)은 왜 사용하는 것일까?

     

    도커 머신을 사용하는 이유?

    공식문서에서는 2가지 이유에서 사용할 수 있다고 말합니다.

    1. 로컬 PC 가 도커를 활용할 수 없는 오래된 PC 일 경우. 혹은 새로운 버전의 도커를 돌릴 환경이 아닐 경우.

    2. 원격 시스템에서 Docker 호스트를 프로비저닝 하길 원할 경우.

    개인적인 입장에서는 1번보다 2번을 목적으로 도커 머신을 사용하는 것 같다고 생각합니다.

     

    그렇다면 오늘 알아볼 것은 도커 머신 설치와 1번의 경우를 알아보고 다음번에는 2번에 경우를 알아보도록 하겠습니다.

     

     

    도커 머신 설치.

    window 환경에서 설치 방법

    $ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
      mkdir -p "$HOME/bin" &&
      curl -L $base/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" &&
      chmod +x "$HOME/bin/docker-machine.exe"

    리눅스 환경에서 설치 방법

    $ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
      curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
      sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
      chmod +x /usr/local/bin/docker-machine

    mac 환경에서 설치 방법

    $ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
      curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&
      chmod +x /usr/local/bin/docker-machine

    명령어 한 줄이면 설치가 완료됩니다.

    주의) 위 명령은 chmod와 같은 Linux 명령을 지원하는 Git BASH와 같은 터미널 에뮬레이터에서만 동작합니다.

     

     

    자, 이제 1번의 경우를 실습해 보도록 하겠습니다.

     

    1번을 테스트하기 위해서, PC에 VirtualBox 가 설치가 되어야 있어야 합니다.

    virtualbox 설치는 링크 클릭하여 설치해줍니다.

     

    설치가 완료되었다면 

    $ docker-machine create --driver virtualbox default

    위 명령을 통해 도커가 설치된 가상의 서버를 만듭니다.

    만약) error 메시지로 Hyper-V 가 활성화되어있다는 메시지가 뜬다면 --virtualbox-no-vtx-check  < 옵션을 추가해서 pass 시켜줍니다.

    위와 같이 설치 가 진행이 됩니다.

     

    그럼 오라클 vm console에 자동으로 리눅스가 설치된 것을 볼수 있습니다.

     

    이제 ls 명령으로 머신이 설치 된 것을 확인할 차례입니다.

    $ docker-machine ls 
     NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER   ERRORS 
     default   -        virtualbox   Running   tcp://192.168.99.xxx:2376           v19.03.5

    정상적으로 ip 도 할당받고 서버가 running 상태라는 것을 확인할 수 있으며

    제 PC에 도커가 설치되어있는 관계로 window docker를 종료시키고 로컬 환경에 도커 명령어를 돌려보았습니다.

    그렇다면 도커가 동작중이지 않는다는 에러 메시지가 뜰 것입니다.

    이제 도머 머신을 통해 설치된 도커 VM에 접속하여 도커를 실행해 보도록 하겠습니다.

     

    여기서 접속하는 방법이 두 가지가 있습니다.

    1번째 방법 ssh 명령으로 직접 접속하여 도커를 활용하는 방법

    2번째 방법 docker-machine의 환경 값을 변경하여 접속하지 않고도 vm의 도커를 제어하는 방법

     

    여기서는 2번째 방법을 활용해서 제어해보도록 하겠습니다.

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

    env <머신 이름>을 실행하면 환경 변수 값들이 출력됩니다. 이를 활용하여 eval 명령어를 통해 도커 머신의 타깃을 default 머신으로 변경하여 도커를 실행할 수 있도록 하겠습니다.

    $ eval "$(docker-machine env default)"

    위와 같이 실행하면 아무런 변화가 없는 것처럼 보이지만

    $ docker-machine ls 
     NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER   ERRORS 
     default   *        virtualbox   Running   tcp://192.168.99.xxx:2376           v19.03.5

    ls 명령어로 확인하면 default 머신이 active 된 것을 확인할 수 있습니다.

     

    이제 docker ps를 실행해 보겠습니다.

    로컬 PC에 도커가 돌지 않고 있는 상황이지만 docker 명령을 사용할 수 있게 되었습니다. 

    즉, 명령어를 내리는 위치는 내 로컬 PC 지만 도커가 움직이는 곳은 default VM 이 되는 것입니다.

     

    간단하게 nginx 서버를 실행해서 접속해보도록 하겠습니다.

    $ docker run -d -p 8000:80 nginx
    
    Unable to find image 'nginx:latest' locally 
    latest: Pulling from library/nginx 
    afb6ec6fdc1c: Pulling fs layer 
    b90c53a0b692: Pulling fs layer 
    11fa52a0fdc0: Pulling fs layer 
    11fa52a0fdc0: Verifying Checksum 
    11fa52a0fdc0: Download complete 
    b90c53a0b692: Verifying Checksum 
    b90c53a0b692: Download complete 
    afb6ec6fdc1c: Verifying Checksum 
    afb6ec6fdc1c: Download complete 
    afb6ec6fdc1c: Pull complete 
    b90c53a0b692: Pull complete 
    11fa52a0fdc0: Pull complete 
    Digest: sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097 
    Status: Downloaded newer image for nginx:latest 
    44d71ca2149d496ce3c050f4c436d3537be846e6c7a11c102619f92ea27425ba

    이미지 다운로드하고 정상적으로 실행됐습니다.

     

    이제 웹으로 접속을 해볼 텐데요 localhost:8000으로 접속하면 될까요?

    아닙니다. 헷갈릴 수 있지만 docker 명령은 local PC에서 내리지만 docker-machine 이 default VM에 명령을 던지기 때문에 VM IP로 접속해야 합니다.

    192.168.99.100:8080 <으로 접속해보도록 하겠습니다.

    자 이제 접속이 정상적으로 됨을 확인할 수 있습니다.

     

    여기까지 도커 머신(docker-machine)을 사용하는 이유 첫 번째에 대해서 알아보았습니다.

    다음번에는 그 2번째 이유인 원격 서버에 프로비저닝을 하는 방법에 대해서 정리하는 시간을 가져 보도록 하겠습니다.

     

    댓글

Designed by Tistory.