前言
前面《Docker學習—Compose》文中介紹了Compose的使用方式;接下來繼續瞭解docker三劍客之一的 Machine;
一、Docker Machine簡介
1、什麼是Docker Machine?
Docker Machine是一個可以在虛擬主機上安裝Docker引擎,並使用Docker Machine命令管理主機的工具。您可以使用計算機在本地Mac或Windows box、公司網路、資料中心或雲提供商(如Azure、AWS)上建立Docker主機。
Docker Machine是一個工具,可以讓您在虛擬主機上安裝Docker Engine,使用Docker Machine命令,您可以啟動、檢查、停止和重新啟動託管主機,升級Docker客戶端和守護程式,並配置Docker客戶端與主機對話。
2、為什麼要用Docker Machine?
Docker Machine有這兩個廣泛的用例。
- 在舊的桌面系統,想在Mac或Windows上執行Docker
如果您主要在舊版Mac或Windows膝上型電腦或桌面上工作,但不符合新的Docker desktop for Mac和Docker desktop for Windows apps的要求,則需要Docker Machine在本地執行Docker Engine。
- 想在遠端系統上配置Docker主機
Docker引擎在Linux系統上本機執行。如果您的主系統是Linux機器,並且希望執行docker命令,您只需下載並安裝docker Engine。但是,如果你想在一個網路上、雲端甚至本地提供多個Docker主機,你需要Docker Machine。
3、Docker Engine和Docker Machine有什麼區別?
通常說“ Docker”時,通常指的是Docker Engine,由Docker守護程式組成的客戶端-伺服器應用程式,用於指定與守護程式互動的介面的REST API和與守護程式進行對話的命令列介面(CLI)客戶端(通過REST API包裝器)。
Docker Engine從CLI接受命令,
例如 :docker run <image> 啟動容器執行映象;
docker ps
列出正在執行的容器;docker image ls
列出映象列表等
Docker Machine是用於調配和管理Docker主機(帶有Docker Engine的主機)的工具。通常,您在本地系統上安裝Docker Machine。Docker Machine有自己的命令列客戶端 docker-machine
和Docker Engine客戶端docker
。您可以使用Machine在一個或多個虛擬系統上安裝Docker Engine。這些虛擬系統可以是本地的(如在Mac或Windows上使用Machine在VirtualBox中安裝並執行Docker Engine時),也可以是遠端的(如在Mac上使用Cloud在雲提供商上配置Docker主機時)。可以將Dockeri主機本身視為(有時也稱為託管的“機器”)。
4、Docker Machine支援機器驅動程式
-
- 亞馬遜網路服務
- 微軟Azure
- 數字海洋
- 外標
- 泛型
- Google Compute Engine
- Linode(非官方外掛,Docker不支援)
- Microsoft Hyper-V
- OpenStack的
- 機架空間
- IBM軟層
- 甲骨文VirtualBox
- VMware vCloud Air
- VMware融合
- VMware vSphere
- VMware Workstation(非官方外掛,Docker不支援)
- Grid 5000(非官方外掛,Docker不支援)
- Scaleway(非官方外掛,Docker不支援)
- Hetzner Cloud(非官方外掛,Docker不支援)
- ArvanCloud(非官方外掛,Docker不支援)
二、Docker Machine應用示例
本次示例採用windows docker 中使用Docker Machine來實現虛擬環境(hyper-v)中dcoker環境 生成
1、安裝Docker Machine:
- MacOS中使用:
$ base=https://github.com/docker/machine/releases/download/v0.16.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine && chmod +x /usr/local/bin/docker-machine
- Linux中執行:
$ base=https://github.com/docker/machine/releases/download/v0.16.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo mv /tmp/docker-machine /usr/local/bin/docker-machine && chmod +x /usr/local/bin/docker-machine
- Windows中使用Git BASH 執行命令:
$ base=https://github.com/docker/machine/releases/download/v0.16.0 && mkdir -p "$HOME/bin" && curl -L $base/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && chmod +x "$HOME/bin/docker-machine.exe"
2、檢視安裝版本:docker-machine version
3、設定hyper-網路代理
進入Hyper-V 管理器新增虛擬交換器如下圖:
4、使用docker-machine建立docker環境:在Git BASH執行以下命令
命令:docker-machine create -d hyperv --hyperv-virtual-switch <NameOfVirtualSwitch> <nameOfNode>
示例:docker-machine create -d hyperv --hyperv-virtual-switch
docker_Virtual_Switch worker1
該命令下載安裝了Docker守護程式的輕量級Linux發行版(boot2docker)並在hyperv中建立名為<nameOfNode>的例項執行。 具體docker-machine命令還需要進一步學習
結果如下: 則建立docker環境成功
5、進入建立docker環境:
--進入worker1環境
$ eval $("C:\Users\cwsheng\bin\docker-machine.exe" env worker1) --檢視worker1中執行容器 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
三、Docker Machine命令
Options: --debug, -D 啟用除錯模式 --storage-path, -s "C:\Users\cwsheng\.docker\machine" 配置儲存路徑 [$MACHINE_STORAGE_PATH] --tls-ca-cert 驗證遠端CA [$MACHINE_TLS_CA_CERT] --tls-ca-key 生成證照的私鑰 [$MACHINE_TLS_CA_KEY] --tls-client-cert 用於TLS的客戶端證照 [$MACHINE_TLS_CLIENT_CERT] --tls-client-key 客戶端TLS身份驗證中使用的私鑰[$MACHINE_TLS_CLIENT_KEY] --github-api-token 用於請求Github API的令牌 [$MACHINE_GITHUB_API_TOKEN] --native-ssh 使用本機(基於Go的)SSH實現 [$MACHINE_NATIVE_SSH] --bugsnag-api-token 用於崩潰報告的BugSnag API令牌 [$MACHINE_BUGSNAG_API_TOKEN] --help, -h 顯示幫助列表 --version, -v 顯示版本 Commands: active 輸出活動狀態的機器 config 輸出指定機器的連線配置 create 建立一個機器 env 顯示docker客戶端環境設定的命令 inspect 檢視機器相關資訊 ip 獲取機器的IP地址 kill 殺死一臺機器 ls 顯示機器列表 provision 重現提供現有機器 regenerate-certs 為機器重新生成TLS證照 restart 重啟機器 rm 移除機器 ssh 在使用SSH的機器上登入或執行命令 scp 在機器之間複製檔案 mount 從具有SSHFS的計算機上裝載或解除安裝目錄 start 啟動機器 status 獲取機器狀態 stop 暫停機器 upgrade 將計算機升級到Docker的最新版本 url 獲取機器的URL version 顯示Docker Machine版本 help 顯示命令的幫組列表
重點關注建立時相關引數設定:
--driver, -d "none" 用來建立機器的驅動程式
--engine-install-url "https://get.docker.com" 用於引擎安裝的自定義URL [$MACHINE_DOCKER_INSTALL_URL]
--engine-opt [--engine-opt option --engine-opt option] 以flag=value的形式指定要包含在所建立引擎中的任意標誌
--engine-insecure-registry [--engine-insecure-registry option --engine-insecure-registry option] 指定建立引擎執行不安全登錄檔
--engine-registry-mirror [--engine-registry-mirror option --engine-registry-mirror option] 指定要使用登錄檔映象 [$ENGINE_REGISTRY_MIRROR]
--engine-label [--engine-label option --engine-label option] 為建立的引擎指定標籤
--engine-storage-driver 指定要與引擎一起使用的儲存驅動程式
--engine-env [--engine-env option --engine-env option] 指定要在引擎中設定的環境變數
--swarm 機器叢集配置
--swarm-image "swarm:latest" 指定用於叢集的docker映象 [$MACHINE_SWARM_IMAGE]
--swarm-master 將機器設定叢集管理節點
--swarm-discovery 使用swarm發現服務
--swarm-strategy "spread" 為Swarm定義一個預設的排程策略
--swarm-opt [--swarm-opt option --swarm-opt option] 為swarm定義任意標誌
--swarm-host "tcp://0.0.0.0:3376" 監聽Swarm master的ip/socket
--swarm-addr 為Swarm做addr的地址(預設:檢測並使用機器IP)
--swarm-experimental
啟用Swarm體驗功能
#####根據driver不同引數會有些不同######
……
四、參考
machine官方說明:https://docs.docker.com/machine/
hyper-v驅動使用說明:https://docs.docker.com/machine/drivers/hyper-v/
後續:下一篇將開始對docker叢集進行學習,先使用swarm 方式