本文来源

翻译并总结官方文档,添加自定义示例,参考自Docker 19.03版本官方文档

未来可能归档为:https://docs.docker.com/v19.03/

2020.01.03为https://docs.docker.com/engine/swarm/

本文目标

本文主要演示创建一个小规模的Swarm集群,包含一个管理节点与两个工作节点,概念可以参考https://www.cnblogs.com/hellxz/p/12134386.html

  • 创建Docker Swarm集群
  • 添加节点
  • 部署应用服务
  • 管理Swarm集群

环境说明

  • 三台安装Docker的Linux虚拟机:本文用Docker Machine创建虚拟机
  • Docker版本:18.09.7,理论上1.12版本以后均可
  • 三台虚拟机网络互通

Docker Machine安装参考我的上一篇文章,安装Docker Machine

虚拟机准备

实体机安装Linux或Mac,跳过此节

本文通过一台Linux虚拟机中创建三个虚拟机节点来操作的,虚拟机内存可以开大些,另外需要配置开启Intel VT-x/EPT或AMD-RVI(V)

另外,由于我们要做的实验是在虚拟机下的再创建虚拟机,外部虚拟机与虚拟机内构成内网,在没有设置代理的情况下,我们无法直接通过浏览器直接访问

创建 Swarm 集群(Create a swarm)

创建一个管理节点的虚拟机

$ docker-machine create -d virtualbox manager

连接创建的管理节点虚拟机

$ docker-machine ssh manager1

出现上图已经进入虚拟机了

初始化Swarm集群

$ docker swarm init --advertise-addr 192.168.99.100

初始化完成,在多网卡的情况下,必须使用--advertise-addr指定IP,其它主机必须可以访问此ip,输出中包含新节点加入此节点的命令,我们只需要复制此命令到其它节点上执行

执行docker swarm init的节点自动成为管理节点,节点的ip是ssh到节点后ifconfig查到的

添加节点命令要先复制出来,一会添加节点会用,如果没复制也不要紧

在manager节点输入docker swarm join-token 角色 就能提示token了,上边复制的默认是worker角色的命令

输入docker info查看当前节点的Docker Swarm Mode已经处于激活状态了

执行docker node ls查看当前Swarm集群中节点的情况

*指示当前登录的节点

输出exit退出当前登录的主机

向Swarm添加节点(Add nodes to the swarm)

创建第一个工作节点并ssh连接到这个节点上

$ docker-machine create -d virtualbox worker1
$ docker-machine ssh worker1

执行刚才复制的docker swarm join-token命令,忘了就先去manager节点下执行docker swarm join-token worker来查看命令

$ docker swarm join --token SWMTKN-1-0kr7tkx9ku4rcrl1lny1o8chg9xl24h4nexmz1ctfwz43425uq-egecegeyfaet0volcvo15zia8 192.168.99.100:2377

This node joined a swarm as a worker.

接着创建个worker2,操作不再复述了

查看集群节点情况

连接manager节点,执行命令查看集群状态

$ docker node ls

docker node ls命令仅可以在管理节点使用

部署服务到Swarm集群(Deployed a service)

部署服务只需要使用docker service create加正常的docker命令,还可以指定创建几个备份实例,这里部署2个Nginx

$ docker service create --replicas 2 --name nginx -p 80:80 nginx:mainline-alpine

docker service create命令主要参数:

  • --name - 用来指定服务名,部署服务的容器名使用这个名称作为前缀
  • --replicas - 设置负载实例数

其余参数请自行参考 docker service create --help文档

此命名仅能在manager节点执行

Docker Swarm Mode简介与核心概念 一文中,我们有谈过:服务可以运行在Manager节点上,也可以运行在Worker节点上

部署服务的输出并没有提示具体将服务部署到哪个节点上,接下来我们看看节点情况

查看服务

使用docker service ls查看服务列表,查看具体服务部署在哪个节点使用docker service ps 服务名

如图,我们的服务一个部署到了manger节点上,一个部署在worker1节点上

检查部署在Swarm集群中的服务(Inspect the service)

通过docker service inspect命令检查服务的详细信息,使用--pretty使输出更易读

$ docker service inspect --pretty nginx

除了这种简单的方法外就是普通的办法——去部署的节点上docker ps

