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 <image>
、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 -vdocker-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 http://github.com/boot2docker/boot2docker is v17.12.1-ce(default) Downloading C:Usershkrt-neo.dockermachinecacheoot2docker.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:Usershkrt-neo.dockermachinecacheoot2docker.iso to C:Usershkrt-neo.dockermachinemachinesdefaultoot2docker.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 ERRORSdefault * 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:Usershkrt-neo.dockermachinemachinesdefault" export DOCKER_MACHINE_NAME="default" export COMPOSE_CONVERT_WINDOWS_PATHS="true" # Run this command to configure your shell: # eval $("D:Program FilesDocker Toolboxdocker-machine.exe" env default)相當於配置了一個環境變數 default,後續根據提示在命令行輸入命令之後就可以操作 default 主機。
可以通過 SSH 登錄到主機
$ docker-machine ssh default
docker@default:~$ docker --versionDocker 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常用命令
推薦閱讀:
TAG:Docker | DockerMachine | 容器虛擬化 |