Docker 三剑客_portainer agent


将下面几个组件放置这个目录下  
 链接: [.bash文件]( ) 提取码: gi5f  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128142516350.png)



[root@server1 ~]# vim .bashrc
PS1='[\u@\h \W$(__docker_machine_ps1)]$ ’


退出当前shell,重新登陆即可生效



[root@server1 ~]# docker-machine env server2
[root@server1 ~]# eval $(docker-machine env server2)


![在这里插入图片描述](https://img-blog.csdnimg.cn/2021012814323869.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)  
 我们再次使用docker时,显示的就是server2的images  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128143219218.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)  
 搭建不同版本的  
 在真机上搭建yum源放到http的默认发布目录中



[root@Sun_s html]# vim docker-ce.repo
[docker]
name=docker-ce
baseurl=http://172.25.1.250/docker-ce
gpgcheck=0
[root@Sun_s html]# wget https://get.docker.com
[root@Sun_s html]# mv index.html get-docker.sh
修改下图圈出内容 yum源位置


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128154424439.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128154545694.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)



[root@server1 ~]# docker-machine create --driver generic --engine-install-url “http://172.25.1.250/get-docker.sh” --generic-ip-address 172.25.1.3 server3
[root@server1 ~]# eval $(docker-machine env server3)


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128155031886.png)


## 1.Docker-compose



[root@server1 ~]# mkdir compose
[root@server1 ~]# cd compose/
[root@server1 compose]# vim docker-compose.yml
version: “3.9”
services:
web1:
image: nginx
networks:
- mynet
volumes:
- ./web1:/usr/share/nginx/html

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

haproxy:
image: haproxy
networks:
- mynet
ports:
- “80:80”
volumes:
- ./haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg

networks:
mynet:



[root@server1 compose]# mkdir haproxy
[root@server1 compose]# mkdir web1
[root@server1 compose]# mkdir web2
[root@server1 compose]# echo web1 >web1/index.html
[root@server1 compose]# echo web2 >web2/index.html
[root@server1 compose]# cd haproxy/
[root@server1 haproxy]# ls
[root@server1 haproxy]# vim haproxy.cfg

global
maxconn 65535
stats socket /var/run/haproxy.stat mode 600 level admin
log 127.0.0.1 local0
uid 200
gid 200
#chroot /var/empty
daemon

defaults
mode http
log global
option httplog
option dontlognull
monitor-uri /monitoruri
maxconn 8000
timeout client 30s
retries 2
option redispatch
timeout connect 5s
timeout server 5s
stats uri /status

The public ‘www’ address in the DMZ

frontend public
bind *:80 name clear
#bind 192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem

    #use_backend     static if { hdr_beg(host) -i img }
    #use_backend     static if { path_beg /img /css   }
    default_backend dynamic

The static backend backend for ‘Host: img’, /img and /css.

backend dynamic
balance roundrobin
server app1 web1:80 check inter 1000
server app2 web2:80 check inter 1000



[root@server1 compose]# docker-compose up
[root@server1 compose]# docker-compose start
[root@server1 compose]# docker-compose ps


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128173446551.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128173206120.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)  
 在真机上测试负载均衡情况  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128173636416.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)  
 查看健康检查



[root@server1 compose]# docker-compose stop web1


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128173807228.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)  
 Docker Compose 常用命令




|  |  |
| --- | --- |
| Build: | 构建或重新构建服务。 |
| kill: | 强制停止服务容器。 |
| logs: | 查看服务的输出。 |
| port: | 打印绑定的公共端口。 |
| ps: | 列出所有容器。 |
| pull: | 拉取服务所需镜像。 |
| rm: | 删除停止的服务容器。 |
| up: | 构建并启动容器。 |


## 2.docker swam


初始化



[root@server1 harbor]# docker swarm init


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210130102255851.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)  
 根据提示在其他docker节点上执行命令:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2021013010240530.png)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210130102417186.png)  
 查看swarm集群节点



[root@server1 ~]# docker node ls


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210130102449113.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)



[root@server1 ~]# docker load -i myapp.tar
[root@server1 ~]# docker load -i visualizer.tar
[root@server1 ~]# docker tag ikubernetes/myapp:v1 myapp:v1


实现负载均衡  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210130101913385.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210130102121591.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)


### 节点升降级



[root@server1 ~]# docker node promote server2
[root@server1 ~]# docker node demote server1


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210130110840171.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)



[root@server1 ~]# docker swarm leave
[root@server2 ~]# docker node rm server1


![在这里插入图片描述](https://img-blog.csdnimg.cn/2021013011194141.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)


加入一个新的节点  
 重新配置一台server4  
 加入集群,注意现在的managerserver2,要写server2的ip



[root@server4 ~]# docker swarm join --token SWMTKN-1-5worodwhvojzfl76gmoi3n68encf8ha3gaze302aus6yw7g382-c2d31ke2j0ncdiijo1efgpffu 172.25.1.2:2377


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210130111953832.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)



[root@server2 docker]# vim daemon.json
{
“registry-mirrors”: [“https://reg.westos.org”]
}
[root@server2 docker]# scp daemon.json server4:/etc/docker/
[root@server2 docker]# scp daemon.json server3:/etc/docker/
[root@server2 docker]# scp -r certs.d/ server4:/etc/docker/
[root@server2 docker]# vim /etc/hosts


![在这里插入图片描述](https://img-blog.csdnimg.cn/2021013011281640.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)


### 2.加入本地私有仓库



[root@server1 harbor]# docker-compose start
[root@server1 ~]# docker tag myapp:v1 reg.westos.org/library/myapp:v1
[root@server1 ~]# docker push reg.westos.org/library/myapp:v1



[root@server2 ~]# docker service rm my_cluster
然后把各个节点上已经拉取的镜像删除掉
[root@server2 ~]# docker service create --name myweb --replicas 3 -p 80:80 myapp:v1
[root@server2 docker]# docker service scale myweb=6


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210130133056359.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)


### 3. 实现业务滚动更新



[root@server2 ~]# docker service update --image myapp:v2 --update-parallelism 2 --update-delay 5s myweb



[root@server4 ~]# systemctl stop docker.service


当把server4down掉的话,业务会自动跳到其他的server上  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210130134817137.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)


## 3.docker stack部署集群


基于 Docker Swarm 之上来完成应用的部署,面向大规模场景下的多服务部署和管理。


### 1.docker stack与docker-compose的区别:


* Docker stack不支持“build”指令,它是需要镜像是预先已经构建好的, 所以docker-compose更适合于开发场景;
* Docker Compose是一个Python项目,使用Docker API规范来操作容器。
* Docker Stack功能包含在Docker引擎中,是swarm mode的一部分。
* Docker stack不支持基于第2版写的docker-compose.yml ,也就是version版本至少为3。然而Docker Compose对版本为2和3的 文件仍然可以处理;
* docker stack把docker compose的所有工作都做完了,因此docker stack将占主导地位。


### 2.docker stack相关命令:


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210130233314940.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N1bl9fcw==,size_16,color_FFFFFF,t_70)


参考官方地址[集群部署]( )  
 在部署之前需要先清除刚才所做的service


### 3.编写yml文件



[root@server2 ~]# mkdir compose
[root@server2 ~]# cd compose/
[root@server2 compose]# vim docker-compose.yml
version: “3.9”
services:
web:
image: myapp:v1
networks:
- mynet
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
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:
mynet:


将监控的镜像也上传至本地私有仓库,方便使用,因为yml编写的时候直接从本地仓库拉取



[root@server1 ~]# docker tag dockersamples/visualizer reg.westos.org/library/visualizer:latest
[root@server1 ~]# docker push reg.westos.org/library/visualizer:latest


### 4.执行



[root@server2 compose]# docker stack deploy -c docker-compose.yml my_cluster


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210130232442240.png)


### 5.查看效果



[root@server2 compose]# docker service ls

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值