這篇文章我們來(lái)了解 Docker Machine 。
Docker Machine 介紹
Docker Machine 是 Docker 官方編排(Orchestration)項(xiàng)目之一,負(fù)責(zé)在多種平臺(tái)上快速安裝 Docker 環(huán)境。
Docker Machine 是一個(gè)工具,它允許你在虛擬宿主機(jī)上安裝 Docker Engine ,并使用 docker-machine 命令管理這些宿主機(jī)。你可以使用 Machine 在你本地的 Mac 或 Windows box、公司網(wǎng)絡(luò)、數(shù)據(jù)中心、或像 AWS 或 Digital Ocean 這樣的云提供商上創(chuàng)建 Docker 宿主機(jī)。
使用 docker-machine 命令,你可以啟動(dòng)、審查、停止和重新啟動(dòng)托管的宿主機(jī)、升級(jí) Docker 客戶(hù)端和守護(hù)程序、并配置 Docker 客戶(hù)端與你的宿主機(jī)通信。
為什么要使用它?
Docker Machine 使你能夠在各種 Linux 上配置多個(gè)遠(yuǎn)程 Docker 宿主機(jī)。 此外,Machine 允許你在較早的 Mac 或 Windows 系統(tǒng)上運(yùn)行 Docker,如上一主題所述。 Docker Machine 有這兩個(gè)廣泛的用例。
- 我有一個(gè)較舊的桌面系統(tǒng),并希望在 Mac 或 Windows 上運(yùn)行 Docker

如果你主要在不符合新的 Docker for Mac 和 Docker for Windows 應(yīng)用程序的舊 Mac 或 Windows 筆記本電腦或臺(tái)式機(jī)上工作,則需要 Docker Machine 來(lái)在本地“運(yùn)行Docker”(即Docker Engine)。在 Mac 或 Windows box 中使用 Docker Toolbox 安裝程序安裝 Docker Machine 將為 Docker Engine 配置一個(gè)本地的虛擬機(jī),使你能夠連接它、并運(yùn)行 docker 命令。
- 我想在遠(yuǎn)程系統(tǒng)上配置 Docker 宿主機(jī)

Docker Engine Linux 系統(tǒng)上原生地運(yùn)行。如果你有一個(gè) Linux 作為你的主系統(tǒng),并且想要運(yùn)行 docker 命令,所有你需要做的就是下載并安裝 Docker Engine 。然而,如果你想要在網(wǎng)絡(luò)上、云中甚至本地配置多個(gè) Docker 宿主機(jī)有一個(gè)有效的方式,你需要 Docker Machine。
無(wú)論你的主系統(tǒng)是 Mac、Windows 還是 Linux,你都可以在其上安裝 Docker Machine,并使用 docker-machine 命令來(lái)配置和管理大量的 Docker 宿主機(jī)。它會(huì)自動(dòng)創(chuàng)建宿主機(jī)、在其上安裝 Docker Engine 、然后配置 docker 客戶(hù)端。每個(gè)被管理的宿主機(jī)(“machine”)是 Docker 宿主機(jī)和配置好的客戶(hù)端的結(jié)合。
Docker Engine 和 Docker Machine 有什么區(qū)別?
當(dāng)人們說(shuō)“Docker”時(shí),他們通常是指 Docker Engine,它是一個(gè)客戶(hù)端 - 服務(wù)器應(yīng)用程序,由 Docker 守護(hù)進(jìn)程、一個(gè)REST API指定與守護(hù)進(jìn)程交互的接口、和一個(gè)命令行接口(CLI)與守護(hù)進(jìn)程通信(通過(guò)封裝REST API)。Docker Engine 從 CLI 中接受docker 命令,例如docker run <image>、docker ps 來(lái)列出正在運(yùn)行的容器、docker images來(lái)列出鏡像,等等。

Docker Machine 是一個(gè)用于配置和管理你的宿主機(jī)(上面具有 Docker Engine 的主機(jī))的工具。通常,你在你的本地系統(tǒng)上安裝 Docker Machine。Docker Machine有自己的命令行客戶(hù)端 docker-machine 和 Docker Engine 客戶(hù)端 docker。你可以使用 Machine 在一個(gè)或多個(gè)虛擬系統(tǒng)上安裝 Docker Engine。
這些虛擬系統(tǒng)可以是本地的(就像你在 Mac 或 Windows 上使用 Machine 在 VirtualBox 中安裝和運(yùn)行 Docker Engine 一樣)或遠(yuǎn)程的(就像你使用 Machine 在云提供商上 provision Dockerized 宿主機(jī)一樣)。Dockerized 宿主機(jī)本身可以認(rèn)為是,且有時(shí)就稱(chēng)為,被管理的“machines”。

