Docker Swarm

01 购买服务器

购买服务器(4台-1核2G 一主三从)

  • 确保余额大于100

  • 按量付费,用完即刻释放

  • 主要在同个网段,不然后面互相ping不通需要去做linux认证

k8s至少一个月时间精通,2000元

02 给4台服务器安装docker环境

(xshell同步操作省时间)同步安装

xshell免费版最多开四个链接

1、yum安装gcc相关环境(确保虚拟机可以上外网)

yum -y install gcc
yum -y install gcc-c++

2、卸载旧的版本

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

3、需要的安装包

yum install -y yum-utils

4、设置镜像的仓库

yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 推荐使用阿里云的

5、更新yum软件包索引

yum makecache fast

6、安装docker相关的 docker-ce 社区 ee 企业版

yum install -y docker-ce docker-ce-cli containerd.io

7、启动docker

systemctl start docker

8、使用docker version 是否安装成功

9、配置加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xa2xb78w.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

03 官网swarm文档

swarm地址:https://docs.docker.com/engine/swarm/

img

3.1 工作模式

img

Rft 一致性算法

04 搭建集群

4.1 查一下网络和常用命令

img

img

img

4.2 初始化节点(设置网络)

命令1:初始化节点docker swarm init --advertise-addr 公网/私网 (ip addr 自己查询)

docker swarm init --advertise-addr 本机ip地址(私网)不需要流量省钱hh

img

4.3 加入节点

命令2:docker swarm join 加入一个节点

# 获取令牌
docker swarm join-token manager
docker swarm join-token worker

执行上面图片所示的命令,这个命令可以在主节点输入上面两个命令其中一个得到,之后复制到另外的节点执行即可

docker swarm join --token SWMTKHxxxxxxxx xxx.xxx.xxx:xxxx

img

把后面的节点都搭建进去,类似操作

4.4 检查节点运行情况

docker node ls

img

1、生成主节点init

2、加入(管理者、worker)

目标:双主双从已达成

05 Raft协议

双主双从:假设一个节点挂了!其他节点是否可用!

Raft协议:保证大多数节点存活才可以用,只要>1,集群至少大于3台

实验:

1、将docker1机器停止。宕机!双主,另外一个节点也不能使用了

# 关闭docker
在主节点执行:systemmctl stop docker

docker4节点也是主节点,能用吗?事实是不能!

img

但docker1重启后已经不是老大了

img

2、可以将其他节点离开

docker swarm leave

img

3、work就是工作的,管理节点操作!3台机器设置为了管理节点

img

4.总结

集群,就是要保证可用!3个主节点, >1台管理节点存活!

Raft协议:保证大多数节点存活,才可以使用,高可用

06 体会

弹性、扩缩容!集群!

以后告别docker run!

docker-compose up!启动一个项目。单机!

集群:swarm docker service

容器=》服务!

容器=》服务!=》副本!

redis服务=》10个副本(同时开启10个redis容器)

07 swarm实战

7.1 查看服务有关的命令
docker service xxx

创建服务、动态扩展服务、动态更新服务

img

升级网站的方式:灰度发布:金丝雀发布!

7.2 创建一个服务
docker service create -p 8888:80 --name my-nginx nginx
# docker run 容器启动!不具有扩缩容器
#docker service 服务!具有扩缩容器,滚动更新!

img

7.3 查看服务REPLICAS

img

也可以看更具体的信息
docker server inspect
7.4 动态扩缩容

先run一个容器,把它当成副本

# 更新副本数
docker service update --replicas 数量 容器名

img

服务,集群中任意的节点都可以访问。服务可以有多个副本动态扩缩容实现高可用!

# 扩缩容
docker server scale my-nginx=数量

img

上面这两个操作本质是已有的,没什么区别

扩缩容:不同机子可以自由分配容器

弹性:随时都可以去进行扩缩容

案例:云服务的公司都可以根据这个操作去提供服务器的利用效率

k8s的云原生应用

7.5 小结一下

docker swarm其实并不难

命令也就几个,基本上面都试完了

只要会搭建集群、会启动服务、动态管理容器即可!

08 概念总结

8.1 基本概念

**warm:**集群的管理和编号。docker可以初始化一个swarm集群,其他节点可以加入。(管理,工作者)

node: 就是一个docker节点。多个节点组成一个网络集群。(管理、工作者)

**Service:**任务,可以在管理节点或者工作节点来运行。核心!用户访问!

**Task:**容器内的命令,细节任务!

img

8.2 其他更深层的概念(略)

都是官方文档有的东西,有时间研读一下即可

8.2.1

img

8.2.2 工作流程

img

命令->管理->api->调度->工作节点(创建Task容器维护创建!)

8.2.3 服务副本和全局服务

img

调整service以什么方式运行

img

8.2.4 PublishMode网络模式:
  • Swarm:

  • Overlay:让集群的网络形成一个整体,绑定一起

  • ingress:特殊的Overlay网络!负载均衡的功能!IPVS VIP

