Docker Machine Overview
원문 링크: 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 ps
및 docker run hello-world
등을 실행한다.
Docker v1.12 부터 MAC 및 Windows 의 앱에 ‘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
쉘 프롬프트를 활성화하려면~ / .bashrc
의PS1
설정에$ (__ 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 용 환경으로 저장하고 마이그레이션 하는 경우가 있으므로 시스템 제거는 선택적
- 각 Machine 을 개별적으로 제거하려면:
- 실행파일을 제거:
rm $(which docker-machine)
Note:
docker-machine
에 의해 생성한 각 가상 머신과 관련된config.json
, 인증서 및 기타 데이터는 MAC 또는 Linux 의~/.docker/machine/machines/
에 위치하며 Windows 는~\.docker\machine\machines\
에 위치한다. 이러한 파일은 로컬 또는 원격 서버에 관계없이 Docker CLI 에 대한 정보에만 영향을 주기 때문에 해당 파일을 직접 편집하거나 제거하지 않는 것이 좋다.