원문 링크: docker document (URL: https://docs.docker.com/machine/overview/)

DOCKER MACHINE OVERVIEW

Docker Machine 을 사용하면 다음을 수행할 수 있다:

  • MAC 또는 Windows 에서 Docker 설치 및 실행
  • 여러 원격 Docker 호스트 프로비저닝 및 관리
  • 스웜 (Docker Swarm) 클러스터 제공

Docker Machine 은 사용자의 머신이 아닌 클라우드 컴퓨팅 VM 을 비롯한 원격지의 서버에 Docker Engine 을 설치할 수 있도록 하고 명령어를 통해 존재하지 않는 머신을 새로 만들어서 설치해 주는 도구이다.

DOCKER MACHINE

Not In My BackYard, But on the Cloud!

1. What is Docker Machine?

가상 호스트에 Docker Engine 을 설치하고 docker-mashine 명령으로 호스트를 관리할 수 있는 도구이다. 이것을 사용하여 로컬 호스트 (MAC, Windows), 회사 네트워크, 데이터 센터 또는 클라우드 공급자 (Azure, AWS 또는 DigitalOcean 등) 에서 Docker 호스트를 생성할 수 있다.

docker-machine 명령을 사용하면 다음과 같은 일을 할 수 있다:

  • 호스트 실행 (start), 검사 (inspect), 중지 (stop), 재실행 (restart)
  • Docker Client 및 Daemon 업그레이드
  • 호스트와 통신할 수 있도록 Docker Client 구성

Machine CLI 를 실행중인 호스트에서 docker 명령을 직접 실행할 수 있다. 예를들어 docker-machine env default 를 실행하여 ‘default’ 호스트를 가리키게 하고 화면에 보이는 지시를 따라 env 설정을 완료한 다음 docker psdocker run hello-world 등을 실행한다.

Docker v1.12 부터 MACWindows 의 앱에 ‘Docker Compose’ 및 ‘Docker Machine’ 이 포함되어 설치 가능하다.

2. Why should I use it?

Docker Machine 을 사용하면 다양한 Linux 버전에서 여러 원격 Docker 호스트를 프로비저닝 할 수 있다. (MAC 또는 Windows 시스템에서 Docker 를 실행할 수 있다.)

Docker Machine 에는 두가지 사용 사례가 있다:

  • 구형 데스크탑이 있고 MAC 또는 Windows 에서 Docker 를 실행

MAC 또는 Windows 기반 시스템에서 Docker Engine 을 로컬로 실행하기 위해 Docker Machine 이 필요하다. Docker Toolbox 를 사용하여 Docker Machine 을 설치하면 Docker Engine 을 사용하여 로컬 가상 머신을 프로비저닝하고 연결하고 docker 명령을 실행할 수 있다.

  • 원격 시스템에서 Docker 호스트를 프로비저닝

Docker Engine 은 기본적으로 Linux 시스템에서 실행된다. Docker Engine 을 다운로드하고 설치만 하면 docker 명령을 실행할 수 있다. 그러나 네크워크, 클라우드 또는 로컬의 여러 Docker 호스트를 효율적으로 프로비저닝 하려면 Docker Macnine 이 필요하다.

‘Docker Machine’ 을 설치하면 기본 시스템의 OS (MAC, Windows, Linux) 에 구애받지 않고 docker-machine 명령을 사용하여 많은 Docker 호스트를 프로비저닝하고 관리할 수 있다. 자동으로 호스트를 생성하고 Docker Engine 을 설치한 다음 docker client 를 구성한다. 각 관리 호스트 (“machine”) 는 Docker 호스트에 구성된 클라이언트의 조합이다.

3. What’s the differece between Docker Engine and Docker Machine?

일반적으로 “Docker” 라고 함은 Docker Engine, Docker Daemon 그리고 Daemon 과 상호 작용을 위한 인터페이스를 지정하는 REST API 및 Daemon 과 통신하는 CLI 클라이언트로 구성 (REST API 를 사용) 된다.

Docker Engine 은 CLI 에서 docker run <image>, docker ps, docker image ls 와 같이 docker 명령을 수행한다.

Docker Machine 은 Dockerized 호스트 (Docker Engine 이 있는 호스트) 를 프로비저닝하고 관리하기 위한 도구이다. 로컬 시스템에 Docker Machine 을 설치하면 되는데 Docker Machine 은 자체 CLI 인 docker-machine 과 Docker Engine 클라이언트 인 docker 가 있다.

Machine 을 사용하여 하나 이상의 가상 시스템에 Docker Engine 을 설치할 수 있다. 가상 시스템은 로컬 (MAC 또는 Windows 에서 Machine 을 사용하여 Docker Engine 설치) 또는 원격 (클라우드 제공자의 Machine 을 사용하여 Dockerized 호스트를 프로비저닝) 일 수 있다.

Dockerlized 호스트 자체는 관리되는 “Machine” 이다.

4. Install Docker Machine

다음과 같은 순서로 Docker Machine 을 설치한다. (Linux 환경 가정)

다른 OS 의 경우 다음 링크 참조 (URL: https://docs.docker.com/machine/install-machine/)

1) Docker Install

2) PATH 설정

