目录搜索
ComposeAbout versions and upgrading (Compose)ASP.NET Core + SQL Server on Linux (Compose)CLI environment variables (Compose)Command-line completion (Compose)Compose(组成)Compose command-line reference(组合命令行参考)Control startup order (Compose)Django and PostgreSQL (Compose)Docker stacks and distributed application bundles (Compose)docker-compose build(docker-compose构建)docker-compose bundledocker-compose configdocker-compose createdocker-compose downdocker-compose eventsdocker-compose execdocker-compose helpdocker-compose imagesdocker-compose killdocker-compose logsdocker-compose pausedocker-compose portdocker-compose psdocker-compose pulldocker-compose pushdocker-compose restartdocker-compose rmdocker-compose rundocker-compose scaledocker-compose startdocker-compose stopdocker-compose topdocker-compose unpausedocker-compose upEnvironment file (Compose)Environment variables in ComposeExtend services in ComposeFrequently asked questions (Compose)Getting started (Compose)Install ComposeLink environment variables (deprecated) (Compose)Networking in ComposeOverview of Docker ComposeOverview of docker-compose CLIQuickstart: Compose and WordPressRails and PostgreSQL (Compose)Sample apps with ComposeUsing Compose in productionUsing Compose with SwarmEngine.NET Core application (Engine)About images, containers, and storage drivers (Engine)Add nodes to the swarm (Engine)Apply custom metadata (Engine)Apply rolling updates (Engine)apt-cacher-ngBest practices for writing Dockerfiles (Engine)Binaries (Engine)Bind container ports to the host (Engine)Breaking changes (Engine)Build your own bridge (Engine)Configure container DNS (Engine)Configure container DNS in user-defined networks (Engine)CouchDB (Engine)Create a base image (Engine)Create a swarm (Engine)Customize the docker0 bridge (Engine)Debian (Engine)Default bridge networkDelete the service (Engine)Deploy a service (Engine)Deploy services to a swarm (Engine)Deprecated Engine featuresDocker container networking (Engine)Docker overview (Engine)Docker run reference (Engine)Dockerfile reference (Engine)Dockerize an applicationDrain a node (Engine)EngineFAQ (Engine)Fedora (Engine)Get started (Engine)Get started with macvlan network driver (Engine)Get started with multi-host networking (Engine)How nodes work (Engine)How services work (Engine)Image management (Engine)Inspect the service (Engine)Install Docker (Engine)IPv6 with Docker (Engine)Join nodes to a swarm (Engine)Legacy container links (Engine)Lock your swarm (Engine)Manage nodes in a swarm (Engine)Manage sensitive data with Docker secrets (Engine)Manage swarm security with PKI (Engine)Manage swarm service networks (Engine)Migrate to Engine 1.10Optional Linux post-installation steps (Engine)Overview (Engine)PostgreSQL (Engine)Raft consensus in swarm mode (Engine)Riak (Engine)Run Docker Engine in swarm modeScale the service (Engine)SDKs (Engine)Select a storage driver (Engine)Set up for the tutorial (Engine)SSHd (Engine)Storage driver overview (Engine)Store service configuration data (Engine)Swarm administration guide (Engine)Swarm mode key concepts (Engine)Swarm mode overlay network security model (Engine)Swarm mode overview (Engine)Understand container communication (Engine)Use multi-stage builds (Engine)Use swarm mode routing mesh (Engine)Use the AUFS storage driver (Engine)Use the Btrfs storage driver (Engine)Use the Device mapper storage driver (Engine)Use the OverlayFS storage driver (Engine)Use the VFS storage driver (Engine)Use the ZFS storage driver (Engine)Engine: Admin GuideAmazon CloudWatch logs logging driver (Engine)Bind mounts (Engine)Collect Docker metrics with Prometheus (Engine)Configuring and running Docker (Engine)Configuring logging drivers (Engine)Control and configure Docker with systemd (Engine)ETW logging driver (Engine)Fluentd logging driver (Engine)Format command and log output (Engine)Google Cloud logging driver (Engine)Graylog Extended Format (GELF) logging driver (Engine)Journald logging driver (Engine)JSON File logging driver (Engine)Keep containers alive during daemon downtime (Engine)Limit a container's resources (Engine)Link via an ambassador container (Engine)Log tags for logging driver (Engine)Logentries logging driver (Engine)PowerShell DSC usage (Engine)Prune unused Docker objects (Engine)Run multiple services in a container (Engine)Runtime metrics (Engine)Splunk logging driver (Engine)Start containers automatically (Engine)Storage overview (Engine)Syslog logging driver (Engine)tmpfs mountsTroubleshoot volume problems (Engine)Use a logging driver plugin (Engine)Using Ansible (Engine)Using Chef (Engine)Using Puppet (Engine)View a container's logs (Engine)Volumes (Engine)Engine: CLIDaemon CLI reference (dockerd) (Engine)dockerdocker attachdocker builddocker checkpointdocker checkpoint createdocker checkpoint lsdocker checkpoint rmdocker commitdocker configdocker config createdocker config inspectdocker config lsdocker config rmdocker containerdocker container attachdocker container commitdocker container cpdocker container createdocker container diffdocker container execdocker container exportdocker container inspectdocker container killdocker container logsdocker container lsdocker container pausedocker container portdocker container prunedocker container renamedocker container restartdocker container rmdocker container rundocker container startdocker container statsdocker container stopdocker container topdocker container unpausedocker container updatedocker container waitdocker cpdocker createdocker deploydocker diffdocker eventsdocker execdocker exportdocker historydocker imagedocker image builddocker image historydocker image importdocker image inspectdocker image loaddocker image lsdocker image prunedocker image pulldocker image pushdocker image rmdocker image savedocker image tagdocker imagesdocker importdocker infodocker inspectdocker killdocker loaddocker logindocker logoutdocker logsdocker networkdocker network connectdocker network createdocker network disconnectdocker network inspectdocker network lsdocker network prunedocker network rmdocker nodedocker node demotedocker node inspectdocker node lsdocker node promotedocker node psdocker node rmdocker node updatedocker pausedocker plugindocker plugin createdocker plugin disabledocker plugin enabledocker plugin inspectdocker plugin installdocker plugin lsdocker plugin pushdocker plugin rmdocker plugin setdocker plugin upgradedocker portdocker psdocker pulldocker pushdocker renamedocker restartdocker rmdocker rmidocker rundocker savedocker searchdocker secretdocker secret createdocker secret inspectdocker secret lsdocker secret rmdocker servicedocker service createdocker service inspectdocker service logsdocker service lsdocker service psdocker service rmdocker service scaledocker service updatedocker stackdocker stack deploydocker stack lsdocker stack psdocker stack rmdocker stack servicesdocker startdocker statsdocker stopdocker swarmdocker swarm cadocker swarm initdocker swarm joindocker swarm join-tokendocker swarm leavedocker swarm unlockdocker swarm unlock-keydocker swarm updatedocker systemdocker system dfdocker system eventsdocker system infodocker system prunedocker tagdocker topdocker unpausedocker updatedocker versiondocker volumedocker volume createdocker volume inspectdocker volume lsdocker volume prunedocker volume rmdocker waitUse the Docker command line (Engine)Engine: ExtendAccess authorization plugin (Engine)Docker log driver pluginsDocker network driver plugins (Engine)Extending Engine with pluginsManaged plugin system (Engine)Plugin configuration (Engine)Plugins API (Engine)Volume plugins (Engine)Engine: SecurityAppArmor security profiles for Docker (Engine)Automation with content trust (Engine)Content trust in Docker (Engine)Delegations for content trust (Engine)Deploying Notary (Engine)Docker security (Engine)Docker security non-events (Engine)Isolate containers with a user namespace (Engine)Manage keys for content trust (Engine)Play in a content trust sandbox (Engine)Protect the Docker daemon socket (Engine)Seccomp security profiles for Docker (Engine)Secure EngineUse trusted imagesUsing certificates for repository client verification (Engine)Engine: TutorialsEngine tutorialsNetwork containers (Engine)Get StartedPart 1: OrientationPart 2: ContainersPart 3: ServicesPart 4: SwarmsPart 5: StacksPart 6: Deploy your appMachineAmazon Web Services (Machine)Digital Ocean (Machine)docker-machine activedocker-machine configdocker-machine createdocker-machine envdocker-machine helpdocker-machine inspectdocker-machine ipdocker-machine killdocker-machine lsdocker-machine provisiondocker-machine regenerate-certsdocker-machine restartdocker-machine rmdocker-machine scpdocker-machine sshdocker-machine startdocker-machine statusdocker-machine stopdocker-machine upgradedocker-machine urlDriver options and operating system defaults (Machine)Drivers overview (Machine)Exoscale (Machine)Generic (Machine)Get started with a local VM (Machine)Google Compute Engine (Machine)IBM Softlayer (Machine)Install MachineMachineMachine CLI overviewMachine command-line completionMachine concepts and helpMachine overviewMicrosoft Azure (Machine)Microsoft Hyper-V (Machine)Migrate from Boot2Docker to MachineOpenStack (Machine)Oracle VirtualBox (Machine)Provision AWS EC2 instances (Machine)Provision Digital Ocean Droplets (Machine)Provision hosts in the cloud (Machine)Rackspace (Machine)VMware Fusion (Machine)VMware vCloud Air (Machine)VMware vSphere (Machine)NotaryClient configuration (Notary)Common Server and signer configurations (Notary)Getting started with NotaryNotary changelogNotary configuration filesRunning a Notary serviceServer configuration (Notary)Signer configuration (Notary)Understand the service architecture (Notary)Use the Notary client
文字

