1. docker-compose
- 安装
将二进制文件复制入bash运行环境目录,并给予可执行权限
mv docker-compose-Linux-x86_64-1.22.0 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
- 编写yaml文件
vim docker-compose.yml
version: "2.2"
services:
web1:
image: nginx
networks:
- webnet
volumes:
- ./web1:/usr/share/nginx/html
web2:
image: nginx
networks:
- webnet
volumes:
- ./web2:/usr/share/nginx/html
haproxy:
image: haproxy
networks:
- webnet
volumes:
- ./haproxy:/usr/local/etc/haproxy
ports:
- "80:80"
networks:
webnet:
- 导入镜像,编写配置文件
docker load -i haproxy.tar
docker load -i nginx.tar
echo web1 > web1/index.html
echo web2 > web2/index.html
vim haproxy/haproxy.cfg
#
# This is a sample configuration. It illustrates how to separate static objects
# traffic from dynamic traffic, and how to dynamically regulate the server load.
#
# It listens on 192.168.1.10:80, and directs all requests for Host 'img' or
# URIs starting with /img or /css to a dedicated group of servers. URIs
# starting with /admin/stats deliver the stats page.
#
global
maxconn 65535
stats socket /var/run/haproxy.stat mode 600 level admin
log 127.0.0.1 local0
uid 200
gid 200
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 /admin/stats
# 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 a web1:80 check inter 1000
server b web2:80 check inter 1000
- 运行搭建的环境
在编写的yml文件的目录下运行
docker-compose up
测试:
2. docker swarm
Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
- 开启swarm
在管理端初始化swarm
docker swarm init
根据返回的token在受控端加入此集群:
docker swarm join --token SWMTKN-1-2oh253iug5yhpin5j1g4s2dl6ncfonya9l3ho8ryqtwx7vcopq-48vbg98hmixnvo22ag9midc6x 172.25.52.1:2377
在控制端查看:
docker node ls
在server1端,为server2授予管理权限,server1降权并离群。
docker node promote server2
docker node demote server1
docker swarm leave
在server2端,查看集群节点
在server1部署harbor仓库,向2 3 4 拷贝证书文件,以及修改默认仓库文件,参考部署harbor仓库的文章
for i in {2..4};
do
scp /etc/docker/daemon.json server${i}:/etc/docker/daemon.json; # 默认仓库
scp -r /etc/docker/certs.d/ server${i}:/etc/docker/ #证书
systemctl restart docker
scp /etc/sysctl.d/docker.conf server${i}:/etc/sysctl.d/docker.conf;#修改网桥配置文件
sysctl --system & /dev/null
done
cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://reg.westos.org"]
}
cat /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
- 手动部署镜像
在server1端将需要推送的镜像上传
docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1
docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2
docker push reg.westos.org/library/myapp:v1
docker push reg.westos.org/library/myapp:v2
在server2控制端创建服务
docker service create --name website --publish 80:80 --replicas 3 myapp:v1
改为6个容器:
docker service scale website=6
测试,无论访问server2 3 4 哪个,每次都均衡至不同的容器
- docker stack 自动部署镜像
提前在仓库准备可视化visualizer监控镜像,在控制端编写yaml文件
vim docker-compose.yml
version: "3.8"
services:
web:
image: myapp:v1 #推送版本
ports:
- "80:80"
networks:
- webnet
deploy:
replicas: 20 #容器规模
update_config: #更新版本配置
parallelism: 5 #单次20个
delay: 1m # 5s更新一次
restart_policy:
condition: on-failure
visualizer:
image: visualizer:latest
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints:
- "node.role==manager"
networks:
webnet:
根据yaml文件,创建mycluster资源组
docker stack deploy -c docker-compose.yml mycluster
访问监控页面
在配置文件中更新版本为myapp:v2 延时调整为1min 重新运行,查看版本更新状态
docker stack deploy -c docker-compose.yml mycluster
3. portainer 图形化操作
首先,下载导入并将portainer与portainer-agent上传至harbor;
在监控端运行建立服务:
docker tag portainer/agent:latest reg.westos.org/portainer/agent:latest
docker tag portainer/portainer:latest reg.westos.org/portainer/portainer:latest
docker push reg.westos.org/portainer/portainer:latest
docker push reg.westos.org/portainer/agent:latest
docker stack deploy -c /mnt/portainer-agent-stack.yml portainer
docker stack deploy -c /mnt/portainer-agent-stack.yml portainer