上篇文章Docker(四):Docker 三劍客之 Docker Compose 介紹了 Docker Compose,這篇文章咱們來了解 Docker Machine 。html
Docker Machine 是 Docker 官方編排(Orchestration)項目之一,負責在多種平臺上快速安裝 Docker 環境。linux
Docker Machine 是一個工具,它容許你在虛擬宿主機上安裝 Docker Engine ,並使用 docker-machine 命令管理這些宿主機。你可使用 Machine 在你本地的 Mac 或 Windows box、公司網絡、數據中心、或像 AWS 或 Digital Ocean 這樣的雲提供商上建立 Docker 宿主機。git
使用 docker-machine 命令,你能夠啓動、審查、中止和從新啓動託管的宿主機、升級 Docker 客戶端和守護程序、並配置 Docker 客戶端與你的宿主機通訊。github
Docker Machine 使你可以在各類 Linux 上配置多個遠程 Docker 宿主機。
此外,Machine 容許你在較早的 Mac 或 Windows 系統上運行 Docker,如上一主題所述。
Docker Machine 有這兩個普遍的用例。docker
若是你主要在不符合新的 Docker for Mac 和 Docker for Windows 應用程序的舊 Mac 或 Windows 筆記本電腦或臺式機上工做,則須要 Docker Machine 來在本地「運行Docker」(即Docker Engine)。在 Mac 或 Windows box 中使用 Docker Toolbox 安裝程序安裝 Docker Machine 將爲 Docker Engine 配置一個本地的虛擬機,使你可以鏈接它、並運行 docker 命令。shell
Docker Engine Linux 系統上原生地運行。若是你有一個 Linux 做爲你的主系統,而且想要運行 docker 命令,全部你須要作的就是下載並安裝 Docker Engine 。然而,若是你想要在網絡上、雲中甚至本地配置多個 Docker 宿主機有一個有效的方式,你須要 Docker Machine。服務器
不管你的主系統是 Mac、Windows 仍是 Linux,你均可以在其上安裝 Docker Machine,並使用 docker-machine 命令來配置和管理大量的 Docker 宿主機。它會自動建立宿主機、在其上安裝 Docker Engine 、而後配置 docker 客戶端。每一個被管理的宿主機(「machine」)是 Docker 宿主機和配置好的客戶端的結合。網絡
當人們說「Docker」時,他們一般是指 Docker Engine,它是一個客戶端 - 服務器應用程序,由 Docker 守護進程、一個REST API指定與守護進程交互的接口、和一個命令行接口(CLI)與守護進程通訊(經過封裝REST API)。Docker Engine 從 CLI 中接受docker 命令,例如 docker run <image>、docker ps 來列出正在運行的容器、docker images 來列出鏡像,等等。ssh
Docker Machine 是一個用於配置和管理你的宿主機(上面具備 Docker Engine 的主機)的工具。一般,你在你的本地系統上安裝 Docker Machine。Docker Machine有本身的命令行客戶端 docker-machine 和 Docker Engine 客戶端 docker。你可使用 Machine 在一個或多個虛擬系統上安裝 Docker Engine。curl
這些虛擬系統能夠是本地的(就像你在 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
查看是否存在可用的主機
$ 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 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 最主要有兩個做用:
virtualbox 安裝很麻煩,我使用的虛擬機和雲主機來作實驗均沒有安裝成功,最後使用的是 Docker 官方提供的 Windows 安裝包來完成的 virtualbox 相關操做。附 virtualbox 官網:https://www.virtualbox.org/wiki/Downloads