1. Docker_swarm集群搭建
集群安装docker:
环境部署:
角色 | server-id | 安装 |
---|---|---|
MANAGER | Server1 | DOCKER(MASTER) |
NODE1 | Server2 | DOCKER |
NODE2 | Server3 | DOCKER |
Manager,node
yum install -y
docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm
docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm
bash-completion.noarch 1:2.1-6.el7
systemctl start docker
docker swarm init #初始化
在每个节点根据全球唯一token标示加入集群:
docker swarm join \
> --token SWMTKN-1-3762bvy7nfh1e142z0cae6843wemapyd2j93o8ghtahje262w5-2946rqu8bhr2z1o7tbbb3kahw \
> 172.25.30.1:2377
2. 集群部署nginx服务
真机搭建仓库:
取消认证;传输密钥给各个节点:
docker container prune #删除认证
传输加密证书:
scp -r certs.d/ root@172.25.30.1:/etc/docker/
scp -r certs.d/ root@172.25.30.2:/etc/docker/
scp -r certs.d/ root@172.25.30.3:/etc/docker/
#创建加密以便远程登陆
docker run -d --restart=always --name registry -v `pwd`/certs:/certs -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key -p 443:443 registry:2
docker push westos.org/nginx #推送仓库nginx
docker load -i /home/kiosk/visualizer.tar
docker tag dockersamples/visualizer westos.org/visualizer
docker push westos.org/visualizer #推送监控仓库
各个节点必须加上解析 172.25.30.250 westos.org
在每个节点从westos.org仓库中拉取镜像:
docker pull westos.org/nginx
在manager部署节点安装启动nginx从本地仓库拉取镜像
80:80------>端口映射
docker service create --name nginx --publish 80:80 --replicas 3 westos.org/nginx
docker service ls
docker service ps nginx
docker service scale nginx=6 #开启6个nginx服务
docker service ps nginx
docker ps
自动实现负载均衡
部署多个容器:sacle规模
为了效果明显我们拉取了visualizer监控镜像
在真机提前搭建好仓库以便节点调用:
docker service create --name=viz --publish=8080:8080/tcp --constraint=node.role==manager --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock westos.org/visualizer
[root@server1 ~]# docker service scale nginx=3
nginx scaled to 3
为了让效果更加明显我们给每个nginx添加一个页面:
echo server1 > index.html
docker container cp index.html nginx.2.9n9gpmvx3rzzjbseujqbsgi7m:/usr/share/nginx/html
echo server2 > index.html
docker container cp index.html nginx.4.jelcmismly25g3kz75tzy1un9:/usr/share/nginx/html
echo server3> index.html
docker container cp index.html nginx.5.ckja2d72m78xr5nsecuio8hkm:/usr/share/nginx/html
当一个节点宕掉swarm会将该节点任务迁移到另一个节点上但是不会将其中的内容迁移过来所以访问时就会出现nginx原始界面
3. 服务上线
推送新的服务镜像:
docker tag game2048 westos.org/game2048
docker push westos.org/game2048
滚动更新服务上线: # update-parallelism 10 每10s更新10台迭代更新
docker service update –image westos.org/game2048 –update-parallelism 10 –update-delay 10s nginx
nginx
旧服务下线:
服务上线:
从集群移出
docker service ls
docker service rm viz #manager移除监控服务
docker swarm leave #从swarm集群移除节点
docker swarm leave –force #强制移除
4 docker-machine集群管理工具
Docker Machine 是 Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在虚拟机中安装 Docker。我们还可以通过 docker-machine 命令来管理这些虚拟机和 Docker。下面是来自 Docker Machine 官方文档的一张图,很形象哦!
Docker-machine部署docker集群
安装脚本:
chmod +x docker-machine-Linux-x86_64-1.15.0
ln -s docker-machine-Linux-x86_64-1.15.0 docker-machine #建立软连接以便更新服务
docker-machine -v #查看版本
ssh-keygen #给节点传输密钥以便直接连接
ssh-copy-id 172.25.30.1
ssh-copy-id 172.25.30.2
ssh-copy-id 172.25.30.3
ssh root@172.25.30.1 #测试
ssh root@172.25.30.2
ssh root@172.25.30.3
docker-machine ls #查看管理的节点
cd
# 创建节点加入集群记得加本地解析
docker-machine create --driver generic --generic-ip-address=172.25.30.1 server1
docker-machine create --driver generic --generic-ip-address=172.25.30.2 server2
docker-machine create --driver generic --generic-ip-address=172.25.30.3 server3
docker-machine ls
docker-machine ssh server3 docker images #从管理节点查看server3的镜像
docker-machine env server3 #从管理节点查看server3的环境
docker-machine rm server3 #移除节点server3