我们来看看如何在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 createvirtualbox驱动程序一起使用来创建其他本地计算机。

  • 泊坞窗的Windows -您可以使用docker-machine createhyperv驱动程序来创建额外的本地机器。

如果您使用Docker for Windows

Windows版Docker使用Microsoft Hyper-V进行虚拟化,而Hyper-V与Oracle VirtualBox不兼容。因此,您无法同时运行这两个解决方案。但是仍然可以使用docker-machineMicrosoft Hyper-V驱动程序来创建更多本地VM。

先决条件是:

  • 安装Docker for Windows并运行(要求启用虚拟化和Hyper-V,如安装Docker for Windows之前需要了解的内容所述)。

  • 设置Hyper-V驱动程序以使用外部虚拟网络交换机请参阅适用于Microsoft Hyper-V主题的Docker Machine驱动程序,其中包括/machine/drivers/hyper-v.md#example如何执行此操作。

如果您使用的是Mac版Docker

Docker for Mac使用HyperKit,这是一款轻量级的macOS虚拟化解决方案,构建于macOS 10.10 Yosemite及更高版本的Hypervisor.framework之上。

目前,docker-machine createHyperKit 没有驱动程序,因此您将使用virtualbox驱动程序创建本地计算机。(请参阅适用于Oracle VirtualBox的Docker计算机驱动程序。)请注意,您可以在同一个系统上运行HyperKit和Oracle VirtualBox。要了解更多信息,请参阅Docker for Mac与Docker Toolbox。

  • 确保您的系统上正确安装了最新的VirtualBox(作为早期Toolbox安装的一部分,或者手动安装)。

