Docker(五):Docker 三劍客之 Docker Machine

純潔的微笑發表於2018-03-30

上篇文章Docker(四):Docker 三劍客之 Docker Compose介紹了 Docker Compose,這篇文章我們來了解 Docker Machine 。

Docker Machine 介紹

Docker Machine 是 Docker 官方編排(Orchestration)專案之一,負責在多種平臺上快速安裝 Docker 環境。

Docker Machine 是一個工具,它允許你在虛擬宿主機上安裝 Docker Engine ,並使用 docker-machine 命令管理這些宿主機。你可以使用 Machine 在你本地的 Mac 或 Windows box、公司網路、資料中心、或像 AWS 或 Digital Ocean 這樣的雲提供商上建立 Docker 宿主機。

使用 docker-machine 命令,你可以啟動、審查、停止和重新啟動託管的宿主機、升級 Docker 客戶端和守護程式、並配置 Docker 客戶端與你的宿主機通訊。

為什麼要使用它?

Docker Machine 使你能夠在各種 Linux 上配置多個遠端 Docker 宿主機。
此外,Machine 允許你在較早的 Mac 或 Windows 系統上執行 Docker,如上一主題所述。
Docker Machine 有這兩個廣泛的用例。

  • 我有一個較舊的桌面系統,並希望在 Mac 或 Windows 上執行 Docker

Docker(五):Docker 三劍客之 Docker Machine

如果你主要在不符合新的 Docker for Mac 和 Docker for Windows 應用程式的舊 Mac 或 Windows 膝上型電腦或桌上型電腦上工作,則需要 Docker Machine 來在本地“執行Docker”(即Docker Engine)。在 Mac 或 Windows box 中使用 Docker Toolbox 安裝程式安裝 Docker Machine 將為 Docker Engine 配置一個本地的虛擬機器,使你能夠連線它、並執行 docker 命令。

  • 我想在遠端系統上配置 Docker 宿主機

Docker(五):Docker 三劍客之 Docker Machine

Docker Engine Linux 系統上原生地執行。如果你有一個 Linux 作為你的主系統,並且想要執行 docker 命令,所有你需要做的就是下載並安裝 Docker Engine 。然而,如果你想要在網路上、雲中甚至本地配置多個 Docker 宿主機有一個有效的方式,你需要 Docker Machine。

無論你的主系統是 Mac、Windows 還是 Linux,你都可以在其上安裝 Docker Machine,並使用 docker-machine 命令來配置和管理大量的 Docker 宿主機。它會自動建立宿主機、在其上安裝 Docker Engine 、然後配置 docker 客戶端。每個被管理的宿主機(“machine”)是 Docker 宿主機和配置好的客戶端的結合。

Docker Engine 和 Docker Machine 有什麼區別?

當人們說“Docker”時,他們通常是指 Docker Engine,它是一個客戶端 - 伺服器應用程式,由 Docker 守護程式、一個REST API指定與守護程式互動的介面、和一個命令列介面(CLI)與守護程式通訊(通過封裝REST API)。Docker Engine 從 CLI 中接受docker 命令,例如 docker run 、docker ps 來列出正在執行的容器、docker images 來列出映象,等等。

Docker(五):Docker 三劍客之 Docker Machine

Docker Machine 是一個用於配置和管理你的宿主機(上面具有 Docker Engine 的主機)的工具。通常,你在你的本地系統上安裝 Docker Machine。Docker Machine有自己的命令列客戶端 docker-machine 和 Docker Engine 客戶端 docker。你可以使用 Machine 在一個或多個虛擬系統上安裝 Docker Engine。

這些虛擬系統可以是本地的(就像你在 Mac 或 Windows 上使用 Machine 在 VirtualBox 中安裝和執行 Docker Engine 一樣)或遠端的(就像你使用 Machine 在雲提供商上 provision Dockerized 宿主機一樣)。Dockerized 宿主機本身可以認為是,且有時就稱為,被管理的“machines”。

Docker(五):Docker 三劍客之 Docker Machine

安裝和使用

Docker Machine 安裝很簡單

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

建立一個 VirtualBox

檢視是否存在可用的主機

$  docker-machine ls
NAME   ACTIVE   DRIVER   STATE   URL   SWARM   DOCKER   ERRORS

建立一個主機:

$ 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...
...

這個命令會下載 boot2docker,基於 boot2docker 建立一個虛擬主機。boot2docker 是一個輕量級的 linux 發行版,基於專門為執行 docker 容器而設計的 Tiny Core Linux 系統,完全從 RAM 執行,45Mb左右,啟動時間約5s。

再次檢視服務列表

docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v17.12.1-ce

發現已經存在一個虛擬主機

建立主機成功後,可以通過 env 命令來讓後續操作物件都是目標主機。

$ 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)

相當於配置了一個環境變數 default,後續根據提示在命令列輸入命令之後就可以操作 default 主機。

可以通過 SSH 登入到主機

$ docker-machine ssh default

docker@default:~$ docker --version
Docker version 17.12.1-ce, build 7390fc6

連線到主機之後你就可以在其上使用 Docker 了,退出虛擬機器使用命令:exit

Docker Machine 常用命令

//建立虛擬機器
docker-machine create [OPTIONS] [arg...]

//移除虛擬機器
docker-machine rm [OPTIONS] [arg...]

//登入虛擬機器
docker-machine ssh [arg...]

//docker客戶端配置環境變數
docker-machine env [OPTIONS] [arg...]

//檢查機子資訊
docker-machine inspect

//檢視虛擬機器列表
docker-machine ls [OPTIONS] [arg...]

//檢視虛擬機器狀態
docker-machine status [arg...]  //一個虛擬機器名稱

//啟動虛擬機器
docker-machine start [arg...]  //一個或多個虛擬機器名稱

//停止虛擬機器
docker-machine stop [arg...]  //一個或多個虛擬機器名稱

//重啟虛擬機器
docker-machine restart [arg...]  //一個或多個虛擬機器名稱

更多引數請使用 docker-machine --help 命令檢視。

總結

Docker Machine 最主要有兩個作用:

  • 使用 Docker Machine 方便在不同的環境中使用 Docker ,比如:Win/Mac
  • 使用 Docker Machine 方便在雲環境下批量部署 Docker環境,比如:私有云,公有云批量安裝Docker環境

virtualbox 安裝很麻煩,我使用的虛擬機器和雲主機來做實驗均沒有安裝成功,最後使用的是 Docker 官方提供的 Windows 安裝包來完成的 virtualbox 相關操作。附 virtualbox 官網:https://www.virtualbox.org/wiki/Downloads

參考

Docker Machine Overview
docker-machine常用命令

相關文章