在本例中,我們使用
Docker Machine
來創建兩個虛擬機(virtual machines)在同一個系統上
(See
Docker Machine Overview
to learn more.)。
創建 manager 和 worker 虛擬機
使用 docker machine 創建一個本地的 virtual machine
docker-machine
create
--driver hyperv <HOSTNAME>
這里使用的是 windows 里的 hyperv 創建的虛擬機

創建過程中出現一個
Error creating machine: Error in driver during machine creation: exit status 1
解決方案:
- 按照鏈接https://docs.docker.com/machine/drivers/hyper-v/的說明,配置系統。
- 首先在Hyperv管理工具里面,創建一個新的虛擬交換機,並使用外部鏈接(如果不指定,默認鏈接到系統的DockerNAT上,它是在docker安裝時候創建的,用於 docker for windows 的,不是給我們使用的)
- 然后將創建的新虛擬機,主動鏈接到該交換機上
- 重啟
- 注意:創建虛擬交換機時,要選擇實體網卡;創建過程要在管理員模式下進行,不然會出現一直停在waiting for host
下面是一個創建的例子:
PS
C:\WINDOWS\system32> docker
-machine
create
-d
hyperv -
-hyperv
-virtual
-switch
"Primary Virtual Switch"
-
-hyperv
-disk
-size
"5000"
-
-hyperv
-memory
"512"
manager
Running pre
-create
checks...
Creating machine...
(manager1) Copying C:\Users\Vicky\.docker\machine\cache\boot2docker.iso to C:\Users\Vicky\.docker\machine\machines\manag
er1\boot2docker.iso...
(manager1) Creating SSH key...
(manager1) Creating VM...
(manager1) Using switch
"Primary Virtual Switch"
(manager1) Creating VHD
(manager1) Starting VM...
(manager1) Waiting for host to start...
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: C:\Program Files\Doc
ker\Docker\Resources\bin\docker
-machine
.exe env manager1
PS
C:\WINDOWS\system32>
驗證虛擬機的IP地址
使用命令
docker-machine ls
來驗證。
PS
C:\Users\Administrator> docker
-machine
ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
manager - hyperv Running tcp://192.168.0.9:2376 v1.13.1
worker - hyperv Running tcp://192.168.0.10:2376 v1.13.1
這樣就有了 兩個 docker化 的虛擬機,每一個都獨自運行一個 Docker Engine。可以通過 Docker CLI 通信,並且可以配置為集群節點(Swarm nodes)。
與虛擬機交互
下面講述兩種與創建的虛擬機交互的方式:
通過pre-configured shell來管理虛擬機
我們可以使用 docker-machine 命令,在shell中設置虛擬機的環境變量。這樣,我們在本地shell上的 Docker 命令,就會在對應的虛擬機上運行。
1. 運行 docker-machine env manager 命令,獲得環境變量
PS
C:\Users\Administrator> docker
-machine
env manager
$Env
:DOCKER_TLS_VERIFY =
"1"
$Env
:DOCKER_CERT_PATH =
"C:\Users\Administrator\.docker\machine\machines\manager"
$Env
:DOCKER_MACHINE_NAME =
"manager"
$Env
:COMPOSE_CONVERT_WINDOWS_PATHS =
"true"
# Run this command to configure your shell:
# & "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env manager | Invoke-Expression
2. 使用最后一行的命令
& "C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe" env manager | Invoke-Expression
將shell連接到 manager 虛擬機。
3。 再次運行 docker-machine ls 命令:
PS
C:\Users\Administrator> docker
-machine
ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
manager * hyperv Running tcp://192.168.0.9:2376 v1.13.1
worker - hyperv Running tcp://192.168.0.10:2376 v1.13.1
可以發現,manager后面出現一個星號,表示的當前,shell已經連接到了 manager 虛擬機。這樣,在shell中運行的命令,將會在 manager 虛擬機上執行。(可以用同樣的方法,連接到 worker 虛擬機,一個shell可以同時連接多個虛擬機進行操作)
使用 ssh 登錄虛擬機
可以使用命令
docker-machine ssh <MACHINE-NAME>
來登錄到某台虛擬機上.
PS
C:\Users\Administrator> docker
-machine
ssh manager
## .
## ## ## ==
## ## ## ## ## ===
/
""
""
""
""
""
""
""
""
"\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
|
'_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '
__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.13.1, build HEAD : b7f6033 - Wed Feb 8 20:31:48 UTC 2017
Docker version 1.13.1, build 092cba3
docker@manager:~$
What’s next?
我們將會用
這兩個 Docker machines
創建一個集群(swarm)。