如果您使用的是Docker 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容器,您需要:

  • 创建一个新的(或启动一个现有的)Docker虚拟机

  • 将您的环境切换到新的VM

  • 使用docker客户端创建,加载和管理容器

一旦你创建一台机器,你可以随时重复使用它。像任何VirtualBox VM一样,它在使用之间保持其配置。

这里的示例显示了如何创建和启动计算机,运行Docker命令以及使用容器。

创建一台机器

  1. 打开命令外壳或终端窗口。这些命令示例显示了一个Bash shell。对于不同的shell,例如C Shell,除非另有说明,否则相同的命令是相同的。

  2. 使用docker-machine ls列出可用的机器。在这个例子中,还没有创建机器。$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS

  3. 创建一台机器。运行该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.
  1. 再次列出可用的机器以查看您新铸造的机器。$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * virtualbox运行tcp://192.168.99.187:2376 v1.9.1

  2. 获取新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)“

  3. 将你的外壳连接到新机器上。$ eval“$(docker-machine env default)”  注意:如果您正在使用fish,或者Windows外壳(如Powershell),cmd.exe则上述方法将无法正常工作。相反,请参阅env命令的文档以了解如何为shell设置环境变量。这为Docker客户端将读取的当前shell设置环境变量,它指定TLS设置。每次打开新shell或重新启动计算机时都需要执行此操作。(另请参阅如何在当前shell中取消设置环境变量。)现在可以在此主机上运行Docker命令。

运行容器并尝试使用机器命令

运行一个容器docker run以验证您的设置。

  1. 使用docker run下载并busybox使用简单的'echo'命令运行。$ docker run busybox echo hello world无法在本地查找'busybox'图像存储库busybox e72ac664f4f0:下载完成511136ea3c5a:下载完成df7546f9f060:下载完成e433a6c5b276:下载complete hello world

  2. 获取主机IP地址。Docker主机的IP地址上提供了任何公开的端口,您可以使用以下docker-machine ip命令获得:$ docker-machine ip default 192.168.99.100

  3. 使用以下命令在容器中运行一个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中的环境变量

您可能想要使用当前shell连接到不同的Docker Engine。例如,如果您运行Docker for Mac与Docker Toolbox同时运行,并希望与两个不同的Docker引擎交谈,或者在Docker Cloud上运行群集,并希望在管理群集和使用Docker主机之间切换,那么情况就是这样。在这两种情况下,您都可以选择将当前shell的环境切换到不同的Docker引擎。

  1. 运行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环境变量。

  2. 使用两种方法之一在当前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.
  1. 现在,在运行上述任一命令之后,该命令将不返回任何输出。$ 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.plistunder 的文件~/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 命令行参考

上一篇:下一篇: