Docker集群的概念

群集是一组运行Docker并加入集群的计算机。在此之后,您继续运行您习惯使用的Docker命令,但现在它们由群集管理器在群集上执行。群中的机器可以是物理的或虚拟的。加入群组后,它们被称为节点。

Swarm管理器可以使用多种策略来运行容器,例如“最节点的节点” - 它使用容器填充利用率最低的机器。,它确保每台机器只获得指定容器的一个实例。您指示swarm管理器在Compose文件中使用这些策略。

群集管理器是群中唯一可以执行命令的机器,或者授权其他机器作为工作者加入群集。工人只是在那里提供能力,没有权力告诉任何其他机器它能做什么和不能做什么。

1. 安装Docker Machine

安装

$ base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo install /tmp/docker-machine /usr/local/bin/docker-machine

  

检查安装版本

[root@docker ~]# docker-machine version
docker-machine version 0.16.0, build 702c267f

  

安装bash完成脚本

Machine存储库提供了几个bash脚本,可添加以下功能:

  • 命令完成
  • 一个在shell提示符下显示活动计算机的函数
  • 一个函数包装器,它添加一个docker-machine use子命令来切换活动机器
base=https://raw.githubusercontent.com/docker/machine/v0.16.0
for i in docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash
do
sudo wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d
done

  使其生效

source /etc/bash_completion.d/docker-machine-prompt.bash

要启用docker-machineshell提示,请添加 $(__docker_machine_ps1)到您的PS1设置中~/.bashrc。

PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '

  

安装VirtualBox

参考: yum安装VirtualBox

如果是在Vmare的机器中还需要开启虚拟化

docker-machine使用VirtualBox驱动程序创建几个VM

docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2

  

列出计算机并获取其IP地址

[root@docker ~]# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm1 - virtualbox Running tcp://192.168.99.100:2376 v18.09.1
myvm2 - virtualbox Running tcp://192.168.99.101:2376 v18.09.1

  

2. 初始化SWARM并添加节点

第一台机器充当管理器,第二台是工人节点,它执行管理命令并验证工作节点加入群。

您可以使用命令向VM发送命令docker-machine ssh。指示myvm1 成为一个swarm管理器docker swarm init并查找如下输出:

[root@docker ~]#docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100"
Swarm initialized: current node (kx0ou7byih7sjb4hudxearizw) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3ofjl4coq8n9z2bw6t4nnr8zzuhrg7bmlf94f59ybjee74fs0d-dr5g7ec9nzkb2ypj9q3275l3n 192.168.99.100:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

  端口2366和2377

  • 2377:群集管理端口
  • 2376:Docker守护程序端口

将第二台虚拟机加入集群

[root@docker ~]#docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-3ofjl4coq8n9z2bw6t4nnr8zzuhrg7bmlf94f59ybjee74fs0d-dr5g7ec9nzkb2ypj9q3275l3n 192.168.99.100:2377"
This node joined a swarm as a worker.

  

查看集群中的节点

[root@docker ~]#docker-machine ssh myvm1 "docker node ls"
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
kx0ou7byih7sjb4hudxearizw * myvm1 Ready Active Leader 18.09.1
yqg18tj1ujx13eb47sb10ozvk myvm2 Ready Active 18.09.1

  

离开群,在需要离开的节点运行

docker swarm leave

  

3. 在集群中部署应用程序

为管理节点(myvm1)配置shell

到目前为止,您已经将Docker命令包装在docker-machine ssh与VM通信中。另一种选择是运行docker-machine env <machine>以获取并运行一个命令,该命令将当前shell配置为与VM上的Docker守护程序通信。此方法适用于下一步,因为它允许您使用本地docker-compose.yml文件“远程”部署应用程序,而无需将其复制到任何位置。

[root@docker ~]#docker-machine env myvm1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/myvm1"
export DOCKER_MACHINE_NAME="myvm1"
# Run this command to configure your shell:
# eval $(docker-machine env myvm1)
[root@docker ~]#eval $(docker-machine env myvm1)
[root@docker ~ [myvm1]]#docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm1 * virtualbox Running tcp://192.168.99.100:2376 v18.09.1
myvm2 - virtualbox Running tcp://192.168.99.101:2376 v18.09.1

  可以看见myvm1变成了活动状态

取消当前shell

eval $(docker-machine env myvm1)

  

在swarm管理器上部署应用程序
[root@docker ~ [myvm1]]#docker stack deploy -c docker-compose.yml getstartedlab
Creating network getstartedlab_webnet
Creating service getstartedlab_web

 

可以通过下面的命令查看服务已经分布在myvm1和myvm2上了

[root@docker ~ [myvm1]]#docker stack ps getstartedlab
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
r2bg0k9j68br getstartedlab_web.1 scottcho/flask:v1 myvm1 Running Running 3 minutes ago
kumrzfmznjmq getstartedlab_web.2 scottcho/flask:v1 myvm2 Running Running 2 minutes ago
1w3p5qe3fbhf getstartedlab_web.3 scottcho/flask:v1 myvm1 Running Running 3 minutes ago
bxlvev660m1o getstartedlab_web.4 scottcho/flask:v1 myvm2 Running Running 2 minutes ago
62jts8h2qplt getstartedlab_web.5 scottcho/flask:v1 myvm2 Running Running 2 minutes ago

  

访问服务

