Docker技術入門與實戰 第二版-學習筆記-10-Docker Machine 專案-1-cli
Docker Machine 是 Docker 官方編排(Orchestration)專案之一,負責在多種平臺上快速安裝 Docker 環境
Docker Machine是一種工具,它允許你在虛擬主機上安裝Docker引擎,並使用docker-machine命令管理主機。
因為之前的內容都是在一個主機host上執行的,但是我們在真正使用的時候肯定是會有多個主機host的情況的,所以首先我們會遇見的一個問題就是怎麼在多個host上將docker安裝並配置好
docker machine的出現就能夠讓我們批量地去安裝和配置好docker,host可能是本地虛擬機器或雲平臺等
對於 Docker Machine 來說,術語 Machine
就是執行 docker daemon 的主機。“建立 Machine” 指的就是在 host 上安裝和部署 docker
Machine drivers支援驅動
通過 -d選項可以選擇支援的驅動型別
- Microsoft Azure
- Digital Ocean
- Exoscale
- Google Compute Engine
- Generic
- Microsoft Hyper-V
- OpenStack
- Rackspace
- IBM Softlayer
- Oracle VirtualBox
- VMware vCloud Air
- VMware Fusion
- VMware vSphere
- VMware Workstation (unofficial plugin, not supported by Docker)
- Grid 5000 (unofficial plugin, not supported by Docker)
- Scaleway (unofficial plugin, not supported by Docker)
其實就是虛擬化平臺和雲平臺
操作命令
userdeMBP:~ user$ docker-machine --help Usage: docker-machine [OPTIONS] COMMAND [arg...] Create and manage machines running Docker. 執行Docker來建立並管理機器 Version: 0.16.0, build 702c267f Options: --debug, -D Enable debug mode 啟用除錯模式 --storage-path, -s "/Users/user/.docker/machine"
Configures storage path [$MACHINE_STORAGE_PATH] 配置儲存路徑 --tls-ca-cert CA to verify remotes against [$MACHINE_TLS_CA_CERT] 用於驗證遠端控制的CA證書 --tls-ca-key Private key to generate certificates [$MACHINE_TLS_CA_KEY] 生成證書的私鑰 --tls-client-cert Client cert to use for TLS [$MACHINE_TLS_CLIENT_CERT] 用於TLS的客戶端證書 --tls-client-key Private key used in client TLS auth [$MACHINE_TLS_CLIENT_KEY]
客戶端TLS認證中使用的私鑰 --github-api-token Token to use for requests to the Github API [$MACHINE_GITHUB_API_TOKEN]
用於Github API請求的令牌 --native-ssh Use the native (Go-based) SSH implementation. [$MACHINE_NATIVE_SSH]
使用本機(基於go) 的SSH實現 --bugsnag-api-token BugSnag API token for crash reporting [$MACHINE_BUGSNAG_API_TOKEN]
錯誤障礙API令牌崩潰報告 --help, -h show help 顯示幫助資訊 --version, -v print the version day 列印版本 Commands: active Print which machine is active 列印當前huoyue 的機器 config Print the connection config for machine 印表機器的連線配置資訊 create Create a machine 建立一個機器 env Display the commands to set up the environment for the Docker client
顯示為Docker客戶端設定環境的命令 inspect Inspect information about a machine 檢查機器的資訊 ip Get the IP address of a machine 得到一個機器的IP地址 kill Kill a machine 殺死一個機器 ls List machines 列舉所有的機器 provision Re-provision existing machines 重建現有的機器 regenerate-certs Regenerate TLS Certificates for a machine為機器重新生成TLS證書 restart Restart a machine 重啟機器 rm Remove a machine 移除機器 ssh Log into or run a command on a machine with SSH. 使用SSH登入或執行機器上的命令 scp Copy files between machines 在機器間互相複製檔案 mount Mount or unmount a directory from a machine with SSHFS.
使用SSHFS從機器上掛載或不掛載一個目錄 start Start a machine 開啟一個機器 status Get the status of a machine 獲得機器的狀態 stop Stop a machine 停止機器 upgrade Upgrade a machine to the latest version of Docker 更新機器到Docker的最新版本 url Get the URL of a machine得到機器的URL version Show the Docker Machine version or a machine docker version
顯示Docker機器的版本或機器中Docker的版本 help Shows a list of commands or help for one command 顯示命令列表或某個命令的幫助 Run 'docker-machine COMMAND --help' for more information on a command.
cli參考地址—— https://docs.docker.com/machine/reference/active/
1)create
格式:
docker-machine create [OPTIONS] [arg...]
選項:
userdeMBP:~ user$ docker-machine create --help Usage: docker-machine create [OPTIONS] [arg...] Create a machine 建立一個機器 Description: Run 'docker-machine create --driver name --help' to include the create flags for that driver in the help text. 可以執行“docker-machine create --driver name --help”命令去在幫助文字中包含指定驅動程式的建立標誌 Options: --driver, -d "virtualbox" Driver to create machine with. [$MACHINE_DRIVER]
用來建立機器的驅動,預設為"virtualbox" --engine-env [--engine-env option --engine-env option]
Specify environment variables to set in the engine 指定設定在引擎中的環境變數 --engine-insecure-registry [--engine-insecure-registry option --engine-insecure-registry option] Specify insecure registries to allow with the created engine
指定不安全的註冊中心,以便與建立的引擎一起使用 --engine-install-url "https://get.docker.com"
Custom URL to use for engine installation [$MACHINE_DOCKER_INSTALL_URL]
用於引擎安裝的自定義URL --engine-label [--engine-label option --engine-label option]
Specify labels for the created engine 為建立的引擎指定標籤 --engine-opt [--engine-opt option --engine-opt option]
Specify arbitrary flags to include with the created engine in the form flag=value
在表單flag=value中指定要與建立的引擎一起包含的任意標誌 --engine-registry-mirror [--engine-registry-mirror option --engine-registry-mirror option] Specify registry mirrors to use [$ENGINE_REGISTRY_MIRROR] 指定要使用的登錄檔映象 --engine-storage-driver
Specify a storage driver to use with the engine 指定要與引擎一起使用的儲存驅動程式 --swarm Configure Machine to join a Swarm cluster 配置機器以加入Swarm叢集 --swarm-addr
addr to advertise for Swarm (default: detect and use the machine IP)
為Swarm做廣告的addr(預設:檢測和使用機器IP) --swarm-discovery Discovery service to use with Swarm 發現用於Swarm的服務 --swarm-experimental Enable Swarm experimental features 啟用Swarm的實驗特性 --swarm-host "tcp://0.0.0.0:3376"
ip/socket to listen on for Swarm master 用於監聽Swarm主機的ip/socket --swarm-image "swarm:latest"
Specify Docker image to use for Swarm [$MACHINE_SWARM_IMAGE] 指定為Swarm使用的Docker映象 --swarm-join-opt [--swarm-join-opt option --swarm-join-opt option]
Define arbitrary flags for Swarm join 為Swarm連線定義任意標誌 --swarm-master Configure Machine to be a Swarm master 配置機器成為Swarm主機 --swarm-opt [--swarm-opt option --swarm-opt option]
Define arbitrary flags for Swarm master 為Swarm主機定義任意標誌 --swarm-strategy "spread"
Define a default scheduling strategy for Swarm 為Swarm定義一個預設的排程策略 --tls-san [--tls-san option --tls-san option]
Support extra SANs for TLS certs 為TLS證書支援額外的SANs
舉例:
1》driver = vitrualbox
一步步執行所出現的問題
1.
userdeMacBook-Pro:~ user$ docker-machine create demo
Running pre-create checks...
Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"
出現這樣錯誤的原因是使用docker-machine之前需要先將VirtualBox安裝好,與virtualBox相關的內容可見本部落格的virtualbox+vagrant學習-1-環境安裝及vagrantfile的簡單配置-Mac系統
2.發現一直在waiting
因為下載速度過慢,所以使用--engine-registry-mirror=https://hes89po0.mirror.aliyuncs.com來使用阿里雲的加速器
3.boot2docker.iso
目前的 Docker實現是建立在 Linux CGroup 等技術之上,因此無法在 MacOS X上原生使用,所以需要boot2docker.iso
⚠️什麼是boot2docker.iso:
由於docker要使用LXC,namespace,cgroup等Linux核心相關技術,而mac又是基於unix的,所以要使用boot2docker來使用docker,boot2docker實際上是一個Linux的輕量級發行版,一共24M大小,完全運行於記憶體中。 另外boot2docker需要執行在virtual Box上,所以請先下載virtualBox
userdeMacBook-Pro:~ user$ docker-machine create --engine-registry-mirror=https://hes89po0.mirror.aliyuncs.com -d virtualbox default Running pre-create checks... (default) Unable to get the local Boot2Docker ISO version: Did not find prefix "-v" in version string (default) Default Boot2Docker ISO is out-of-date, downloading the latest release... (default) Latest release for github.com/boot2docker/boot2docker is v18.09.0 (default) Downloading /Users/user/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v18.09.0/boot2docker.iso...
因為檢測到本地沒有boot2docker.iso,會到https://github.com/boot2docker/boot2docker/releases/download/v18.09.0/boot2docker.iso處下載,這樣下載的速度是比較慢的,你可以自己到該地址下載到本地,然後將下載得到的boot2docker.iso放到/Users/user/.docker/machine/cache下
因為第一次沒有執行成功,再執行時發現又去下載boot2docker.iso,明明之前已經下載好了,解決辦法是使用--virtualbox-boot2docker-url= /Users/user/.docker/machine/cache/boot2docker.iso指明其所在地址
4.終於成功了:
userdeMacBook-Pro:~ user$ docker-machine create --engine-registry-mirror=https://hes89po0.mirror.aliyuncs.com --virtualbox-boot2docker-url=/Users/user/.docker/machine/cache/boot2docker.iso -d virtualbox default Running pre-create checks... (default) Boot2Docker URL was explicitly set to "/Users/user/.docker/machine/cache/boot2docker.iso" at create time, so Docker Machine cannot upgrade this machine to the latest version. Creating machine... (default) Boot2Docker URL was explicitly set to "/Users/user/.docker/machine/cache/boot2docker.iso" at create time, so Docker Machine cannot upgrade this machine to the latest version. (default) Downloading /Users/user/.docker/machine/cache/boot2docker.iso from /Users/user/.docker/machine/cache/boot2docker.iso... (default) Creating VirtualBox VM... (default) Creating SSH key... (default) Starting the VM... (default) Check network to re-create if needed... (default) Found a new host-only adapter: "vboxnet1" (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... Checking connection to Docker... Docker is up and running! To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env default
檢視:
userdeMacBook-Pro:~ user$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default - virtualbox Running tcp://192.168.99.100:2376 v18.09.0
可見virtualBox虛擬機器上也生成了該機器:
2》driver = generic
執行這個驅動的過程出現了很多的錯誤,所以單獨寫了一篇,可見本部落格的docker-machine create -d generic 執行的波折過程及遇見的問題
2)active
格式:
docker-machine active [OPTIONS] [arg...]
⚠️[arg...]是機器的名字,可以指定多個機器,下面都一樣
選項[OPTIONS]:
--timeout, -t "10" Timeout in seconds, default to 10s 超時秒數,預設為10秒
檢視哪個機器是“active”(如果DOCKER_HOST環境變數指向某個機器,則認為該機器是活動的)。
但是一開始進行檢視的時候什麼都沒有查出來:
userdeMBP:~ user$ echo $DOCKER_HOST userdeMBP:~ user$ docker-machine active Error getting active host: timeout
所以就進行了手動設定:
userdeMBP:~ user$ export DOCKER_HOST=tcp://192.168.99.100:2376 userdeMBP:~ user$ echo $DOCKER_HOST tcp://192.168.99.100:2376 userdeMBP:~ user$ docker-machine active default
3)config
格式:
docker-machine config [OPTIONS] [arg...]
選項[OPTIONS]:
--swarm Display the Swarm config instead of the Docker daemon 顯示叢集配置而不是Docker守護程序配置
印表機器的連線配置
舉例:
userdeMacBook-Pro:~ user$ docker-machine config default
--tlsverify
--tlscacert="/Users/user/.docker/machine/machines/default/ca.pem"
--tlscert="/Users/user/.docker/machine/machines/default/cert.pem" --tlskey="/Users/user/.docker/machine/machines/default/key.pem" -H=tcp://192.168.99.100:2376
4)env
格式:
docker-machine env [OPTIONS] [arg...]
選項:
--swarm Display the Swarm config instead of the Docker daemon 顯示叢集配置而不是Docker守護程序 --shell Force environment to be configured for a specified shell: [fish, cmd, powershell, tcsh, emacs], default is auto-detect 強制環境為指定的shell配置:[fish, cmd, powershell, tcsh, emacs],預設是自動檢測 --unset, -u Unset variables instead of setting them 未設定變數而不是設定它們 --no-proxy Add machine IP to NO_PROXY environment variable 將機器IP新增到NO_PROXY環境變數
顯示設定Docker客戶機環境的命令
1.舉例:
userdeMBP:~ user$ docker-machine env default Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "10.240.203.10:2376": dial tcp 10.240.203.10:2376: i/o timeout You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'. Be advised that this will trigger a Docker daemon restart which might stop running containers.
發現出現了問題,檢視當前的機器:
userdeMBP:~ user$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default virtualbox Timeout vm - generic Running tcp://10.240.203.48:2376 Unknown Unable to query docker version: Cannot connect to the docker engine endpoint解決辦法: 直接執行 docker-machine regenerate-certs default並沒有解決問題 首先將vm移除,其為之前建立失敗的機器
userdeMBP:~ user$ docker-machine rm vm About to remove vm WARNING: This action will delete both local reference and remote instance. Are you sure? (y/n): y Successfully removed vm
然後關閉docker-machine:
userdeMBP:~ user$ docker-machine stop Stopping "default"... Machine "default" was stopped.
再開啟:
userdeMBP:~ user$ docker-machine start Starting "default"... (default) Check network to re-create if needed... (default) Waiting for an IP... Machine "default" was started. Waiting for SSH to be available... Detecting the provisioner... Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
分配IP地址:
userdeMBP:~ user$ docker-machine env Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.100:2376": x509: certificate is valid for 10.240.203.10, not 192.168.99.100 You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'. Be advised that this will trigger a Docker daemon restart which might stop running containers.
此時檢視還是沒有成功的:
userdeMBP:~ user$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default - virtualbox Running tcp://192.168.99.100:2376 Unknown Unable to query docker version: Get https://192.168.99.100:2376/v1.15/version: x509: certificate is valid for 10.240.203.10, not 192.168.99.100
進行TLS證書的重新生成:
userdeMBP:~ user$ docker-machine regenerate-certs default Regenerate TLS machine certs? Warning: this is irreversible. (y/n): y Regenerating TLS certificates Waiting for SSH to be available... Detecting the provisioner... Copying certs to the local machine directory... Copying certs to the remote machine... Setting Docker configuration on the remote daemon...
然後就解決了:
userdeMBP:~ user$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default - virtualbox Running tcp://192.168.99.100:2376 v18.09.0
此時就能夠執行env命令了:
userdeMBP:~ user$ docker-machine env default export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/user/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" # Run this command to configure your shell: # eval $(docker-machine env default)
檢視環境變數並設定:
userdeMBP:~ user$ env | grep DOCKER //什麼都沒有返回 userdeMBP:~ user$ eval $(docker-machine env default) //將命令傳給shell執行,所以下面的值就被設定成了環境變數 userdeMBP:~ user$ env | grep DOCKER DOCKER_HOST=tcp://192.168.99.100:2376 DOCKER_MACHINE_NAME=default DOCKER_TLS_VERIFY=1 DOCKER_CERT_PATH=/Users/user/.docker/machine/machines/default
如果你想要取消設定:
userdeMBP:~ user$ docker-machine env -u default Error: Expected no machine name when the -u flag is present //不需要機器名 userdeMBP:~ user$ docker-machine env -u unset DOCKER_TLS_VERIFY unset DOCKER_HOST unset DOCKER_CERT_PATH unset DOCKER_MACHINE_NAME # Run this command to configure your shell: # eval $(docker-machine env -u) userdeMBP:~ user$ eval $(docker-machine env -u) //就可以將上面的四樣設定都取消 userdeMBP:~ user$ env | grep DOCKER //然後就沒有東西返回了
2.--shell的使用
上面描述的輸出是針對shell bash和zsh的(如果不確定使用哪個shell,很可能是bash)。然而,這些並不是Docker機器支援的唯一shell。Docker Machine檢測環境中可用的shell並列出它們。Docker支援bash、cmd、powershell和emacs。
如果你在Windows上並使用PowerShell或cmd.exe, 呼叫docker-machine env命令Docker Machine現在可以自動檢測shell。如果自動檢測不起作用,你仍然可以使用docker-machine env的--shell標誌覆蓋它。
比如PowerShell:
userdeMBP:~ user$ docker-machine env --shell powershell default $Env:DOCKER_TLS_VERIFY = "1" $Env:DOCKER_HOST = "tcp://192.168.99.100:2376" $Env:DOCKER_CERT_PATH = "/Users/user/.docker/machine/machines/default" $Env:DOCKER_MACHINE_NAME = "default" # Run this command to configure your shell: # & docker-machine env --shell powershell default | Invoke-Expression
然後的就是PowerShell版本的shell語句
如cmd.exe:
userdeMBP:~ user$ docker-machine env --shell cmd default SET DOCKER_TLS_VERIFY=1 SET DOCKER_HOST=tcp://192.168.99.100:2376 SET DOCKER_CERT_PATH=/Users/user/.docker/machine/machines/default SET DOCKER_MACHINE_NAME=default REM Run this command to configure your shell: REM @FOR /f "tokens=*" %i IN ('docker-machine env --shell cmd default') DO @%i
3.--no-proxy的使用——將建立的機器從代理中排除 env命令支援--no-proxy標誌,它確保建立的機器的IP地址被新增到NO_PROXY/ NO_PROXY環境變數中。
在需要HTTP代理進行internet訪問的網路環境中,將docker-machine與本地VM provider(如virtualbox或vmwarefusion)一起使用時,這非常有用。
userdeMBP:~ user$ docker-machine env --no-proxy default export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/user/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" export NO_PROXY="192.168.99.100" # Run this command to configure your shell: # eval $(docker-machine env --no-proxy default)
5)inspect 格式:
docker-machine inspect [OPTIONS] [arg...]
選項:
--format, -f Format the output using the given go template.使用給定的go模板格式化輸出
檢查機器資訊
預設情況下,這將以JSON格式呈現關於機器的資訊。如果指定了格式,則為每個結果執行給定的模板。
Go的文字/模板包描述了格式的所有細節。
除了文字/模板語法之外,還有一些額外的函式、json和prettyjson,可以使用它們將輸出格式化為json(下面有文件說明)。
舉例:
userdeMBP:~ user$ docker-machine inspect default { "ConfigVersion": 3, "Driver": { "IPAddress": "192.168.99.100", "MachineName": "default", "SSHUser": "docker", "SSHPort": 55036, "SSHKeyPath": "/Users/user/.docker/machine/machines/default/id_rsa", "StorePath": "/Users/user/.docker/machine", "SwarmMaster": false, "SwarmHost": "tcp://0.0.0.0:3376", "SwarmDiscovery": "", "VBoxManager": {}, "HostInterfaces": {}, "CPU": 1, "Memory": 1024, "DiskSize": 20000, "NatNicType": "82540EM", "Boot2DockerURL": "/Users/user/.docker/machine/cache/boot2docker.iso", "Boot2DockerImportVM": "", "HostDNSResolver": false, "HostOnlyCIDR": "192.168.99.1/24", "HostOnlyNicType": "82540EM", "HostOnlyPromiscMode": "deny", "UIType": "headless", "HostOnlyNoDHCP": false, "NoShare": false, "DNSProxy": true, "NoVTXCheck": false, "ShareFolder": "" }, "DriverName": "virtualbox", "HostOptions": { "Driver": "", "Memory": 0, "Disk": 0, "EngineOptions": { "ArbitraryFlags": [], "Dns": null, "GraphDir": "", "Env": [], "Ipv6": false, "InsecureRegistry": [], "Labels": [], "LogLevel": "", "StorageDriver": "", "SelinuxEnabled": false, "TlsVerify": true, "RegistryMirror": [ "https://hes89po0.mirror.aliyuncs.com" ], "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": "/Users/user/.docker/machine/certs", "CaCertPath": "/Users/user/.docker/machine/certs/ca.pem", "CaPrivateKeyPath": "/Users/user/.docker/machine/certs/ca-key.pem", "CaCertRemotePath": "", "ServerCertPath": "/Users/user/.docker/machine/machines/default/server.pem", "ServerKeyPath": "/Users/user/.docker/machine/machines/default/server-key.pem", "ClientKeyPath": "/Users/user/.docker/machine/certs/key.pem", "ServerCertRemotePath": "", "ServerKeyRemotePath": "", "ClientCertPath": "/Users/user/.docker/machine/certs/cert.pem", "ServerCertSANs": [], "StorePath": "/Users/user/.docker/machine/machines/default" } }, "Name": "default" }
在大多數情況下,你可以相當直接地從JSON中選擇任何欄位,使用--format標誌:
userdeMBP:~ user$ docker-machine inspect --format='{{.Driver.IPAddress}}' default 192.168.99.100
6) ip
格式:
docker-machine ip [arg...]
得到機器的IP地址
舉例:
userdeMBP:~ user$ docker-machine ip default 192.168.99.100
7)kill
格式:
docker-machine kill [arg...]
殺宕機器,即強制停止機器,機器狀態status從running變成stopped
8)ls
格式:
docker-machine ls [OPTIONS] [arg...]
選項:
--quiet, -q Enable quiet mode 啟用安靜模式 --filter [--filter option --filter option] Filter output based on conditions provided 根據提供的條件過濾輸出 --timeout, -t "10" Timeout in seconds, default to 10s 超時時間,預設為10秒 --format, -f Pretty-print machines using a Go template 使用Go模版好看地印表機器資訊
1.--timeout
ls命令試圖並行地到達每個主機。如果給定主機在不到10秒內沒有響應,ls命令將宣告該主機處於超時狀態。在某些情況下(連線不良、負載高或在進行故障排除時),你可能希望增加或減少此值。為此,可以使用-t標誌和一個以秒為單位的數值來指定超時時間。
userdeMBP:~ user$ docker-machine ls -t 12 NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default - virtualbox Running tcp://192.168.99.100:2376 v18.09.0
2.--filter
過濾標誌(--filter)格式是鍵值對。如果有多個過濾器,則傳遞多個標誌,比如:--filter "foo=bar" --filter "bif=baz"
目前支援的過濾器有:
- driver (driver name)驅動名
- swarm (swarm master’s name)叢集主機名
- state (
Running|Paused|Saved|Stopped|Stopping|Starting|Error
)機器狀態資訊 - name名稱(驅動程式返回的機器名稱,支援golang風格的正則表示式)
- label標籤(使用--engine-label選項建立的機器,可以使用label=<key>[=<value>]進行過濾)
舉例:
userdeMBP:~ user$ docker-machine ls --filter name=foo0 NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS userdeMBP:~ user$ docker-machine ls --filter name=default NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default - virtualbox Running tcp://192.168.99.100:2376 v18.09.0
$ docker-machine ls --filter label=com.class.app=foo1 --filter label=com.class.app=foo2 NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS foo1 - virtualbox Running tcp://192.168.99.105:2376 v1.9.1 foo2 * virtualbox Running tcp://192.168.99.107:2376 v1.9.1
3.--format
相應的表:
Placeholder | Description |
---|---|
.Name | Machine name |
.Active | Is the machine active? |
.ActiveHost | Is the machine an active non-swarm host? |
.ActiveSwarm | Is the machine an active swarm master? |
.DriverName | Driver name |
.State | Machine state (running, stopped...) |
.URL | Machine URL |
.Swarm | Machine swarm name |
.Error | Machine errors |
.DockerVersion | Docker Daemon version |
.ResponseTime | Time taken by the host to respond |
舉例:
userdeMBP:~ user$ docker-machine ls --format "{{.Name}}: {{.DriverName}}" default: virtualbox
如果想以表的形式表示:
userdeMBP:~ user$ docker-machine ls --format "table {{.Name}} {{.DriverName}}" NAME DRIVER default virtualbox
9)mount
格式:
docker-machine mount [OPTIONS] [arg...]
選項:
--unmount, -u Unmount instead of mount 解除安裝而不是掛載
使用sshfs將目錄從機器掛載到本地主機。
引數的符號是machinename:/path/to/dir;你還可以提供一個替代掛載點(預設是相同的dir路徑)。
userdeMBP:~ user$ mkdir foo userdeMBP:~ user$ docker-machine ssh default mkdir foo userdeMBP:~ user$ docker-machine mount default:/home/docker/foo foo You must have a copy of the sshfs binary locally to use the mount feature
出問題,解決辦法,在本地安裝sshfs
安裝:
brew install Caskroom/cask/osxfuse
brew install sshfs
然後再執行就成功了:
userdeMBP:~ user$ docker-machine mount default:/home/docker/foo foo
該命令的意思是將機器default的/home/docker/foo資料夾掛載到本地主機當前目錄的foo資料夾,然後本地的foo資料夾變成了如下圖所示:
然後再執行:
userdeMBP:~ user$ touch foo/bar
在本地的foo資料夾中生成bar檔案,然後我們就能夠看見機器上的foo中也出現了該bar檔案,則說明掛載成功
[email protected]:~$ cd foo [email protected]:~/foo$ ls //一開始是什麼都沒有的 [email protected]:~/foo$ ls bar
要再次解除安裝目錄,可以使用相同的選項,但是使用-u標誌。你還可以直接呼叫fuserunmount(或fusermount -u)命令。
userdeMBP:~ user$ docker-machine mount -u default:/home/docker/foo foo You must have a copy of the fusermount binary locally to use the unmount option
但是執行有錯,然後就打算直接使用fusermount -u:
userdeMBP:~ user$ fusermount -u default:/home/docker/foo foo -bash: fusermount: command not found
也沒能成功,後面檢視資料發現使用umount即可:
userdeMBP:~ user$ umount default:/home/docker/foo foo umount: default:/home/docker/foo: not currently mounted
然後本地的foo資料夾就變成了原樣,解除安裝成功:
10)provision
格式:
docker-machine provision [arg...]
重建現有的機器
在建立的機器上重新執行配置。
有時,在建立的機器上重新執行機器的配置流程可能會有所幫助。這樣做的原因可能包括初始供應過程中的失敗,或者偏離所需的系統狀態(包括最初指定的叢集或引擎配置)。
機器配置過程將包括:
- 將例項上的主機名設定為機器地址所在的名稱,例如default。
- 如果docker還沒有出現,則安裝它。
- 生成一組證書(通常使用預設的自簽名CA),並配置守護程序接受TLS上的連線。
- 將生成的證書複製到伺服器和本地配置目錄。
- 根據建立時指定的選項配置Docker引擎。
- 如果適用則配置和啟用叢集。
舉例:
$ docker-machine provision default Copying certs to the local machine directory... Copying certs to the remote machine... Setting Docker configuration on the remote daemon...
11)regenerate-certs
格式:
docker-machine regenerate-certs [OPTIONS] [arg...]
選項:
--force, -f Force rebuild and do not prompt 強制重建且不提示 --client-certs Also regenerate client certificates and CA. 還可以重新生成客戶機證書和CA
重新生成機器的TLS證書
具體例子可見上面的env部分
12)restart
格式:
docker-machine restart [arg...]
重啟機器
其實就相當於同時執行:
docker-machine stop
docker-machine start
但一些雲驅動程式試圖實現一個聰明的重啟,以保持相同的IP地址。
13)rm
格式:
docker-machine rm [OPTIONS] [arg...]
選項:
--force, -f Remove local configuration even if machine cannot be removed, also implies an automatic yes (`-y`) 刪除本地配置,即使機器無法刪除,也意味著自動yes (' -y ') -y Assumes automatic yes to proceed with remove, without prompting further user confirmation 假設自動yes繼續刪除,而不提示進一步的使用者確認
移除一個或多個機器
例子:
$ docker-machine rm baz About to remove baz Are you sure? (y/n): y //會詢問是否真的要刪除 Successfully removed baz $ docker-machine rm -y foo //使用-y則不會詢問 About to remove foo Successfully removed foo
14)ssh
格式:
docker-machine ssh [arg...]
登入機器或者是執行相應的命令
1.login
docker-machine ssh machinename
2.在機器上執行一個命令,如:
userdeMBP:~ user$ docker-machine ssh default free total used free shared buff/cache available Mem: 1013116 59720 706076 229024 247320 706516 Swap: 1205164 0 1205164
如果使用下一節詳細介紹的“外部”SSH型別,則可以在生成的命令中包含傳遞到SSH二進位制檔案的其他引數(除非它們與Docker機器生成的命令的任何預設引數衝突)。例如,以下命令將埠8080從預設機器轉發到你的主機上的本地主機:
$ docker-machine ssh default -L 8080:localhost:8080
15)start
格式:
docker-machine start [arg...]
開啟一個機器
$ docker-machine start default
16)status
格式:
docker-machine status [arg...]
得到機器的狀態
舉例:
userdeMBP:~ user$ docker-machine status default Running
17)stop
格式:
docker-machine stop [arg...]
停止機器,機器的狀態會從running變為stopped
18)upgrade
格式:
docker-machine upgrade [arg...]
將機器升級到Docker的最新版本。升級如何進行取決於在建立的例項上使用的底層分佈。
例如,如果機器使用Ubuntu作為底層作業系統,它執行一個類似於sudo apt-get upgrade docker-engine的命令,因為機器希望Ubuntu機器能夠使用這個包。另一個例子是,如果機器的作業系統使用boot2docker,這個命令將下載最新的boot2docker ISO,並將機器現有的ISO替換為最新的ISO。
$ docker-machine upgrade default
⚠️:如果你使用的是自定義boot2docker ISO(使用--virtualbox-boot2docker-url或等效標誌指定),那麼在該機器上執行升級將完全用可用的最新“普通”boot2docker ISO替換指定的ISO。
19)url
格式:
docker-machine url [arg...]
得到機器的URL
userdeMBP:~ user$ docker-machine url default tcp://192.168.99.100:2376