安裝和使用
Docker Machine 安裝很簡(jiǎn)單
curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && \
install /tmp/docker-machine /usr/local/bin/docker-machine
#完成后,查看版本信息。
docker-machine -v
docker-machine version 0.14.0, build 89b8332
創(chuàng)建一個(gè) VirtualBox
查看是否存在可用的主機(jī)
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
創(chuàng)建一個(gè)主機(jī):
$ docker-machine create --driver virtualbox default
Running pre-create checks...
(default) Default Boot2Docker ISO is out-of-date, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v17.12.1-ce
(default) Downloading C:\Users\hkrt-neo\.docker\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v17.12.1-ce/boot2docker.iso...
(default) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(default) Copying C:\Users\hkrt-neo\.docker\machine\cache\boot2docker.iso to C:\Users\hkrt-neo\.docker\machine\machines\default\boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
(default) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
這個(gè)命令會(huì)下載 boot2docker,基于 boot2docker 創(chuàng)建一個(gè)虛擬主機(jī)。boot2docker 是一個(gè)輕量級(jí)的 linux 發(fā)行版,基于專(zhuān)門(mén)為運(yùn)行 docker 容器而設(shè)計(jì)的 Tiny Core Linux 系統(tǒng),完全從 RAM 運(yùn)行,45Mb左右,啟動(dòng)時(shí)間約5s。
再次查看服務(wù)列表
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.100:2376 v17.12.1-ce
發(fā)現(xiàn)已經(jīng)存在一個(gè)虛擬主機(jī)
創(chuàng)建主機(jī)成功后,可以通過(guò) env 命令來(lái)讓后續(xù)操作對(duì)象都是目標(biāo)主機(jī)。
$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="C:\Users\hkrt-neo\.docker\machine\machines\default"
export DOCKER_MACHINE_NAME="default"
export COMPOSE_CONVERT_WINDOWS_PATHS="true"
# Run this command to configure your shell:
# eval $("D:\Program Files\Docker Toolbox\docker-machine.exe" env default)
相當(dāng)于配置了一個(gè)環(huán)境變量 default,后續(xù)根據(jù)提示在命令行輸入命令之后就可以操作 default 主機(jī)。
可以通過(guò) SSH 登錄到主機(jī)
$ docker-machine ssh default
docker@default:~$ docker --version
Docker version 17.12.1-ce, build 7390fc6
連接到主機(jī)之后你就可以在其上使用 Docker 了,退出虛擬機(jī)使用命令:exit
Docker Machine 常用命令
//創(chuàng)建虛擬機(jī)
docker-machine create [OPTIONS] [arg...]
//移除虛擬機(jī)
docker-machine rm [OPTIONS] [arg...]
//登錄虛擬機(jī)
docker-machine ssh [arg...]
//docker客戶(hù)端配置環(huán)境變量
docker-machine env [OPTIONS] [arg...]
//檢查機(jī)子信息
docker-machine inspect
//查看虛擬機(jī)列表
docker-machine ls [OPTIONS] [arg...]
//查看虛擬機(jī)狀態(tài)
docker-machine status [arg...] //一個(gè)虛擬機(jī)名稱(chēng)
//啟動(dòng)虛擬機(jī)
docker-machine start [arg...] //一個(gè)或多個(gè)虛擬機(jī)名稱(chēng)
//停止虛擬機(jī)
docker-machine stop [arg...] //一個(gè)或多個(gè)虛擬機(jī)名稱(chēng)
//重啟虛擬機(jī)
docker-machine restart [arg...] //一個(gè)或多個(gè)虛擬機(jī)名稱(chēng)
更多參數(shù)請(qǐng)使用 docker-machine –help 命令查看。
總結(jié)
Docker Machine 最主要有兩個(gè)作用:
- 使用 Docker Machine 方便在不同的環(huán)境中使用 Docker ,比如:Win/Mac
- 使用 Docker Machine 方便在云環(huán)境下批量部署 Docker環(huán)境,比如:私有云,公有云批量安裝Docker環(huán)境
virtualbox 安裝很麻煩,我使用的虛擬機(jī)和云主機(jī)來(lái)做實(shí)驗(yàn)均沒(méi)有安裝成功,最后使用的是 Docker 官方提供的 Windows 安裝包來(lái)完成的 virtualbox 相關(guān)操作。附 virtualbox 官網(wǎng):https://www.virtualbox.org/wiki/Downloads