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

上篇文章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 for Mac 和 Docker for Windows 應用程序的舊 Mac 或 Windows 筆記本電腦或臺式機上工作,則需要 Docker Machine 來在本地“運行Docker”(即Docker Engine)。在 Mac 或 Windows box 中使用 Docker Toolbox 安裝程序安裝 Docker Machine 將爲 Docker Engine 配置一個本地的虛擬機,使你能夠連接它、並運行 docker 命令。

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

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 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 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常用命令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章