©
本文档使用 PHP中文网手册 发布
我们来看看如何在docker-machine
本地虚拟机中创建,使用和管理Docker主机。
随着Docker for Mac和Docker for Windows作为Docker Toolbox的替代品的出现,我们建议您将这些用于Docker主要工作流程。您可以使用这些应用程序在本地系统上本地运行Docker,而无需使用Docker Machine。(请参阅Docker for Mac与Docker工具箱,了解Mac上的解释。)
然而,现在,如果您想创建多个本地机器,您仍然需要Docker Machine来创建和管理用于多节点实验的机器。Mac的Docker和Windows的Docker都包含最新版本的Docker Machine,所以当你安装其中任何一个时,你都会得到docker-machine
。
新解决方案带有自己的本地虚拟化解决方案,而不是Oracle VirtualBox,因此在使用Machine创建本地VM时请记住以下注意事项。
Docker for Mac - 您可以docker-machine create
与virtualbox
驱动程序一起使用来创建其他本地计算机。
泊坞窗的Windows -您可以使用docker-machine create
与hyperv
驱动程序来创建额外的本地机器。
Windows版Docker使用Microsoft Hyper-V进行虚拟化,而Hyper-V与Oracle VirtualBox不兼容。因此,您无法同时运行这两个解决方案。但是仍然可以使用docker-machine
Microsoft Hyper-V驱动程序来创建更多本地VM。
先决条件是:
安装Docker for Windows并运行(要求启用虚拟化和Hyper-V,如安装Docker for Windows之前需要了解的内容所述)。
设置Hyper-V驱动程序以使用外部虚拟网络交换机请参阅适用于Microsoft Hyper-V主题的Docker Machine驱动程序,其中包括/machine/drivers/hyper-v.md#example如何执行此操作。
Docker for Mac使用HyperKit,这是一款轻量级的macOS虚拟化解决方案,构建于macOS 10.10 Yosemite及更高版本的Hypervisor.framework之上。
目前,docker-machine create
HyperKit 没有驱动程序,因此您将使用virtualbox
驱动程序创建本地计算机。(请参阅适用于Oracle VirtualBox的Docker计算机驱动程序。)请注意,您可以在同一个系统上运行HyperKit和Oracle VirtualBox。要了解更多信息,请参阅Docker for Mac与Docker Toolbox。
确保您的系统上正确安装了最新的VirtualBox(作为早期Toolbox安装的一部分,或者手动安装)。
Mac的Docker和Windows的Docker都需要各自操作系统的更新版本,因此具有较旧操作系统版本的用户必须使用Docker Toolbox。
如果您在Mac或旧版Windows系统(不使用Hyper-V)上使用Docker Toolbox,则将使用该virtualbox
驱动程序创建基于Oracle VirtualBox的本地计算机。(请参阅Oracle VirtualBox的Docker Machine驱动程序。)
如果您在具有Hyper-V但无法运行Docker for Windows(例如Windows 8 Pro)的Windows系统上使用Docker Toolbox,则必须使用该hyperv
驱动程序创建本地计算机。(请参阅适用于Microsoft Hyper-V的Docker计算机驱动程序。)
确保你的系统上正确安装了最新的VirtualBox。如果您使用Toolbox或Docker for Windows安装Docker Machine,则会自动安装VirtualBox。
如果您使用快速入门终端启动第一台机器并将终端环境设置为指向它,则会自动创建一个默认机器。如果是这种情况,您仍然可以按照这些步骤进行操作,但创建另一台机器并将其命名为“默认”以外的其他机器(例如,登台或沙箱)。
要运行Docker容器,您需要:
创建一个新的(或启动一个现有的)Docker虚拟机
将您的环境切换到新的VM
使用docker客户端创建,加载和管理容器
一旦你创建一台机器,你可以随时重复使用它。像任何VirtualBox VM一样,它在使用之间保持其配置。
这里的示例显示了如何创建和启动计算机,运行Docker命令以及使用容器。
打开命令外壳或终端窗口。这些命令示例显示了一个Bash shell。对于不同的shell,例如C Shell,除非另有说明,否则相同的命令是相同的。
使用docker-machine ls
列出可用的机器。在这个例子中,还没有创建机器。$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
创建一台机器。运行该docker-machine create
命令,将相应的驱动程序传递给该--driver
标志并提供一个机器名称。如果这是您的第一台机器,请将其命名default
为示例中所示。如果您已有“默认”机器,请为此新机器选择另一个名称。
- If you are using Toolbox on Mac, Toolbox on older Windows systems without Hyper -V, or Docker for Mac, use `virtualbox` as the driver, as shown in this example. (The Docker Machine VirtualBox driver reference is [here](../drivers/virtualbox/index).) (See [prerequisites](index#prerequisite-information) above to learn more.)
- On Docker for Windows systems that support Hyper -V, use the `hyperv` driver as shown in the [Docker Machine Microsoft Hyper -V driver reference](../drivers/hyper-v/index). (See [prerequisites](index#prerequisite-information) above to learn more.) $ docker-machine create --driver virtualbox default Running pre-create checks... Creating machine... (staging) Copying /Users/ripley/.docker/machine/cache/boot2docker.iso to /Users/ripley/.docker/machine/machines/default/boot2docker.iso... (staging) Creating VirtualBox VM... (staging) Creating SSH key... (staging) Starting the VM... (staging) Waiting for an IP... Waiting for machine to be running, this may take a few minutes... Machine is running, waiting for SSH to be available... Detecting operating system of created instance... 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 Docker to this machine, run: docker-machine env default This command downloads a lightweight Linux distribution (boot2docker) with the Docker daemon installed, and creates and starts a VirtualBox VM with Docker running.
再次列出可用的机器以查看您新铸造的机器。$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * virtualbox运行tcp://192.168.99.187:2376 v1.9.1
获取新VM的环境命令。如docker-machine create
命令输出中所述,您需要告诉Docker与新机器通信。你可以用docker-machine env
命令来做到这一点。$ docker-machine env default export DOCKER_TLS_VERIFY =“1”export DOCKER_HOST =“tcp://172.16.62.130:2376”export DOCKER_CERT_PATH =“/ Users / <yourusername> /。docker / machine / machines / default”export DOCKER_MACHINE_NAME =“默认“#运行这个命令来配置你的shell:#eval”$(docker-machine env default)“
将你的外壳连接到新机器上。$ eval“$(docker-machine env default)” 注意:如果您正在使用fish
,或者Windows外壳(如Powershell),cmd.exe
则上述方法将无法正常工作。相反,请参阅env
命令的文档以了解如何为shell设置环境变量。这为Docker客户端将读取的当前shell设置环境变量,它指定TLS设置。每次打开新shell或重新启动计算机时都需要执行此操作。(另请参阅如何在当前shell中取消设置环境变量。)现在可以在此主机上运行Docker命令。
运行一个容器docker run
以验证您的设置。
使用docker run
下载并busybox
使用简单的'echo'命令运行。$ docker run busybox echo hello world无法在本地查找'busybox'图像存储库busybox e72ac664f4f0:下载完成511136ea3c5a:下载完成df7546f9f060:下载完成e433a6c5b276:下载complete hello world
获取主机IP地址。Docker主机的IP地址上提供了任何公开的端口,您可以使用以下docker-machine ip
命令获得:$ docker-machine ip default 192.168.99.100
使用以下命令在容器中运行一个Nginx网络服务器:$ docker run -d -p 8000:80 nginx当图像完成拉动时,您可以在端口8000上的IP地址上点击服务器docker-machine ip
。例如:$ curl $(docker-machine ip default):8000 <!DOCTYPE html> <html> <head> <title>欢迎来到nginx!</ title> <style> body {width:35em; 保证金:0汽车; font-family:Tahoma,Verdana,Arial,sans-serif; } </ style> </ head> <body> <h1>欢迎使用nginx!</ h1> <p>如果您看到此页面,nginx web服务器已成功安装并正常运行。需要进一步配置。</ p> <p>有关在线文档和支持,请参阅<a href="http://nginx.org/"> nginx.org </a>。商业支持是可在<a href="http://nginx.com/"> nginx.com </a>上获得。</ p>
您可以创建和管理尽可能多的运行Docker的本地虚拟机; docker-machine create
再次运行。所有创建的机器都将出现在输出中docker-machine ls
。
如果您暂时完成了主机的使用,则可以将其停止docker-machine stop
并稍后再次启动docker-machine start
。
$ docker-machine stop default $ docker-machine start default
如果没有指定机器名称docker-machine
,某些命令将假定给定的操作应该在名为default
(如果存在)的计算机上运行。由于使用本地虚拟机名称default
是一种常见模式,因此您可以使用最常用的机器命令保存一些输入内容。
例如:
$ docker-machine stop Stopping "default".... Machine "default" was stopped. $ docker-machine start Starting "default"... (default) Waiting for an IP... Machine "default" was started. Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command. $ eval $(docker-machine env) $ docker-machine ip 192.168.99.100
遵循这种风格的命令是:
- `docker-machine config` - `docker-machine env` - `docker-machine inspect` - `docker-machine ip` - `docker-machine kill` - `docker-machine provision` - `docker-machine regenerate-certs` - `docker-machine restart` - `docker-machine ssh` - `docker-machine start` - `docker-machine status` - `docker-machine stop` - `docker-machine upgrade` - `docker-machine url`
对于除default
上述以外的机器和以外的其他机器,您必须始终将该名称明确指定为参数。
您可能想要使用当前shell连接到不同的Docker Engine。例如,如果您运行Docker for Mac与Docker Toolbox同时运行,并希望与两个不同的Docker引擎交谈,或者在Docker Cloud上运行群集,并希望在管理群集和使用Docker主机之间切换,那么情况就是这样。在这两种情况下,您都可以选择将当前shell的环境切换到不同的Docker引擎。
运行env|grep DOCKER
以检查是否设置了DOCKER环境变量。$ env | grep DOCKER DOCKER_HOST = tcp://192.168.99.100:2376 DOCKER_MACHINE_NAME = default DOCKER_TLS_VERIFY = 1 DOCKER_CERT_PATH = / Users / victoriabialas / .docker / machine / machines / default如果它返回输出(如示例所示),则可以取消设置DOCKER
环境变量。
使用两种方法之一在当前shell中取消设置DOCKER环境变量。
- Run the `unset` command on the following `DOCKER` environment variables. unset DOCKER_TLS_VERIFY unset DOCKER_CERT_PATH unset DOCKER_MACHINE_NAME unset DOCKER_HOST
- Alternatively, run a shortcut command `docker-machine env -u` to show the command you need to run to unset all DOCKER variables: $ 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) Run eval $(docker-machine env -u) to unset all DOCKER variables in the current shell.
现在,在运行上述任一命令之后,该命令将不返回任何输出。$ env | grep DOCKER如果您正在运行Docker for Mac,则可以运行Docker命令来与安装了该应用程序的Docker Engine进行对话。如果您在Docker Cloud上运行群集,则可以重新运行export
用于连接群集的命令。由于Docker for Windows与Toolbox不兼容,因此此场景不适用,因为Docker for Windows使用随附的Docker Engine和Docker Machine。
为了确保在每个shell会话开始时自动配置Docker客户端,一些用户喜欢嵌入eval $(docker-machine env default)
他们的shell配置文件(例如~/.bash_profile
文件)。但是,如果default
机器没有运行,这会失败。如果需要,您可以将系统配置为default
自动启动机器。
这里是一个如何在macOS上进行配置的例子。
使用以下内容创建一个名为com.docker.machine.default.plist
under 的文件~/Library/LaunchAgents
:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"> <dict> <key>EnvironmentVariables</key> <dict> <key>PATH</key> <string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string> </dict> <key>Label</key> <string>com.docker.machine.default</string> <key>ProgramArguments</key> <array> <string>/usr/local/bin/docker-machine</string> <string>start</string> <string>default</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
您可以更改default
上面的字符串,以LaunchAgent
启动您所需的任何机器。
在您的云提供商上配置多个Docker主机
了解机器概念
Docker机器所有支持的驱动程序的参考页列表
适用于Oracle VirtualBox的Docker机器驱动程序
适用于Microsoft Hyper-V的Docker机器驱动程序
docker-machine
命令行参考