docker/docker swarm学习

docker好像越来越流行了,容器化就类似于框架的感觉,封装的越来越多,屏蔽了细节。

docker

docker按层次有这几个层:

  • stack
    • 栈,代表一个功能整体,比如提供一个网站服务。它可以包含多个service
  • service
    • 服务,代表一个单一功能,多个单一功能,整合成为一个完成功能。每个service包含多个container
  • container/task
    • 我的理解这两个概念其实是对等的,当然我的理解可能有误
    • service可以有多个实例,每一个container代表service的一个实例,这是容器化的一个显著特点,请求可以在各个实例间均衡负载

docker 使用的通常流程:

  1. Docker镜像制作
  2. 创建Dockerfile
  3. docker build: 根据Dockerfile生成docker镜像
  4. docker push: 将docker镜像推送到镜像仓库,供其他主机或之后使用
  5. 根据镜像,搭建应用
  6. 生成docker composeyml文件,描述stack包含的服务
  7. docker stack deploy部署应用
  8. 镜像或者容器数量有更新时,通过docker stack deploy更新部署

docker swarm

docker swarm与kubernetes对应,用于统一管理节点。
单独的一个stack可以在一台机器上运行,而如果想做高可用,就离不了多台机器部署,同时服务,这时可以用docker swarm。

docker swarm的节点分为manager节点和worker节点

swarm 初始化

  • manager节点管理整个swarm,管理命令仅能在manager节点运行。
  • workder节点加入manager节点后,由manager节点管控

docker swarm的使用其实与前面docker使用的流程类似。使用docker swarm前,首先在manager节点电脑上运行

docker swarm init --advertise-addr {url}

其中url是加入服务广播节点,我用的阿里云服务器测试的,如果不指定,会默认成私有ip,从而其他服务器无法加入。

在执行初始化后,控制台会给出提示命令,在worker节点的机器上,输入该命令,就能加入这个swarm了,类似如下格式:

docker swarm join xxxxxxxxxxxxxxx

部署stack

初始化swarm后,其实后面的操作和第一部分docker操作一样,deploy服务即可。

所不同的是,未启用swarm时,container只在本机创建,而启用swarm后,container会自动分配在不同的主机中创建。
当访问服务时,docker swarm会自动在各个container以及节点间进行负载。

docker 相关管理命令

  • docker service ls
  • docker stack ls
  • docker service ps
  • docker stack ps
  • docker leave : worker节点退出swarm
  • docker leave --force: manager节点需要指定force选项退出

其他

注意docker使用了4789 UDP端口做负载均衡,7946 TCP/UDP端口做节点发现服务。一般云主机供应商防火墙会组织这些端口,想要正常负载的话,需要在防火墙中打开。

阿里云夸区域的主机,私有ip不通,所以注意worker和manager节点都要通过--adevertise-addr指定主机的公网ip才行

posted @ 2020-03-31 21:25  mosakashaka  阅读(178)  评论(0编辑  收藏  举报