Docker Swarm Mode 入门实践的更多相关文章

  1. Docker Swarm 从入门到放弃

    准备工作 我本机是macOS,所以我直接安装了docker desktop,其中包含了docker-machine,不用单独安装. 安装docker主机驱动 我在网上很多人提到了使用virtualbo ...

  2. 【docker 一】入门实践、环境部署、基本操作指令、镜像库、数据卷

    简述 `docker是如火如荼的容器技术,今后会陆续上传关于微服务技术的学习笔记,希望能和大家一起学习一起分享!` docker环境搭建 1.获取最新版的Docker安装包 $ wget -qO- h ...

  3. Docker 入门实践

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:张戈 导语 本文从新手视角记录了一个实际的Dokcer应用场景从创建.上传直到部署的详细过程,并简单的介绍了腾讯云容器服务的使用方法 ...

  4. 【实战】Docker入门实践二:Docker服务基本操作 和 测试Hello World

    操作环境 操作系统:CentOS7.2 内存:1GB CPU:2核 Docker服务常用命令 docker服务操作命令如下 service docker start #启动服务 service doc ...

  5. 微服务 + Docker + Kubernetes 入门实践 目录

    微服务 + Docker + Kubernetes 入门实践: 微服务概念 微服务的一些基本概念 环境准备 Ubuntu & Docker 本文主要讲解在 Ubuntu 上安装和配置 Dock ...

  6. 这是一次 docker 入门实践

    前言 其实接触 docker 也有一段时间了,但是一直没有做下总结,现在网上关于 docker 的介绍也有很多了,本着好记性不如烂笔头的原则,还是自己再记录一波吧. 实现目标 安装 docker ce ...

  7. 项目中docker swarm实践

    docker swarm 集群服务通信 前置要求 服务需要在同一个docker swarm集群中 服务需要处于同一个overlay网络上 服务需要暴露容器端口 有2个以上服务名不同的服务 服务部署流程 ...

  8. docker 实践九:docker swarm

    介绍了 docker 三剑客中的 docker-machine 和 docker-compose 之后,就剩下一个 docker swarm 了.那本篇的主角就是它了. 注:环境为 CentOS7,d ...

  9. 生产环境中使用Docker Swarm的一些建议

    译者按: 实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行.然而,面对Kubernetes, Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它 ...

随机推荐

  1. 深度学习——Xavier初始化方法

    “Xavier”初始化方法是一种很有效的神经网络初始化方法,方法来源于2010年的一篇论文<Understanding the difficulty of training deep feedf ...

  2. selenium webdriver学习(五)------------iframe的处理(转)

    selenium webdriver学习(五)------------iframe的处理 博客分类: Selenium-webdriver 如何定位frame中元素  有时候我们在定位一个页面元素的时 ...

  3. 使用jquery.form.js的ajaxsubmit方法提交数据的Bug

    周五同事遇到一个很奇怪的问题,调到下班,虽然问题解决了,但是不知道问题的具体原因,回来翻了翻代码,才发现症结所在,下面就分享出来,供遇到同样问题的同行们参考: 先把问题描述一下,做的功能是使用ajax ...

  4. Python os.getcwd() 方法

    Python os.getcwd() 方法  Python OS 文件/目录方法 概述 os.getcwd() 方法用于返回当前工作目录. 语法 getcwd()方法语法格式如下: os.getcwd ...

  5. 深入Java线程管理(二):线程的生命周期

    Java线程的生命周期 一个线程的产生是从我们调用了start方法开始进入Runnable状态,即可以被调度运行状态,并没有真正开始运行,调度器可以将CPU分配给它,使线程进入Running状态,真正 ...

  6. 洛谷P2146 [NOI2015]软件包管理器 题解 树链剖分+线段树

    题目链接:https://www.luogu.org/problem/P2146 本题涉及算法: 树链剖分: 线段树(区间更新及求和,涉及懒惰标记) 然后对于每次 install x ,需要将 x 到 ...

  7. H3C PPP MP配置示例三

  8. java框架之shiro

    #shiro简介 一.简介 Apache Shiro 是一个强大而灵活的开源安全框架,可以用于应用程序的身份验证,授权,会话管理和加密. Authentication:有时也简称为“登录”,这是一个证 ...

  9. 关于 FormData 和 URLSearchParams

    一.FormData FormData 接口提供了一种表示表单数据的键值对的构造方式,经过它的数据可以使用 XMLHttpRequest.send() 方法送出,本接口和此方法都相当简单直接.如果送出 ...

  10. Python--day63--添加书籍和修改表结构的注意事项