目录搜索
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
文字

  • 1:概况介绍

  • 2:集装箱

  • 3:服务

  • 4:成群

  • 5:堆叠

  • 6:部署应用程序

先决条件

  • 安装Docker版本1.13或更高版本...

  • 获取Docker撰写。在Docker for Mac和Docker for Windows中,它已预先安装,所以你很好用。在Linux系统上,您需要直接安装它。在没有Hyper-V的 Windows 10系统之前,使用Docker Toolbox。

  • 阅读第1部分中的方向。

  • 了解如何在第二部分...

  • 确保您已经发布了friendlyhello你创造的形象将其推送到注册表.我们将在这里使用这个共享的图像。

  • 确保你的图像作为一个部署的容器。运行此命令,在您的信息开槽usernamerepotagdocker run -p 80:80 username/repo:tag,然后访问http://localhost/

导言

在第3部分中,我们扩展了我们的应用程序并启用了负载平衡。要做到这一点,我们必须在分布式应用程序的层次结构中提升一级:服务...

  • 堆叠

  • 服务你在这里

  • 容器(第2部分涵盖)

关于服务

在分布式应用程序中,应用程序的不同部分被称为“服务”。例如,如果您想象一个视频共享站点,它可能包括一个用于将应用程序数据存储在数据库中的服务,一个用于在用户上传某些内容后在后台进行视频转换的服务,以及一个用于前端的服务,等等。

服务实际上只是“生产中的容器”。服务只运行一个映像,但它编码了映像的运行方式--应该使用哪些端口,应该运行多少个容器副本,以便服务具有所需的容量,等等。扩展服务会改变运行该软件的容器实例的数量,为流程中的服务分配更多的计算资源。

幸运的是,使用Docker平台定义、运行和扩展服务非常容易--只需编写一个docker-compose.yml档案。

你的第一次docker-compose.yml档案

docker-compose.yml文件是一个YAML文件,它定义了Docker容器在生产中的行为方式。

docker-compose.yml

将此文件保存为docker-compose.yml你想去哪里都行。确保你有推送图像你在第二部分到注册表,并更新以下内容.yml通过替换username/repo:tag还有你的图像细节。

version: "3"services:
  web:
    # replace username/repo:tag with your name and image details
    image: username/repository:tag
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:      - "80:80"
    networks:      - webnet
networks:
  webnet:

docker-compose.yml文件告诉Docker执行以下操作:

  • 拉我们在第2步上传的图像从登记处。

  • 运行该图像的5个实例作为所调用的服务web,限制每个实例使用最多10%的CPU(跨所有核心)和50MB的RAM。

  • 如果容器失败,立即重新启动容器。

  • 将主机上的端口80映射到web是80号港口。

  • web通过称为负载平衡的网络指示容器共享端口80 webnet。(在内部,容器本身将web在临时端口上发布到80端口。)

  • webnet使用默认设置定义网络(这是一个负载平衡覆盖网络)。

想知道撰写文件版本,名称和命令吗?请注意,我们将撰写文件设置为version: "3"。这基本上使得群集模式兼容。我们可以使用部署密钥(仅适用于Compose文件格式版本3.x或更高版本)及其子选项,以便为每个服务(例如web)负载均衡和优化性能。我们可以使用该docker stack deploy命令运行该文件(也仅在Compose文件版本3.x及更高版本上受支持)。您可以使用docker-compose up运行非swarm配置的版本3文件,但我们正在关注堆栈部署,因为我们正在构建一个swarm示例。您可以将撰写文件命名为任何您想使其对您具有逻辑意义的内容; docker-compose.yml只是一个标准名称。我们可以轻松地调用此文件docker-stack.yml 或者对我们的项目更具体的东西。

运行您的新负载平衡应用程序。

之前,我们可以使用docker stack deploy命令我们将首先运行:

docker swarm init

::我们会理解这个命令的意思第4部分.如果你不跑docker swarm init您将得到一个错误,即“此节点不是群集管理器”。

现在让我们运行它。你必须给你的应用程序一个名字。在这里,它被设置为getstartedlab*

docker stack deploy -c docker-compose.yml getstartedlab

我们的单个服务堆栈正在一个主机上运行我们部署的映像的5个容器实例。让我们调查一下。

获取应用程序中的一个服务的服务ID:

docker service ls

码头工人成群运行的任务,产生容器。任务有状态和它们自己的ID:

docker service ps <service>

:Docker对Swarms的支持是使用一个名为SwarKit的项目构建的。SwarkKit任务不需要是容器,但是Docker群集任务被定义为生成它们。

让我们检查一个任务,并将输出限制在容器ID上:

docker inspect --format='{{.Status.ContainerStatus.ContainerID}}' <task>

反之亦然,检查容器ID,并提取任务ID:

docker inspect --format="{{index .Config.Labels \"com.docker.swarm.task.id\"}}" <container>

现在列出所有5个容器:

docker container ls -q

你可以跑curl http://localhost连续几次,或者转到浏览器中的那个URL,然后点击刷新几次。无论哪种方式,您都会看到容器ID的变化,演示负载平衡;对于每个请求,将以循环的方式选择5个副本中的一个来响应。

在此阶段,容器可能需要30秒才能响应HTTP请求。这并不表示Docker或S批的性能,而是一个未满足的Redis依赖关系,我们将在本教程后面讨论。

缩放应用程序

您可以通过更改replicas价值docker-compose.yml,保存更改,并重新运行docker stack deploy指挥:

docker stack deploy -c docker-compose.yml getstartedlab

Docker将进行就地更新,无需先拆下堆栈或杀死任何容器。

现在,重新运行docker container ls -q若要重新配置已部署的实例,请执行以下操作。如果您扩展副本,那么会启动更多的任务,从而启动更多的容器。

把应用程序和蜂群取下来

docker stack rm*

docker stack rm getstartedlab

这会删除应用程序,但我们的单节点群仍在运行(如图所示docker node ls)。拿下群落docker swarm leave --force

站起来和用Docker扩展你的应用程序一样容易。您已经在学习如何在生产中运行容器方面迈出了一大步。接下来,您将学习如何在一组Docker机器上运行这个应用程序。

:编写这样的文件用于使用Docker定义应用程序,并且可以使用码头云,或者在您选择的任何硬件或云提供商上。码头企业版...

关于“第四部分”

简述和备忘单(可选)

这是本页所涵盖内容的终端记录*

总而言之,在打字docker run很简单的情况下,生产中容器的真正实现将其作为服务运行。服务在Compose文件中编写容器的行为,此文件可用于缩放,限制和重新部署我们的应用程序。可以在运行时使用与启动服务相同的命令对服务进行更改:docker stack deploy

在此阶段需要研究的一些命令:

docker stack ls                                            # List stacks or apps
docker stack deploy -c <composefile> <appname>  # Run the specified Compose file
docker service ls                 # List running services associated with an app
docker service ps <service>                  # List tasks associated with an app
docker inspect <task or container>                   # Inspect task or container
docker container ls -q                                      # List container IDs
docker stack rm <appname>                             # Tear down an application
上一篇:下一篇: