directory search
Compose About 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 bundle docker-compose config docker-compose create docker-compose down docker-compose events docker-compose exec docker-compose help docker-compose images docker-compose kill docker-compose logs docker-compose pause docker-compose port docker-compose ps docker-compose pull docker-compose push docker-compose restart docker-compose rm docker-compose run docker-compose scale docker-compose start docker-compose stop docker-compose top docker-compose unpause docker-compose up Environment file (Compose) Environment variables in Compose Extend services in Compose Frequently asked questions (Compose) Getting started (Compose) Install Compose Link environment variables (deprecated) (Compose) Networking in Compose Overview of Docker Compose Overview of docker-compose CLI Quickstart: Compose and WordPress Rails and PostgreSQL (Compose) Sample apps with Compose Using Compose in production Using Compose with Swarm Engine .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-ng Best 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 network Delete the service (Engine) Deploy a service (Engine) Deploy services to a swarm (Engine) Deprecated Engine features Docker container networking (Engine) Docker overview (Engine) Docker run reference (Engine) Dockerfile reference (Engine) Dockerize an application Drain a node (Engine) Engine FAQ (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.10 Optional Linux post-installation steps (Engine) Overview (Engine) PostgreSQL (Engine) Raft consensus in swarm mode (Engine) Riak (Engine) Run Docker Engine in swarm mode Scale 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 Guide Amazon 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 mounts Troubleshoot 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: CLI Daemon CLI reference (dockerd) (Engine) docker docker attach docker build docker checkpoint docker checkpoint create docker checkpoint ls docker checkpoint rm docker commit docker config docker config create docker config inspect docker config ls docker config rm docker container docker container attach docker container commit docker container cp docker container create docker container diff docker container exec docker container export docker container inspect docker container kill docker container logs docker container ls docker container pause docker container port docker container prune docker container rename docker container restart docker container rm docker container run docker container start docker container stats docker container stop docker container top docker container unpause docker container update docker container wait docker cp docker create docker deploy docker diff docker events docker exec docker export docker history docker image docker image build docker image history docker image import docker image inspect docker image load docker image ls docker image prune docker image pull docker image push docker image rm docker image save docker image tag docker images docker import docker info docker inspect docker kill docker load docker login docker logout docker logs docker network docker network connect docker network create docker network disconnect docker network inspect docker network ls docker network prune docker network rm docker node docker node demote docker node inspect docker node ls docker node promote docker node ps docker node rm docker node update docker pause docker plugin docker plugin create docker plugin disable docker plugin enable docker plugin inspect docker plugin install docker plugin ls docker plugin push docker plugin rm docker plugin set docker plugin upgrade docker port docker ps docker pull docker push docker rename docker restart docker rm docker rmi docker run docker save docker search docker secret docker secret create docker secret inspect docker secret ls docker secret rm docker service docker service create docker service inspect docker service logs docker service ls docker service ps docker service rm docker service scale docker service update docker stack docker stack deploy docker stack ls docker stack ps docker stack rm docker stack services docker start docker stats docker stop docker swarm docker swarm ca docker swarm init docker swarm join docker swarm join-token docker swarm leave docker swarm unlock docker swarm unlock-key docker swarm update docker system docker system df docker system events docker system info docker system prune docker tag docker top docker unpause docker update docker version docker volume docker volume create docker volume inspect docker volume ls docker volume prune docker volume rm docker wait Use the Docker command line (Engine) Engine: Extend Access authorization plugin (Engine) Docker log driver plugins Docker network driver plugins (Engine) Extending Engine with plugins Managed plugin system (Engine) Plugin configuration (Engine) Plugins API (Engine) Volume plugins (Engine) Engine: Security AppArmor 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 Engine Use trusted images Using certificates for repository client verification (Engine) Engine: Tutorials Engine tutorials Network containers (Engine) Get Started Part 1: Orientation Part 2: Containers Part 3: Services Part 4: Swarms Part 5: Stacks Part 6: Deploy your app Machine Amazon Web Services (Machine) Digital Ocean (Machine) docker-machine active docker-machine config docker-machine create docker-machine env docker-machine help docker-machine inspect docker-machine ip docker-machine kill docker-machine ls docker-machine provision docker-machine regenerate-certs docker-machine restart docker-machine rm docker-machine scp docker-machine ssh docker-machine start docker-machine status docker-machine stop docker-machine upgrade docker-machine url Driver 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 Machine Machine Machine CLI overview Machine command-line completion Machine concepts and help Machine overview Microsoft Azure (Machine) Microsoft Hyper-V (Machine) Migrate from Boot2Docker to Machine OpenStack (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) Notary Client configuration (Notary) Common Server and signer configurations (Notary) Getting started with Notary Notary changelog Notary configuration files Running a Notary service Server configuration (Notary) Signer configuration (Notary) Understand the service architecture (Notary) Use the Notary client
characters

我们来看看如何在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 命令行参考

Previous article: Next article: