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的免密登陆
  3. 建立一个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

docker 绑定 22端口_html


会在节点生成

/etc/systemd/system/docker.service.d/10-machine.conf

文件


docker 绑定 22端口_nginx_02

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

  1. 将三个文件放到这个目录下
  1. 修改 ~/.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文件, 目录结构

docker 绑定 22端口_nginx_03

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 参数表示在后台运行

docker 绑定 22端口_docker_04

测试:

docker 绑定 22端口_docker_05


docker 绑定 22端口_html_06

swarm

集群管理

实现步骤

  1. 在server1管理节点执行 docker swarm init
  1. 在其他两个节点执行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 绑定 22端口_docker 绑定 22端口_07


docker 绑定 22端口_docker_08

更新节点镜像的版本

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

--update-parallelism 2

表示每次更新两个

--update-delay 2s

表示每两秒更新一次

docker 绑定 22端口_docker 绑定 22端口_09

通过文件的方式建立服务

将上个实验的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 命令部署

docker 绑定 22端口_nginx_10


docker 绑定 22端口_docker 绑定 22端口_11


效果:

docker 绑定 22端口_html_12


回收:

docker 绑定 22端口_nginx_13

利用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端口
默认会先让做一个初始化密码

docker 绑定 22端口_docker_14


页面的大概情况


docker 绑定 22端口_docker_15

docker 绑定 22端口_nginx_16


docker 绑定 22端口_docker 绑定 22端口_17