[root@docker ~ [myvm1]]#curl http://192.168.99.100:4000
<h3>Hello World!</h3><b>Hostname:</b> f612eb9ae8f3<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>[root@docker ~ [myvm1]]#curl http://192.168.99.101:4000
<h3>Hello World!</h3><b>Hostname:</b> 37e0a0449988<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>[root@docker ~

  

内部网络图

停止和启动VM

docker-machine stop myvm2
docker-machine start myvm2

  

   

Docker-集群swarm(5)的更多相关文章

  1. Docker 集群Swarm创建和Swarm Web管理

    关于Docker Swarm更多的介绍请查看<Docker管理工具-Swarm部署记录> 一.环境配置 1.安装环境 # cat /etc/redhat-release CentOS Li ...

  2. Docker集群实验环境布署--swarm【1 架构说明】

    在读完<Docker技术入门与实践>这本书后,基本上已对Docker了有一些入门的理解,以及我们为什么要使用Docker 答:我们发现在实际工作中,通过openstack一旦把一个VM创建 ...

  3. Docker Swarm搭建多服务器下Docker集群

    对于有多台服务器来讲,如果每一台都去手动操控,那将会是一件非常浪费时间的事情,毕竟时间这东西,于我们而言,十分宝贵,或许在开始搭建环境的时候耗费点时间,感觉是正常的,我也如此,花费大堆时间在采坑和填坑 ...

  4. docker探索-swarm搭建docker集群(七)

    前言 Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令,docker s ...

  5. Docker集群管理(三)—— docker swarm mode基础教程

    docker从1.12版(及后续版本)集成了swarmkit.可以方便的实现docker集群.它有哪些特点呢: 集成了集群功能 分散设计:manager和worker两种节点. 声明式服务模式 可伸缩 ...

  6. Docker集群管理(二)—— docker+swarm+etcd+shipyard

    引言 前一篇介绍如何简单的搭建一个可视化管理的docker集群,本篇将在此基础之上引入etcd发现服务. 目的 使用etcd发现服务解决swarm内置发现服务的不稳定问题.etcd采用raft算法,这 ...

  7. Docker集群管理(一)—— 基础docker+swarm+shipyard

    目的 学习docker的集群管理,摸索出高可用的docker微服务架构方案.本篇文章只初步的了解下swarm(docker新版已集成了swarm)的使用,了解docker的发现服务的基础方法(dock ...

  8. 一步步创建第一个Docker App —— 3. 创建一个集群Swarm

    原文:https://docs.docker.com/engine/getstarted-voting-app/create-swarm/ 初始化集群 Swarm 1. 使用 ssh 命令登录 man ...

  9. docker swarm的应用----docker集群的构建

    一.docker安装 这里我们安装docker-ce 的18.03版本 yum    -y remove docker  删除原有版本 #安装依赖包 [root@Docker ~]# yum -y i ...

  10. docker(四):集群swarm

    docker使用入门(四):集群swarm swarm是一组位于同一集群且运行docker的机器,用户可以通过swarm manager向swarm输入命令,swarm中的机器可以是虚拟机也可以是物理 ...

随机推荐

  1. Egret 获取不到皮肤中的按钮 id

    最近Egret开发中遇到的Q,Egret 获取不到皮肤中的按钮 id,也就没法针对按钮进行监听和执行对应操作: 问题的关键就是,exml获取应该出现了差错: 经过查询我发现this.skinName的 ...

  2. day2_抓包_python基础

    char抓包, 1,作用,定位问题实在前端还是在后端.2.在overview中查看返回码是否正常,一般是200,在看response中是否正常返回数据,可查看请求时间等 2.在sequence视图中的 ...

  3. flask内容之数据库的管理

    #! /usr/bin/env python # *-* coding: utf-8 *-* from flask import Flask, flash, redirect from flask i ...

  4. JAVA自学笔记08

    JAVA自学笔记08 1.构造方法私有,外界就不能再创建对象 2.说明书的制作过程 1)写一个工具类,在同一文件夹下,测试类需要用到工具类,系统将自动编译工具类:工具类的成员方法一般是静态的,因此在测 ...

  5. django之模型层(model)--建表、查询、删除基础

    要说一个项目最重要的部分是什么那铁定数据了,也就是数据库,这篇就开始带大家走进django关于模型层model的使用,model主要就是操纵数据库不使用sql语句的情况下完成数据库的增删改查.本篇仅带 ...

  6. django之Ajax续

    接上篇随笔.继续介绍ajax的使用. 上篇友情连接:http://www.cnblogs.com/liluning/p/7831169.html 本篇导航: Ajax响应参数 csrf 跨站请求伪造 ...

  7. fontawesome图标字体库组件在服务器上显示不出来图标的解决

    这个组件在我所开发的网站中被大量使用,为网站增色不少.在本地测试的时候所有图标都能显示出来,可一到服务器上就显示不出来了.网上查列出了可能的原因.其一,IIS没有注册字体类型.经过检查,不存在这个问题 ...

  8. 优麒麟 16.04 LTS(长期支持)版本

    Ubuntu Kylin (中文又被称为优麒麟)是基于Ubuntu的一款官方衍生版. 它是一款专门为中国市场打造的免费操作系统.它包括Ubuntu用户期待的各种功能,并配有必备的中文软件及程序. ht ...

  9. Cmake find_package 需要指定具体的so

    需要使用cmake的find_package将boost库添加到项目中,通过cmake --help-module FindBoost 可以查看cmake引入Boost的帮助信息: 可以看到,Boot ...

  10. 一次python 内存泄漏解决过程

    最近工作中慢慢开始用python协程相关的东西,所以用到了一些相关模块,如aiohttp, aiomysql, aioredis等,用的过程中也碰到的很多问题,这里整理了一次内存泄漏的问题 通常我们写 ...