docker三剑客(machine、compose和swarm集群管理和图形化管理)

一、三剑客的简介

compose、machine 和 swarm 是docker 原生提供的三大编排工具。

1.compose

compose 是用来定义和运行一个或多个容器(通常都是多个)运行和应用的工具。使用 compose 可以简化容器镜像的构建以及容器的运行。
compose 使用 YAML 文件来定义多容器之间的关系。一个 docker-compose up 就可以把完整的应用跑起来。 本质上, compose 把 YAML 文件解析成 docker 命令的参数,然后调用相应的 docker 命令行接口,从而将应用以容器化的方式管理起来。它通过解析容器间的依赖关系顺序地启动容器。而容器间的依赖关系由 YAML 文件中的 links 标记指定。

2.machine

Docker Machine 是一个简化Docker 安装的命令行工具。通过一个简单的命令行即可在相应的平台上安装 Docker,为用户提供了灵活的功能,使得用户可以在任一主机上运行 Docker 容器。简单说,一个 Docker Machine 就是一个 Docker host 主机和经过配置的 Docker client 的结合体。

3.swarm

Swarm 是 Docker 社区提供的原生支持 Docker 集群的工具。 它可以把多个 Docker 主机组成的系统转换成为单一的虚拟 Docker 主机。Swarm 对外提供两种 API。一种是标准的 Docker API,例如 Dokku、Compose、Krane、Flynn、Deis、Jenkins等;另一种是 Swarm 的集群管理 API,用于集群的管理。
但是swarm适用的是小集群。

二、docker-machine的使用

1.安装包的获取

下载后直接就是一个可以使用的二进制命令,可以根据自己的需要下载对应的版本
在这里插入图片描述
在这里插入图片描述

2.创建machine

machine指的是docker daemon主机,其实就是在host上安装和部署docker
创建machine要求免密登陆远程主机
在这里插入图片描述
在这里插入图片描述

在https://get.docker.com里下载那个index.html,然后把yum源修改为可用的
在这里插入图片描述
修改之后把这个文件发送到172.25.20.250的/var/www/html下,即共享目录下,安装时会自己匹配
但是这样安装的时候server3的yum源检查不能通过
所以再server3上的yum源全局设定里取消安装检查
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.给客户端安装docker

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.优化切换machine的命令行显示

复制三个machine的命令到bash下并分别source,再添加环境变量
在这里插入图片描述
在这里插入图片描述

docker-machine use server3		##切换用户

在这里插入图片描述

三、docker-compose

1.安装包的获取

可以在官网上通过sudo curl -L “https://github.com/docker/compose/releases/download/1.24.1/docker-compose- ( u n a m e − s ) − (uname -s)- (unames)(uname -m)” -o /usr/local/bin/docker-compose来获取
下载之后是一个可使用的命令,本机使用的版本是
在这里插入图片描述
在这里插入图片描述

2.编写一个yml文件实现haproxy对nginx的负载均衡

注意:docker stack 的用法与compose基本相同,而且stack是docker自带命令,但是它只能再version3以上使用
在这里插入图片描述

需要先导入nginx和haproxy的镜像
mkdir compose			##建立一个目录存放yml文件
mkdir compose/web1		##准备两个默认发布目录存不同的文件来进行对比
mkdir compose/web2
mkdir compose/haproxy	##把一个修改好的haproxy.cfg挂载到容器中

在这里插入图片描述

vim docker-compose.yml
web1:
        image: nginx:1.17.2			##注意自己倒入的镜像版本,不对应的话就会自动从网上拉取下载
        expose:
                - 80
        volumes:
                - ./web1:/usr/share/nginx/html

web2:
        image: nginx:1.17.2
        expose:
                - 80
        volumes:
                - ./web2:/usr/share/nginx/html

haproxy:
        image: haproxy:latest
        volumes:
                - ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
        links:
                - web1
                - web2
        ports:
                - "80:80"
        expose:
                - "80"

vim haproxy.cfg
global
    log         127.0.0.1 local0
    log         127.0.0.1 local1 notice
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    stats uri /status

frontend  balancer
    bind 0.0.0.0:80
    default_backend             web_backends

backend web_backends
    balance     roundrobin
    server      server1 web1:80 check
	server      server2 web2:80 check

docker-compose up -d 			##在yml所在的目录下,后台运行服务
在浏览器上输入172.25.20.1测试轮询

在这里插入图片描述

四、swarm集群的创建

1.环境准备

先准备三台虚拟机
server1(manager):172.25.20.1
server2(worker):172.25.20.2
server3(worker):172.25.20.3

2.集群创建

因为swarm集群管理是docker自带的服务,所以搭建起来较为简单
在管理节点直接执行创建的命令即可,不需要导入额外的镜像
在这里插入图片描述
在普通节点上直接用docker swarm join那一串命令就可以加入节点
当三个节点都加入集群后,在管理节点上查看
在这里插入图片描述

五、swarm集群的管理

1.图形化的监控界面

首先需要导入一个镜像dockersamples/visualizer,可以直接联网然后pull
注意:集群之间的节点要免密

先创建一个web服务
docker service create --name web --replicas 3 --publish 80:80 nginx
##replicas代表可扩展的,与接下来所说的global模块是不同的,不仅可以自动分配到节点上,而且还是自动负载均衡的

