将下面几个组件放置这个目录下
链接: [.bash文件]( ) 提取码: gi5f

[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)

我们再次使用docker时,显示的就是server2的images

搭建不同版本的
在真机上搭建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源位置


[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)

## 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
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
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


在真机上测试负载均衡情况

查看健康检查
[root@server1 compose]# docker-compose stop web1

Docker Compose 常用命令
| | |
| --- | --- |
| Build: | 构建或重新构建服务。 |
| kill: | 强制停止服务容器。 |
| logs: | 查看服务的输出。 |
| port: | 打印绑定的公共端口。 |
| ps: | 列出所有容器。 |
| pull: | 拉取服务所需镜像。 |
| rm: | 删除停止的服务容器。 |
| up: | 构建并启动容器。 |
## 2.docker swam
初始化
[root@server1 harbor]# docker swarm init

根据提示在其他docker节点上执行命令:


查看swarm集群节点
[root@server1 ~]# docker node ls

[root@server1 ~]# docker load -i myapp.tar
[root@server1 ~]# docker load -i visualizer.tar
[root@server1 ~]# docker tag ikubernetes/myapp:v1 myapp:v1
实现负载均衡


### 节点升降级
[root@server1 ~]# docker node promote server2
[root@server1 ~]# docker node demote server1

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

加入一个新的节点
重新配置一台server4
加入集群,注意现在的managerserver2,要写server2的ip
[root@server4 ~]# docker swarm join --token SWMTKN-1-5worodwhvojzfl76gmoi3n68encf8ha3gaze302aus6yw7g382-c2d31ke2j0ncdiijo1efgpffu 172.25.1.2:2377

[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

### 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

### 3. 实现业务滚动更新
[root@server2 ~]# docker service update --image myapp:v2 --update-parallelism 2 --update-delay 5s myweb
[root@server4 ~]# systemctl stop docker.service
当把server4down掉的话,业务会自动跳到其他的server上

## 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相关命令:

参考官方地址[集群部署]( )
在部署之前需要先清除刚才所做的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

### 5.查看效果
[root@server2 compose]# docker service ls
因篇幅问题不能全部显示,请点此查看更多更全内容