docker三剑客

docker-machine

作用:自动化部署docker
(go语言)
二进制文件: docker-machine 提取码: d26s
实验环境:
三台虚拟机server1,server2,server3, 其中server3作为管理端安装了docker,server1和server2并没有安装docker

利用docker machine在server1和server2上自动部署docker

实验步骤:

  1. 安装获取docker-machine,
  2. 完成server3对server1和server2的免密登陆
  1. 建立一个repo文件,如果server2和server3属于内网不能上网,那么可以在server3建立一个软件仓库,通过apache的方式发布出去,由于我用的是虚拟机,所以我将安装docker的所需要的软件包和repo文件都放在了宿主机上了,我的repo文件内容;
 [root@snji html]# cat docker.repo 
[docker-ce]
name=docker-ce
baseurl=ftp://172.25.3.250/docker-ce
gpgcheck=0
enable=1
  1. wget https://get.docker.com/ -O /var/www/html/docker.sh 从官方获取执行文件,并修改
    在这里插入图片描述
    在这里插入图片描述

运行测试:
docker-machine create --driver generic --engine-install-url "http://172.25.3.250/docker.sh" --generic-ip-address 172.25.3.1 server1
在这里插入图片描述
会在节点生成/etc/systemd/system/docker.service.d/10-machine.conf文件
在这里插入图片描述

docker-machine的bash文件
链接: https://pan.baidu.com/s/1iIvCSP2D8httX6y64ig9gA 提取码: vmq4

  1. 将三个文件放到这个目录下在这里插入图片描述
  2. 修改 ~/.bashrc文件,添加
    PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
    并且source ~/.bashrc文件 使之生效
    在这里插入图片描述

docker-compose

作用:多容器管理

配置haproxy负载均衡

需要的镜像: nginx,haproxy
实现步骤:

建立一个compose 目录,并创建一个docker-compose.yml 文件,文件内容如下:

[root@server3 compose]# cat docker-compose.yml 
version: "3.8"
services:

  web1:
    image: nginx
    networks:
      - my_net
    volumes:
      - ./web1:/usr/share/nginx/html
 
  web2:
    image: nginx
    networks:
      - my_net
    volumes:
      - ./web2:/usr/share/nginx/html

  ha_proxy:
    image: haproxy
    ports:
      - "80:80"
    networks:
      - my_net
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
networks:
  my_net:

compose目录下放上两个nginx 的发布目录,并直接挂载到web1和web2服务上,并且创建一个haproxy.cfg文件, 目录结构
在这里插入图片描述

haproxy文件内容

[root@server3 compose]# egrep -v '#|^$' haproxy.cfg 
global
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000
    stats uri /admin/status
frontend main
    bind 0.0.0.0:80
    default_backend             app
backend app
    balance     roundrobin
    server  app1 web1:80 check
    server  app2 web2:80 check

在compose目录下,docker-compose up 加-d 参数表示在后台运行
在这里插入图片描述

测试:
在这里插入图片描述
在这里插入图片描述

swarm

集群管理

实现步骤

  1. 在server1管理节点执行 docker swarm init
    在这里插入图片描述
  2. 在其他两个节点执行docker swarm join --token 就是刚刚swarm初始化时生成的命令
    在这里插入图片描述
    docker node ls
    在这里插入图片描述
    至此,集群就创建好了

通过命令行的方式建立服务

  1. 创建一个自定义的overlay网络my_net
    docker network create -d overlay my_net
  2. docker service create --name web_cluster --replicas 3 --network my_net -p 80:80 myapp:v1 创建一个服务名字叫web_cluster ,3个副本, 用的是自定义网络my_net 端口映射 80:80 , 镜像是myapp的v1版本
    在这里插入图片描述
    访问测试:
    在这里插入图片描述
    使用dockersamples/visualizer 镜像,可以网页版查看集群中副本的分布情况
    docker run -d --name viz -p 8080:8080 -it -v /var/run/docker.sock:/var/run/docker.sock dockersamples/visualizer
    在这里插入图片描述

通过命令行的方式修改副本的个数

docker service scale web_cluster=6
在这里插入图片描述
在这里插入图片描述

更新节点镜像的版本

docker service update --image myapp:v2 --update-parallelism 2 --update-delay 2s web_cluster

--update-parallelism 2表示每次更新两个
--update-delay 2s表示每两秒更新一次

在这里插入图片描述

通过文件的方式建立服务

将上个实验的service全部删掉,用文件的方式部署
web.yml文件:

version: "3.8"
services:
  web_cluster:
    image: myapp:v2
    networks:
      - my_net
    ports:
      - "80:80"
    deploy:
      replicas: 6
      update_config:
        parallelism: 2
        delay: 5s
      restart_policy:
        condition: on-failure
  visualizer:
    image: visualizer
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints:
          - "node.role==manager"

networks:
  my_net:

docker stack deploy -c web.yml web_cluster 直接用docker stack 命令部署

在这里插入图片描述
在这里插入图片描述
效果:
在这里插入图片描述
回收:
在这里插入图片描述

利用portainer 工具,实现web化建立集群

portainer安装包: 链接: https://pan.baidu.com/s/1dCYigimgmxQ8fIhhQpEk9w 提取码: fvwn

实现步骤:

  1. 解压安装包, 里面有两个镜像包, 和yml文件,
    在这里插入图片描述
    可以选择搭建harbor仓库将这两个镜像放到仓库里,也可以选择将其他的其他的节点手动导入portainer-agent镜像,解决镜像问题之后
    docker stack deploy -c portainer-agent-stack.yml portainer开始部署
    在这里插入图片描述

访问测试: 浏览器访问172.25.3.1: 9000端口
默认会先让做一个初始化密码
在这里插入图片描述
页面的大概情况
在这里插入图片描述

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值