Docker Machine是Docker官方三劍客項目之一,負責使用Docker的第一步,在多種平臺上快速安裝Docker環境。
它支持多種平臺,讓用戶在很短時間內搭建一套Docker主機集群。
Machine項目是Docker官方的開源項目,負責實現對Docker主機本身進行管理。
Machine項目主要由GO編寫,用戶可以在本地任意指定被Machine管理的Docker主機,并對其進行操作。
Machine定位是“在本地或者云環境中創建Docker主機”
Docker Machine是一個工具,它允許你在虛擬宿主機上安裝Docker Engine,并使用docker-machine命令管理這些宿主機。
你可以使用Machine在你本地的Mac或Window box、公司網絡、數據中心、或像AWS這樣的云提供商上創建Docker宿主機。
使用docker-machine命令,你可以啟動、審查、停止和重新啟動托管的宿主機、升級Docker客戶端和守護進程、并配置Docker客戶端與你的宿主機通信。
Docker Machine使你能夠在各種Linux上配置多個遠程Docker宿主機。
此外,Machine允許你在較早的Mac或Windows系統上運行Docker。
如果你有一個Linux作為你的主系統,并且想要運行docker命令,你需要做的就是下載并且安裝Docker Engine。
然而,如果你想要在網絡上、云中甚至本地配置多個Docker宿主機,你需要Docker Machine。
無論你的主系統是Mac、Windows還是Linux,你都可以在其上安裝Docker Machine,并且用docker-machine命令來配置和管理大量的Docker宿主機。
它會自動創建宿主機、在其上安裝Docker Engine、然后配置docker客戶端。
每個被管理的宿主機('machine')是Docker宿主機和配置好的客戶端的結合。
Docker Engine是一個客戶端-服務器應用程序,由Docker守護進程、一個REST API指定與守護進程交互的接口、和一個命令行接口(CLI)與守護進程通信。
Docker Engine從CLI中接受docker命令,例如docker run,docker ps。
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"。
?
1.安裝
curl -L https://github.com/docker/machine/releases/download/v0.16.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine chmod +x /tmp/docker-machine sudo cp /tmp/docker-machine /usr/local/bin/docker-machine
?
2.使用
Docker Machine通過多種后端驅動來管理不同的資源,包括虛擬機、本地主機和云平臺。
通過-d選項可以選擇支持的驅動類型,下面主要講通過本地主機來配置Docker主機。
這種驅動適合主機操作系統的SSH服務已經安裝好,需要對其安裝docker引擎。
首先確保本地主機可以通過user賬號的key直接通過ssh連接到目標主機,這就需要提前復制公鑰文件,達到無密碼登錄。
配置之前:
[root@centos004 .ssh]# docker -bash: docker: command not found
可以發現目前并沒有安裝docker。
[root@centos003 .ssh]# docker-machine create -d generic --generic-ip-address=129.28.86.57 --generic-ssh-user=root test2 Running pre-create checks... Creating machine... (test2) No SSH key specified. Assuming an existing key at the default location. Waiting for machine to be running, this may take a few minutes... Detecting operating system of created instance... Waiting for SSH to be available... 等待ssh響應 Detecting the provisioner... Provisioning with centos... Copying certs to the local machine directory... 拷貝證書 Copying certs to the remote machine... Setting Docker configuration on the remote daemon... 配置daemon Checking connection to Docker... Docker is up and running! 啟動Docker To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env test2
從命令輸出上可以看出,Machine通過SSH連接到指定節點,并在上面安裝Docker引擎。
創建成功之后可以通過docker-machine ls命令查看注冊到本地管理列表中的DDocker主機。
[root@centos003 .ssh]# docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS test2 - generic Running tcp://129.28.86.57:2376 v18.09.0
此時再去對應的主機上查看是否安裝成功,可以通過版本號來驗證:
[root@test ~]# docker -v Docker version 18.09.0, build 4d60db4
可以通過inspect命令查看具體的主機信息。
?
3.Machine命令
命令格式:
docker-machine [OPTIONS] COMMAND [arg...]
如果想要查看每個命令的完整信息可以使用--help。
docker-machine COMMAND --help
OPTIONS選項列表:
? COMMAND選項列表:
?下面是具體的說明:
(1)active
Usage: docker-machine active [OPTIONS] [arg...]
(2)config
Usage: docker-machine config [OPTIONS] [arg...]
查看激活Docker主機的連接信息。
[root@centos003 .ssh]# docker-machine config test2 --tlsverify --tlscacert="/root/.docker/machine/machines/test2/ca.pem" --tlscert="/root/.docker/machine/machines/test2/cert.pem" --tlskey="/root/.docker/machine/machines/test2/key.pem" -H=tcp://129.28.86.57:2376
(3)create
Usage: docker-machine config [OPTIONS] [arg...]
創建一個Docker主機。
選項包括:
- --driver, -d "virtualbox"? 指定驅動類型
- --engine-install-url "https://get.docker.com"? 配置docker主機時的安裝URL
- --engine-opt [--engine-opt option --engine-opt option]? 以鍵值對格式指定所創建Docker引擎的參數
- --engine-insecure-registry [--engine-insecure-registry option --engine-insecure-registry option]? 以鍵值對格式指定所創建Docker引擎允許訪問的不支持認證的注冊倉庫服務
- --engine-registry-mirror [--engine-registry-mirror option --engine-registry-mirror option] 指定使用注冊倉庫鏡像
- --engine-label [--engine-label option --engine-label option]? 為所創建的Docker引擎添加標簽
- --engine-storage-driver? 存儲后端驅動類型
- --engine-env [--engine-env option --engine-env option]? 指定環境變量
- --swarm? 指定使用Swarm
- --swarm-addr? 指定地址發送廣播加入Swarm集群服務
- --swarm-discovery? Swarm集群的服務發現機制參數
- --swarm-host "tcp://0.0.0.0:3376"? 指定地址將監聽Swarm master節點請求
- --swarm-image "swarm:latest"使用Swarm時候采用的鏡像
- --swarm-master? 配置機器作為Swarm集群的master節點
- --swarm-opt [--swarm-opt option --swarm-opt option]? 任意傳遞給Swarm的參數
- --swarm-strategy "spread"? Swarm默認調度策略
(4)env
Usage: docker-machine env [OPTIONS] [arg...]
顯式連接到某個主機需要的環境變量。
[root@centos003 .ssh]# docker-machine env test2 export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://129.28.86.57:2376" export DOCKER_CERT_PATH="/root/.docker/machine/machines/test2" export DOCKER_MACHINE_NAME="test2" # Run this command to configure your shell: # eval $(docker-machine env test2)
(5)inspect
Usage: docker-machine inspect [OPTIONS] [arg...]
[root@centos003 .ssh]# docker-machine inspect test2 {"ConfigVersion": 3,"Driver": {"IPAddress": "129.28.86.57","MachineName": "test2","SSHUser": "root","SSHPort": 22,"SSHKeyPath": "","StorePath": "/root/.docker/machine","SwarmMaster": false,"SwarmHost": "","SwarmDiscovery": "","EnginePort": 2376,"SSHKey": ""},"DriverName": "generic","HostOptions": {"Driver": "","Memory": 0,"Disk": 0,"EngineOptions": {"ArbitraryFlags": [],"Dns": null,"GraphDir": "","Env": [],"Ipv6": false,"InsecureRegistry": [],"Labels": [],"LogLevel": "","StorageDriver": "","SelinuxEnabled": false,"TlsVerify": true,"RegistryMirror": [],"InstallURL": "https://get.docker.com"},"SwarmOptions": {"IsSwarm": false,"Address": "","Discovery": "","Agent": false,"Master": false,"Host": "tcp://0.0.0.0:3376","Image": "swarm:latest","Strategy": "spread","Heartbeat": 0,"Overcommit": 0,"ArbitraryFlags": [],"ArbitraryJoinFlags": [],"Env": null,"IsExperimental": false},"AuthOptions": {"CertDir": "/root/.docker/machine/certs","CaCertPath": "/root/.docker/machine/certs/ca.pem","CaPrivateKeyPath": "/root/.docker/machine/certs/ca-key.pem","CaCertRemotePath": "","ServerCertPath": "/root/.docker/machine/machines/test2/server.pem","ServerKeyPath": "/root/.docker/machine/machines/test2/server-key.pem","ClientKeyPath": "/root/.docker/machine/certs/key.pem","ServerCertRemotePath": "","ServerKeyRemotePath": "","ClientCertPath": "/root/.docker/machine/certs/cert.pem","ServerCertSANs": [],"StorePath": "/root/.docker/machine/machines/test2"}},"Name": "test2" }
(6)ip
獲取指定Docker主機地址。
[root@centos003 .ssh]# docker-machine ip test2 129.28.86.57
(7)kill
直接殺死指定的Docker主機,指定Docker主機會強行停止。
?