1. 程式人生 > >Docker技術入門與實戰 第二版-學習筆記-10-Docker Machine 專案-1-cli

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選項可以選擇支援的驅動型別

 其實就是虛擬化平臺和雲平臺

 

操作命令

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