Docker Swarm入门:启动Swarm管理者及代理

本文讲的是Docker Swarm入门:启动Swarm管理者及代理【编者的话】在上一篇文章中开始介绍Docker Swarm入门,并已建好了令牌,下面让我们开始启动管理者容器,这是一切的基础。

启动Swarm管理者及代理

首先,启动Swarm管理者,然后创建代理加入Swarm集群。这两步都在上一篇启动“Swarm”容器时已经完成,下面将使用不用的参数启动集群。由于管理者已经是‘激活’节点,所以可使用以下命令创建Swarm 集群:

$ docker run -d -p 3376:3376 -t -v ~/.docker/machine/machines/manager:/certs:ro swarm manage -H 0.0.0.0:3376
--tlsverify
--tlscacert=/certs/ca.pem
--tlscert=/certs/server.pem
--tlskey=/certs/server-key.pem
token://7c14cbf2a86ecd490a7ea7ae4b795a6b

使用以下配置运行Swarm 集群:

  • -d (or –detach):通过后台运行方式运行Swarm容器,并在启动后输出容器ID
  • -t:分配一个伪终端的输出
  • -p:映射Docker容器的3376端口到Docker主机(你的笔记本)的3376端口,这是容器命令网络连接的默认端口
  • -v:使用只读方式 (ro),将容器的本地卷 (~/.docker/machine/machines/manager) 挂载到指定路径(/certs)
  • 令牌:这就是在上篇中已创建的发现令牌

设置中所面临最大的挑战是设置正确的证书路径。不同的Docker版本及操作系统,证书存放的路径不同。在撰写本文时,Macs环境下,Docker会在home目录下创建一个.docker的文件夹。当我们创建管理者虚拟机时,将在以下路径创建配置文件:machine/machines/manager。

若在启动过程中遇到问题需找到server.key 或server-key.pem文件。可在Docker配置中找到这些文件,便可修改相应的卷挂载路径。

管理者启动后,下一步是启动代理。若需要修改激活的Docker主机为Agent1,可使用如下命令:

$ eval $(docker-machine env agent1)

此命令是告诉Docker客户端,将所有的Docker命令到发送给‘Agent1’主机上的Docker引擎。下面让我们启动Agent1:

$ docker run -d swarm join --addr=$(docker-machine ip agent1):2376 token://7c14cbf2a86ecd490a7ea7ae4b795a6b
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
eada7ab697d2: Pull complete
afaf40cb2366: Pull complete
7495da266907: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:12e3f7bdb86682733adf5351543487f581e1ccede5d85e1d5e0a7a62dcc88116
Status: Downloaded newer image for swarm:latest
99c5ec703dc3230fcf769eb13e639079803ee36c33447a0290a2fb7ffe5e7952

此命令同上一个命令类似,也是启动Docker Swarm容器,但这次是“join”模式,运行在detached方式下(-d)并传递两个参数:

  • addr:标识IP地址及端口,用来通知管理者代理的存在;
  • 令牌:就是之前创建的发现令牌,用来启动管理者

第二个代理也以此类推:

$ eval $(docker-machine env agent2)
$ docker run -d swarm join --addr=$(docker-machine ip agent2):2376 token://7c14cbf2a86ecd490a7ea7ae4b795a6b
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
eada7ab697d2: Pull complete
afaf40cb2366: Pull complete
7495da266907: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:12e3f7bdb86682733adf5351543487f581e1ccede5d85e1d5e0a7a62dcc88116 Status: Downloaded newer image for swarm:latest
0b16ee511399c27d849c6a6c628822375c27755b14719b5295c9038f97ede72a

至此,管理者和两个代理都已启动。下面开始配置连接Docker Swarm 管理者的Docker客户端,并查看环境参数。首先设置DOCKER_HOST环境变量来指向管理者Docker主机:

$ DOCKER_HOST=$(docker-machine ip manager):3376

下面的例子中使用docker-machine的IP命令查找管理者主机的IP地址。同样的,Windows操作系统可执行SET DOCKER_HOST来配置环境变量。只要有DOCKER_HOST环境变量,便可通过执行以下命令查看Swarm集群的相关信息:

