Docker Machine

Docker Machine是Docker官方Orchestration项目之一,负责在多种平台上快速安装Docker环境。

Docker Machine是一个工具,它允许你在虚拟宿主机上安装Docker Engine引擎,并使用docker-machine命令管理宿主机。你可以使用机器在本地的Mac或Windows上创建和使用Docker宿主机。

Mac或Windows上运行Docke

docker-machine是一个虚拟机管理工具,通过创建一个安装好的docker虚拟机并设置对应的环境变量,使本地docker工具获得透明远程操作虚拟机的能力,从而使本身不支持docker的windows和mac能够直接使用docker命令。

远程系统上配置Docker宿主机

Docker与Docker Machine

常说的Docker实际上指的是Docker Engine引擎,它是一个客户端/服务器应用程序,由Docker守护进程、REST API指定与守护进程交互的接口、CLI命令行接口与守护进程通信(通过封装REST API),Docker Engine从CLI中接收docker命令。

Docker Engine

Docker Machine是一个用于配置和管理Docker Engine宿主机的工具,通常在本地系统上安装。Docker Machine有自己的CLI命令行客户端工具docker-machine和Docker Engine客户端工具docker。可以使用Docker Machine在一个或多个虚拟系统上安装Docker Engine。这些虚拟系统可以是本地也可以是远程的。Dockerized宿主机本身可以认为是被管理的machine。

Docker Machine

docker-machine帮助

$ docker-machine --help
Usage: docker-machine [OPTIONS] COMMAND [arg...]

Create and manage machines running Docker.

Version: 0.14.0, build 89b8332

Author:
  Docker Machine Contributors - <https://github.com/docker/machine>

Options:
  --debug, -D                                           Enable debug mode
  --storage-path, -s "C:\Users\junchow\.docker\machine" Configures storage path [$MACHINE_STORAGE_PATH]
  --tls-ca-cert                                         CA to verify remotes against [$MACHINE_TLS_CA_CERT]
  --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-client-key                                      Private key used in client TLS auth [$MACHINE_TLS_CLIENT_KEY]
  --github-api-token                                    Token to use for requests to the Github API [$MACHINE_GITHUB_API_TOKEN]
  --native-ssh                                          Use the native (Go-based) SSH implementation. [$MACHINE_NATIVE_SSH]
  --bugsnag-api-token                                   BugSnag API token for crash reporting [$MACHINE_BUGSNAG_API_TOKEN]
  --help, -h                                            show help
  --version, -v                                         print the version

Commands:
  active                终端查看活动的docker宿主机
  config                终端查看连接docker宿主机的配置信息
  create                终端创建一个docker宿主机
  env                   终端查看连接某docker宿主机的环境变量
  inspect               终端查看docker宿主机的更新信息
  ip                    终端查看docker宿主机地址
  kill                  终端杀死docker宿主机进程
  ls                    终端查看当前已经创建或正在运行的虚拟机
  provision             Re-provision existing machines
  regenerate-certs      终端为docker宿主机重新生成TLS认证信息
  restart               终端重启docker宿主机,若宿主机状态显示为timeout可重启。
  rm                    终端删除docker宿主机
  ssh                   终端使用SSH远程连接docker宿主机
  scp                   终端使用SCP远程传输文件给docker宿主机
  mount                 Mount or unmount a directory from a machine with SSHFS.
  start                 终端开启docker宿主机
  status                终端查看docker宿主机的状态
  stop                  终端停止docker宿主机
  upgrade               终端更新宿主机上docker版本为最新
  url                   终端查看docker主机的URL
  version               终端查看docker-machine的版本
  help                  帮助
 command

Run 'docker-machine COMMAND --help' for more information on a command.

docker-machine命令

version 终端查看docker-machine的版本

$ docker-machine -v
$ docker-machine version
$ docker-machine -version
$ docker-machine --version
docker-machine version 0.14.0, build 89b8332

create 终端创建一个docker宿主机

$ docker-machine create node
Running pre-create checks...
Creating machine...
(node) Copying C:\Users\junchow\.docker\machine\cache\boot2docker.iso to C:\Users\junchow\.docker\machine\machines\node\boot2docker.iso...
(node) Creating VirtualBox VM...
(node) Creating SSH key...
(node) Starting the VM...
(node) Check network to re-create if needed...
(node) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
(node) 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 node

rm 终端删除docker宿主机

$ docker-machine rm node
About to remove node
WARNING: This action will delete both local reference and remote instance.
Are you sure? (y/n): y
Successfully removed node

ls 终端查看当前已经创建或正在运行的虚拟机

超时停止状态Timeout

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER   ERRORS
default            virtualbox   Timeout

正常运行状态Running

$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.5

active 终端查看活动的docker宿主机

$ docker-machine active
default

status 终端查看docker宿主机的状态

$ docker-machine status
Running

$ docker-machine status default
Running

stop 终端停止docker宿主机

$ docker-machine stop default
Stopping "default"...
Machine "default" was stopped.

start 终端开启docker宿主机

$ docker-machine start default
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.

restart 终端重启docker宿主机

若宿主机状态显示为timeout可重启

$ docker-machine restart default
Restarting "default"...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
(default) Waiting for an IP...
Waiting for SSH to be available...
Detecting the provisioner...
Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command.

kill 终端杀死docker宿主机进程

若重启失败可杀死docker宿主机进程或虚拟机进程后重新启动。

$ docker-machine kill default
Killing "default"...
Machine "default" was killed.

config 终端查看连接docker宿主机的配置信息

$ docker-machine config
--tlsverify
--tlscacert="C:\\Users\\junchow\\.docker\\machine\\machines\\default\\ca.pem"
--tlscert="C:\\Users\\junchow\\.docker\\machine\\machines\\default\\cert.pem"
--tlskey="C:\\Users\\junchow\\.docker\\machine\\machines\\default\\key.pem"
-H=tcp://192.168.99.100:2376

env 终端查看连接某docker宿主机的环境变量

$ docker-machine env
SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\junchow\.docker\machine\machines\default
SET DOCKER_MACHINE_NAME=default
SET COMPOSE_CONVERT_WINDOWS_PATHS=true
REM Run this command to configure your shell:
REM     @FOR /f "tokens=*" %i IN ('docker-machine env') DO @%i

inspect 终端查看docker宿主机的更新信息

$ docker-machine inspect
{
    "ConfigVersion": 3,
    "Driver": {
        "IPAddress": "192.168.99.100",
        "MachineName": "default",
        "SSHUser": "docker",
        "SSHPort": 51111,
        "SSHKeyPath": "C:\\Users\\junchow\\.docker\\machine\\machines\\default\\id_rsa",
        "StorePath": "C:\\Users\\junchow\\.docker\\machine",
        "SwarmMaster": false,
        "SwarmHost": "tcp://0.0.0.0:3376",
        "SwarmDiscovery": "",
        "VBoxManager": {},
        "HostInterfaces": {},
        "CPU": 1,
        "Memory": 1024,
        "DiskSize": 20000,
        "NatNicType": "82540EM",
        "Boot2DockerURL": "",
        "Boot2DockerImportVM": "",
        "HostDNSResolver": false,
        "HostOnlyCIDR": "192.168.99.1/24",
        "HostOnlyNicType": "82540EM",
        "HostOnlyPromiscMode": "deny",
        "UIType": "headless",
        "HostOnlyNoDHCP": false,
        "NoShare": false,
        "DNSProxy": true,
        "NoVTXCheck": true,
        "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": [],
            "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": "C:\\Users\\junchow\\.docker\\machine\\certs",
            "CaCertPath": "C:\\Users\\junchow\\.docker\\machine\\certs\\ca.pem",
            "CaPrivateKeyPath": "C:\\Users\\junchow\\.docker\\machine\\certs\\ca-key.pem",
            "CaCertRemotePath": "",
            "ServerCertPath": "C:\\Users\\junchow\\.docker\\machine\\machines\\default\\server.pem",
            "ServerKeyPath": "C:\\Users\\junchow\\.docker\\machine\\machines\\default\\server-key.pem",
            "ClientKeyPath": "C:\\Users\\junchow\\.docker\\machine\\certs\\key.pem",
            "ServerCertRemotePath": "",
            "ServerKeyRemotePath": "",
            "ClientCertPath": "C:\\Users\\junchow\\.docker\\machine\\certs\\cert.pem",
            "ServerCertSANs": [],
            "StorePath": "C:\\Users\\junchow\\.docker\\machine\\machines\\default"
        }
    },
    "Name": "default"
}

ip 终端查看docker宿主机地址

$ docker-machine ip
192.168.99.100

url 终端查看docker主机的URL

$ docker-machine url
tcp://192.168.99.100:2376

upgrade 终端更新宿主机上docker版本为最新

$ docker-machine upgrade
Waiting for SSH to be available...
Detecting the provisioner...
Upgrading docker...
Stopping machine to do the upgrade...
Upgrading machine "default"...
Copying C:\Users\junchow\.docker\machine\cache\boot2docker.iso to C:\Users\junchow\.docker\machine\machines\default\boot2docker.iso...
Starting machine back up...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
(default) Waiting for an IP...
Restarting docker...

ssh 终端使用SSH远程连接docker宿主机

$ docker-machine ssh default
   ( '>')   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

docker@default:~$

scp 终端使用SCP远程传输文件给docker宿主机

$ docker-machin scp default
Usage: docker-machine scp [OPTIONS] [arg...]

Copy files between machines

Description:
   Arguments are [[user@]machine:][path] [[user@]machine:][path].

Options:

   --recursive, -r      Copy files recursively (required to copy directories)
   --delta, -d          Reduce amount of data sent over network by sending only the differences (uses rsync)
   --quiet, -q          Disables the progress meter as well as warning and diagnostic messages from ssh
Improper number of arguments

regenerate-certs 终端为docker宿主机重新生成TLS认证信息

$ 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...
Host is not running

# 重启失败,杀死虚拟机所有相关进程(VirtualBox)后重试。
$ docker-machine restart default
Restarting "default"...
Starting "default"...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
Error setting up host only network on machine start: C:\Program Files\Oracle\VirtualBox\VBoxManage.exe modifyvm default --nic2 hostonly --nictype2 82540EM --nicpromisc2 deny --hostonlyadapter2 VirtualBox Host-Only Ethernet Adapter #2 --cableconnected2 on failed:
VBoxManage.exe: error: Code E_FAIL (0x80004005) - Unspecified error (extended info not available)
VBoxManage.exe: error: Context: "LockMachine(a->session, LockType_Write)" at line 525 of file VBoxManageModifyVM.cpp

注意事项

可以明显发现,其中一直有一个错误存在:

Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
Error setting up host only network on machine start
VirtualBox版本
VirutalBox进程

说明虚拟机创建或者访问本地网络适配器出现了问题:windows的docker安装需要依赖虚拟机,点开虚拟机找到默认虚拟机,打开网卡,分别指定不同的网络模式然后重启你的虚拟机,这个时候使用quick startterminal还是会报错,图形界面也会报错。

重新下载 VirtualBox https://www.virtualbox.org/wiki/Downloads 的最新版本尝试下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355