导入镜像之后,创建容器来监控即可
docker service create --name=viz --publish=8080:8080/tcp --constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
 dockersamples/visualizer

在浏览器访问172.25.20.1:8080访问即可
docker service scale web=60		##通过这个命令可直接把web的数量变为60个,且是自动分配的,也可以用这个命令来减少
docker service update --image game2048 --update-delay 5s --update-parallelism 2 web
##给web服务再添加一个滚动更新的2048页面,这样在访问的时候每5s都会自动切换,但是每个节点上都要有相应的镜像

在这里插入图片描述

当有一个新节点加入时,只要有向对应的镜像,就会自动拉起服务,先把上一个容器服务删掉,然后调用global模块
docker service create --name web --publish 80:80 --mode global game2048
在server4上倒入game2048的镜像

docker node update --availability drain server4			##让这个节点不再接收工作进程,一般用来让管理节点只管理不处理工作请求源
docker node update --availability active server4		##恢复节点的工作进程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.用yml文件的形式来实现服务的部署

docker stack类似与docker-compose,但是docker stack必须是v3及以上版本才可以使用,但是compose可以识别不同的版本
在创建这个服务之前,先把上一个监控删掉

docker service rm  web		##删掉原来的服务
docker service rm  viz	
编写一个自动部署nginx和监控模块的yml文件,注意每个节点上都要倒入镜像,监控模块的镜像只要在管理节点上导入即可
mkdir test					##新建一个目录来存放yml文件
cd test
vim docker-compose.yml
version: "3.7"
services:

  web:
    image: nginx:1.16				##与自己的镜像版本对应即可
    ports:
      - "80:80"
    networks:
      - webnet
    volumes:
      - "webdata:/usr/share/nginx/html"
    deploy:
      replicas: 4					##可扩展的服务,最初服务个数为4
      resources:
        limits:						##可以在创建服务时直接限制容器的内存和cpu
          cpus: "0.2"
          memory: "300M"
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]			##只有在管理者节点才能运行这个监控服务

networks:
  webnet:

volumes:
  webdata:

docker stack deploy -c docker-compose.yml example		##没有服务的话创建这个服务
														##如果文件中作出了修改,这条命令就是更新服务

注意:文件中的镜像版本与每个节点上导入的都要相同,不同的话可以用tag改名,不然的话服务运行可能会有问题,如下
docker tag dockersamples/visualizer:latest  dockersamples/visualizer:stable

在这里插入图片描述
在这里插入图片描述

六、swarm的图形化管理

1.图形化工具的选择:portainer

直接在官网下载即可,载每个节点上导入agent,在管理节点上导入监控服务
在这里插入图片描述

vim portainer-agent-stack.yml		##yml文件
version: '3.2'

services:
  agent:
    image: portainer/agent
    environment:
      # REQUIRED: Should be equal to the service name prefixed by "tasks." when
      # deployed inside an overlay network
      AGENT_CLUSTER_ADDR: tasks.agent
      # AGENT_PORT: 9001
      # LOG_LEVEL: debug
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    networks:
      - agent_network
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]

  portainer:
    image: portainer/portainer
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    ports:
      - "9000:9000"
    volumes:
      - portainer_data:/data
    networks:
      - agent_network
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]

networks:
  agent_network:
    driver: overlay
    attachable: true

volumes:
  portainer_data:4个节点上都导入agent镜像,然后在这个文件的目录下
docker stack deploy -c portainer-agent-stack.yml portainer		##直接创建服务
创建成功后进入浏览器测试

还可以通过图形直接给仓库上传或下载镜像

在这里插入图片描述
在这里插入图片描述

2.图形化创建一个服务

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker Compose是一个描述和运行多个Docker容器的工具,而Docker Swarm是一个Docker原生的集群管理工具,可以方便地管理多个Docker节点。在Docker Swarm集群中使用Docker Compose可以快速地构建和部署服务。 以下是在Docker Swarm集群中使用Docker Compose部署服务的一些步骤: 1. 编写Docker Compose文件:在本地编写一个Docker Compose文件,描述需要运行的服务、镜像和配置等信息。例如,下面是一个简单的Docker Compose文件: ``` version: '3.7' services: web: image: nginx:alpine deploy: replicas: 2 resources: limits: cpus: '0.5' memory: 512M restart_policy: condition: on-failure ports: - "80:80" - "443:443" ``` 2. 上传Docker Compose文件:将Docker Compose文件上传到Swarm集群管理节点。 3. 部署服务:使用`docker stack deploy`命令部署服务,例如: ``` docker stack deploy --compose-file docker-compose.yml my-app ``` 其中,`--compose-file`参数指定了使用的Docker Compose文件,`my-app`是服务的名称。 4. 验证服务:使用`docker service ls`命令可以查看部署的服务列表,使用`docker service ps <service>`命令可以查看服务的运行状态。 ``` docker service ls docker service ps my-app_web ``` 以上就是在Docker Swarm集群中使用Docker Compose部署服务的一些步骤。通过使用Docker Compose可以快速地构建和部署服务,而Docker Swarm可以方便地管理和扩展服务,两者结合使用可以大大提高服务的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值