$ docker info
Containers: 2
Running: 2
Paused: 0
Stopped: 0
Images: 2
Server Version: swarm/1.2.2
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint
Nodes: 2
agent1: 192.168.99.101:2376
- ID: RDNQ:VD3I:AZPE:LSWW:7NND:XV7C:KHGH:5KR5:MZHG:4I7H:7RMU:XGQG
- Status: Healthy
- Containers: 1
- Reserved CPUs: 0 / 1
- Reserved Memory: 0 B / 1.021 GiB
- Labels: executiondriver=, kernelversion=4.4.8-boot2docker, operatingsystem=Boot2Docker 1.11.1 (TCL 7.0); HEAD : 7954f54 - Wed Apr 27 16:36:45 UTC 2016, provider=virtualbox, storagedriver=aufs
- Error: (none)
- UpdatedAt: 2016-05-22T19:03:35Z
- ServerVersion: 1.11.1
agent2: 192.168.99.102:2376
- ID: DXN7:FLLA:RMDW:HSPS:WT74:YM2I:CM3G:QBY7:FR7G:4WEO:LJ72:XB6L
- Status: Healthy
- Containers: 1
- Reserved CPUs: 0 / 1
- Reserved Memory: 0 B / 1.021 GiB
- Labels: executiondriver=, kernelversion=4.4.8-boot2docker, operatingsystem=Boot2Docker 1.11.1 (TCL 7.0); HEAD : 7954f54 - Wed Apr 27 16:36:45 UTC 2016, provider=virtualbox, storagedriver=aufs
- Error: (none)
- UpdatedAt: 2016-05-22T19:03:32Z
- ServerVersion: 1.11.1
Plugins:
Volume:
Network:
Kernel Version: 4.4.8-boot2docker
Operating System: linux
Architecture: amd64
CPUs: 2
Total Memory: 2.042 GiB
Name: 77d61b0fe67f
Docker Root Dir:
Debug mode (client): false
Debug mode (server): false
WARNING: No kernel memory limit support

输出信息表示目前有两个正在运行的容器(Swarm容器运行在“join”模式)作为代理,并且这些代理是健康的。注意是Docker的主机容器而非客户端应用容器,我们可以通过ps命令查看运行客户端应用的容器:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

如上所料,没有任何客户端应用容器正在运行。

运行Docker容器

三个Docker主机启动后,便可启动一个Docker客户端容器。管理者主机已激活,因此Docker命令行工具发送命令给管理者。执行以下命令来启动Nginx的容器实例:

$ docker run -d -p 80:80 nginx cc6d627873f7b33f910129fafdcc5c544048cc864ef5433e667afc9a88632931

此命令通过nginx:latest镜像启动了容器,运行在detached模式下,并绑定容器的80端口到Docker主机的80端口。下面执行ps命令查看这个容器运行在哪:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc6d627873f7 nginx "nginx -g 'daemon off" 28 seconds ago Up 27 seconds 192.168.99.101:80->80/tcp, 443/tcp agent1/goofy_bassi

输出显示容器运行在Agent1。可打开连接Agent1的浏览器确认容器正在运行:

http://192.168.99.101/

如图二所示:

下面再启动一个实例来展示如何使用Docker Swarm部署第二个实例:

$ docker run -d -p 80:80 nginx
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
737d5d37d5a6 nginx "nginx -g 'daemon off" About a minute ago Up About a minute 192.168.99.102:80->80/tcp, 443/tcp agent2/condescending_galileo
cc6d627873f7 nginx "nginx -g 'daemon off" 3 minutes ago Up 3 minutes 192.168.99.101:80->80/tcp, 443/tcp agent1/goofy_bassi

Docker的ps命令显示一个实例运行在Agent1,另一个运行在Agent2上。Swarm使用了一种算法来决定每个代理运行容器的数量,并部署新的容器在运行容器数量最少的代理上。本例中Agent1上运行了1个容器,而Agent2没有运行容器,因此Swarm将新的容器发布到了Agent2。
可通过以下浏览器URL地址来测试第二个实例:

http://192.168.99.102/

恭喜你,现在有了一个Swarm管理者,两个代理,以及运行在代理上的两个容器。

清理

一旦完成以上步骤可以通过以下步骤来清理环境:

  1. 指定容器前的ID号可停止Docker容器:
    $ docker stop 737
    $ docker stop cc6
    $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    
  2. 使用docker-machine 命令停止Docker主机:
    $ docker-machine stop agent1
    Stopping "agent1"...
    Machine "agent1" was stopped.
    $ docker-machine stop agent2
    Stopping "agent2"...
    Machine "agent2" was stopped.
    $ docker-machine stop manager
    Stopping "manager"...
    Machine "manager" was stopped.
    $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS agent1 - virtualbox Stopped Unknown agent2 - virtualbox Stopped Unknown default - virtualbox Stopped Unknown manager - virtualbox Stopped Unknown
    

这样您便安全的停止了Docker。

结论

本文介绍了Docker Swarm,一种Docker的原生集群解决方案,并一步一步的演示了如何建立一个本地的Docker Swarm集群。Docker Swarm提供了管理代理和运行Docker引擎主机的基本功能,并通过一组代理实现部署Docker容器的功能。当在AWS上运行Docker时, 亚马逊ECS是一种可选的方案,但如果在本地数据中心或另外的私有云环境,Swarm也是一个相当有竞争力的备选方案。

原文链接:Getting Started with Docker Swarm: Part 2(翻译:Chilly)

原文发布时间为:2016-07-30

本文作者:Chilly

本文来自合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:Docker Swarm入门:启动Swarm管理者及代理

时间: 2024-10-22 02:37:53

Docker Swarm入门:启动Swarm管理者及代理的相关文章

Docker Swarm入门:如何搭建原生态Docker集群