虽然docker在4台机器上,实际网络是同一个!ingress网络,是一个特殊的Overlay网络

容器就是玩具,脱离了编排没有任何意义!

Docker其他命令学习方式

Docker Stack

docker-compose 单机部署项目!
Docker Stack部署,集群部署!

img

就几个简单的命令,网上一搜一堆命令说明。

img

甚至还有一些项目案例可参考

# 单机
docker-compose up -d wordpress.yaml
# 集群
docker stack deploy wordpress.yaml
# docker-compose 文件
version: '3.4'
services:
  mongo:
    image: mongo
    restart: always
    networks: 
      - mongo_network
    deploy:
      restart_policy:
        condition: on-failure
      replicas: 2
  mongo-express: 
    image: mongo-express
    restart: always
    networks: 
      - mongo_network
    ports:
      - target: 8081
        published: 80
        protocol: tcp
        mode: ingress
    environment:
      ME_CONFIG_MONGODB_SERVER: mongo
      ME_CONFIG_MONGODB_PORT: 27017
    deploy:
      restart_policy:
        condition: on-failure
      replicas: 1
networks:
  mongo_network:
    external: true

Docker Secret

安全!配置密码,证书!

img

Docker Config

img

学习方式:网上找案例跑一下试试!查看命令帮助文档 --help,官网!

Docker完结及展望

扩展到k8s

云原生时代

云应用
比如电商网站下载下来,修改一些配置!就变成自己的网站

  • 微服务学完,但k8s必学

  • 10台机子以上必然要回k8s

  • 先学go在学k8s会更好

Go语言!必须掌握!Java、Go

Docker是Go开发的
k8s也是Go的项目
Etcd都是Go的项目

imgGo(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算

go 指针!-》入门-》基础语法-》高级对象-》如何操作数据库-》框架

img

关于以上知识点感觉不够的小伙伴,可以进来这里辅助细节学习:https://juejin.cn/post/6967598675820281870

最后,把一位秀儿的评论截取下来:

那些口口声声,JAVA越来越难学的人,应该看着你们,像我一样。我看着你们,满怀羡慕。人类研究了几十年的代码调优,所有的Exception和Error,像是专门为你们准备的礼物。Spring繁荣、中间件繁茂、数据库繁华,现代Java的成果被层层打开,可以尽情地享用。自由学习一门框架,学习一种中间件,欣赏一部(培训班)教学视频,去遥远的地方提issue。很多人,从小你们就在自由探索自己的兴趣,很多人在入行就成为了Spring Collaborator,不惑于自己喜欢什么,不喜欢什么。人与人之间的壁垒被打破。你们只凭相同的引入依赖,就能安装千万个相同的Jar包。你们拥有了我们曾经梦寐以求的权利,自由引入Jar包的权利。你所热爱的,就是你的996!你们有幸遇见这样的Java,但是Java更有幸遇见这样的你们。我看着你们,满怀敬意,向你们的专业态度致敬!你们正在把面向过程的变成面向对象的,把一体的变成分布式的,把的单个的变成集群的,把私有的变成开源的。你们把自己的热爱,变成了一个和成千上万的人分享Java写法的事业,向你们的自信致敬!弱小的人,才害怕新的框架和版本。内心强大的人,从不畏惧高可用与高并发。向你们的大气致敬!小白同而不和,大神美美与共,和而不同。更年轻的身体,容得下更多元的代码风格、编程范式和技术栈。有一天我终于发现,不只是我们在教你们如何提高代码效率,你们也在启发我们怎样去更好地摸鱼。那些抱怨一代不如一代的人,应该看看你们,就像我一样。我看着你们,满怀感激。因为你们,这个世界会更喜欢Java。因为一个社区最好看的风景,就是这个社区的伸手党。因为你们,这世上的文档、博客、专栏所表现的程序员就不再是谢顶、猝死、迷茫,而是NullPointException、ClassNotFoundException、SQLException、StackOverflowError,是心里有福报,眼里有加班,不用活到我们想象中的寿命。我们这一代人的想象力不足以想象你们null的未来,如果你们依然需要我们的祝福,那么——上线吧,Java!我们在同一个残废的互联网!

Docker学习笔记合集(持续更新)

linux入门–服务器购买—宝塔部署环境说明
Nginx简单入门–学习笔记狂神说
Docker基础01–入门总结–(狂神说docker学习笔记)
Docker基础02–Docker容器数据卷详解–(狂神说docker学习笔记)
Docker基础03–Dockerfile详解与镜像发布–(狂神说docker学习笔记)
Docker基础04–Docker网络–(狂神说docker学习笔记)
Docker进阶01–Docker Compose–(狂神说docker学习笔记)
Docker进阶02–Swarm集群、Stack、Secret、Config–(狂神说docker学习笔记)完结撒花

Docker知识点翻阅手册–Docker常用命令、Dockererfile、Compose、网络等整理合集
Docker实战:Mysql、Nginx、web的Docker化部署(安装、自定义镜像、compose管理容器、自定义网络、部署问题及解决)

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