docker-machine
作用:自动化部署docker
(go语言)
二进制文件: docker-machine 提取码: d26s
实验环境:
三台虚拟机server1,server2,server3, 其中server3作为管理端安装了docker,server1和server2并没有安装docker
利用docker machine在server1和server2上自动部署docker
实验步骤:
- 安装获取docker-machine,
- 完成server3对server1和server2的免密登陆
- 建立一个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
- 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
- 将三个文件放到这个目录下
- 修改 ~/.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
集群管理
实现步骤
- 在server1管理节点执行 docker swarm init
- 在其他两个节点执行docker swarm join --token 就是刚刚swarm初始化时生成的命令
docker node ls
至此,集群就创建好了
通过命令行的方式建立服务
- 创建一个自定义的overlay网络my_net
docker network create -d overlay my_net
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
实现步骤:
- 解压安装包, 里面有两个镜像包, 和yml文件,
可以选择搭建harbor仓库将这两个镜像放到仓库里,也可以选择将其他的其他的节点手动导入portainer-agent镜像,解决镜像问题之后docker stack deploy -c portainer-agent-stack.yml portainer
开始部署访问测试: 浏览器访问172.25.3.1: 9000端口
默认会先让做一个初始化密码
页面的大概情况