本文讲的是Docker Swarm入门:如何搭建原生态Docker集群[编者的话]我们已花大量时间研究Docker及亚马逊的弹性云计算(EC2)容器服务(ECS)组建Docker容器集群的解决方案.而本文将重点阐述通过Docker Swarm搭建原生态Docker集群的方法. Docker Swarm介绍 Docker Swarm是Docker原生态的集群技术.他可同Docker或者Docker-Machine的命令行行工具配合,提供在主机集群上部署容器引擎的基本功能.Docker Swarm同

Docker Swarm入门(三)Swarm SOA举例

本文讲的是Docker Swarm入门(三)Swarm SOA举例,[编者的话]本文作者Matt Bajor热衷Docker及相关产品的研究,本文是他写的Docker Swarm入门系列的第三篇,文中描述了Docker Swarm的SOA架构及其基本的属性,大致介绍了SOA架构的相关的层次,包括程序层.集群层.服务分发层.以及路由层. Docker Swarm带来的最令人兴奋的功能之一是用非常小的经费就能构建一个现代化的.有弹性的以及灵活的架构.用户能够与由Docker主机构建的多样化的集群进行

Docker Swarm入门(二)配置选项与基本运行环境要求

本文讲的是Docker Swarm入门(二)配置选项与基本运行环境要求,[编者的话]本文作者Matt Bajor热衷Docker及相关产品的研究,本文是他写的Docker Swarm入门系列的第二篇,主要介绍了Docker Swarm的最基本的配置选项和运行要求.作者通过实际例子介绍了Swarm的几个基本的发现服务及其对于容器的调度策略,最后还介绍了如何在Swarm集群通信中使用安全传输协议. Docker Swarm集群运行环境的最低要求 创建基本的Docker Swarm集群对运行环境的要求

Docker技术入门与实战(第2版).

容器技术系列 Docker技术入门与实战 第2版 杨保华 戴王剑 曹亚仑 编著 图书在版编目(CIP)数据 Docker技术入门与实战 / 杨保华,戴王剑,曹亚仑编著. -2版. -北京:机械工业出版社,2017.1 (容器技术系列) ISBN 978-7-111-55582-7 I. D- II. ①杨- ②戴- ③曹- III. Linux操作系统-程序设计 IV. TP316.85 中国版本图书馆CIP数据核字(2016)第308604号 本书从Docker基本原理开始,深入浅出地讲解Do

Mac上使用Docker如何快速启动MySQL测试_docker

本文主要讨论使用Docker快速启动 MySQL 测试的方法,包括Mac环境.一起看看吧! 近来业界有很多对Docker的讨论,其生态系统发展得很快,然而,从简单的"入门"或"引导"类的文章中能容易地找到成熟的技术,但Docker不然.我在Mac上试玩过Docker,但Mac绝对是Docker界的二等公民.当我在Giuseppe的博客上看到关于在Mac上使用新Docker beta<Docker for Mac beta and MySQL>一文时,决定

Docker快速入门以及环境配置详解_docker

前言 数据科学开发环境配置起来让人头疼,会碰到包版本不一致.错误信息不熟悉和编译时间漫长等问题.这很容易让人垂头丧气,也使得迈入数据科学的这第一步十分艰难.而且这也是一个完全不常见的准入门槛. 还好,过去几年中出现了能够通过搭建孤立的环境来解决这个问题的技术.本文中我们就要介绍的这种技术名叫Docker.Docker能让开发者简单.快速地搭建数据科学开发环境,并支持使用例如Jupyter notebooks等工具进行数据探索. 简介 Docker 最初 dotCloud 公司内部的一个业余项目

Docker从入门到精通系列(1)---第一个web应用

本文为minimicall原创文章,转载需注明出处:http://blog.csdn.net/minimicall 在继<阿里云部署Docker>之后,我决定系统的出一系列<Docker从入门到精通>的深度记录文章,这源于有一天图灵出版社的一个编辑联系我,问我有没有兴趣写Docker方面的书籍进行出版. 本文的目标是建立一个Docker web app.这样,你就可以直观的感受,docker是如何部署一个web应用. 首先,我们建立一个空目录来存放我们需要的文件. 我们建立的是一个

docker 容器 后台启动模式 启动时候启动的服务 如何进行 日志重定向,ENTRYPOINT [&amp;amp;quot;/usr/bin/python&amp;amp;quot;, &amp;amp;quot;nohup /ABC

问题描述 docker容器后台启动模式启动时候启动的服务如何进行日志重定向,ENTRYPOINT["/usr/bin/python","nohup/ABC.py>xxx.log&"]吗?该问题来自CSDNDocker技术交流群(303806405),由版主xinshubiao整理.

Docker Container同时启动多服务

Docker Container同时启动多服务 转载请注明来自:http://blog.csdn.net/wsscy2004 昨天踩了个天坑,我有一个基本的镜像centos6.5+ssh,是通过Dockerfile build的,利用CMD命令启动ssh. 通过centos6.5+ssh镜像,我想build一个rabbitmq镜像,Dockerfile中CMD启动rabbitmq服务.虽然我知道Dockerfile中的CMD只能有一个,但没想到创建另一个image,也会继承FROM image的