$ 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


  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617  100   617    0     0   1465      0 --:--:-- --:--:-- --:--:--  1462
100 26.8M  100 26.8M    0     0  2225k      0  0:00:12  0:00:12 --:--:-- 1654k

Docker Machine 의 경우 Github 에서 배포하고 있기 때문에 curl 명령을 사용하여 다운로드 한다.

Docker Machine 은 Docker Engine 과 같이 시스템 권한으로 동작하는 서비스가 아니다. 그래서 혼자만 사용하는 경우 시스템 경로 (/usr, /usr/local, … ) 에 설치할 이유는 없다. 하지만 가능하면 공식 문서에 소개된 것 처럼 /usr/local 에 설치하도록 하자.

Docker github 페이지 를 참조하여도 된다. (URL: https://github.com/docker/machine/releases)

3) Docker Machine 동작 확인

$ docker-machine version
docker-machine version 0.16.0, build 702c267f

4-1. Install bash completion scripts

Machine repository 는 다음과 같은 기능을 추가하는 bash 스크립트를 제공한다:

  • command completion
  • 쉘 프롬프트에 동작중인 머신을 표시
  • docker-machine use 명령을 통한 동작 머신 전환

버전을 확인하고 스크립트를 /etc/bash_completion.d 또는 /usr/local/etc/bash_completion.d 에 저장한다.

파일명을 docker-machine-prompt.bash 으로 하고 위치는 /etc/bash_completion.d 으로 한다.

base=https://raw.githubusercontent.com/docker/machine/v0.16.0
for i in docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash
do
  sudo wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d
done

bash 터미널에서 source /etc/bash_completion.d/docker-machine-prompt.bash 를 실행하여 이전에 다운로드 한 docker-machine-prompt.bash 파일을 찾을 수 있는 위치를 설정한다.

docker-machine 쉘 프롬프트를 활성화하려면~ / .bashrcPS1 설정에$ (__ docker_machine_ps1)을 추가하여야 한다.

PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '

위 내용은 github 에 script 가 제공되고 있으니 활용하여도 된다. (URL: https://github.com/docker/machine/tree/master/contrib/completion/bash)

script 를 사용하여 설치가 끝나면 bash 를 적용하기 위해서 쉘을 다시 열어야 한다.

$ docker-machine <TAB>
active            env               ip                mount             restart           ssh               stop              use
config            help              kill              provision         rm                start             upgrade           version
create            inspect           ls                regenerate-certs  scp               status            url

docker-machine 명령어 뒤에 탭 (TAB) 을 해보면 다음으로 올 수 있는 보조명령, 옵션, 값 등이 보여진다.

4-2. How to uninstall Docker Machine

Docker Machine 을 제거하려면 다음을 수행한다:

  • 작성된 Machine 들을 선택하여 제거한다.
    • 각 Machine 을 개별적으로 제거하려면: docker-machine rm <machine-name>
    • 모든 Machine 을 제거하려면: docker-machine rm -f $(docker-machine ls -q) (Windows 의 경우 -force 를 사용해야할 수 있음)
    • 기존 시스템을 MAC 또는 Windows 용 환경으로 저장하고 마이그레이션 하는 경우가 있으므로 시스템 제거는 선택적
  • 실행파일을 제거: rm $(which docker-machine)

Note: docker-machine 에 의해 생성한 각 가상 머신과 관련된 config.json, 인증서 및 기타 데이터는 MAC 또는 Linux 의 ~/.docker/machine/machines/ 에 위치하며 Windows 는 ~\.docker\machine\machines\ 에 위치한다. 이러한 파일은 로컬 또는 원격 서버에 관계없이 Docker CLI 에 대한 정보에만 영향을 주기 때문에 해당 파일을 직접 편집하거나 제거하지 않는 것이 좋다.