Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。
Portainer是一款轻量级的Docker图形化管理的方案, 部署Portainer和Portainer Agent来管理Swarm集群很容易!您可以将Portainer作为服务直接部署在Docker集群中。请注意,此方法将自动部署Portainer Server的单个实例,并将Portainer Agent作为全局服务部署到群集中的每个节点上。
docker swarm init --advertise-addr 192.168.0.150 #这个IP是你本机IP 可以ip -a查看 复制代码
验证是否swarm是否初始化成功,查看节点是否挂载。
docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION xbf82bf03t6r7mrvxzxmkv9mm * iZbp12d0p2o2at8bmvb033Z Ready Active Leader 19.03.5 复制代码
docker network create --driver overlay www_net 复制代码
创建overlay www_net网络的用处,是给这些docker创建一个内网可相互访问的条件。
比如场景nginx,web,redis三个微应用。需求是nginx与web需要内网相互访问,但是nginx与redis不需要访问的,而web它与redis是需要访问的, 就可以配置nginx: a_net网络, web: a_net,b_net两个网络, redis: b_net网络。这样就可以达到需求了。
也可以参照 官方部署文档 查看其它部署
$ curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml 复制代码
上述命令会下载一个官方的 swarm 部署yml文件,并修改成配置如下:
version: '3.2' services: agent: image: portainer/agent volumes: - /var/run/docker.sock:/var/run/docker.sock - /var/lib/docker/volumes:/var/lib/docker/volumes networks: - agent_network deploy: mode: global placement: constraints: [node.platform.os == linux] portainer: image: portainer/portainer command: -H tcp://tasks.agent:9001 --tlsskipverify ports: - "9000:9000" - "8000:8000" # 只用到web管理界面,此处的8000可以删除。 volumes: - portainer_data:/data networks: - agent_network - www_net deploy: mode: replicated replicas: 1 placement: constraints: [node.role == manager] networks: agent_network: driver: overlay attachable: true www_net: external: true volumes: portainer_data: 复制代码
上述配置要注意的就是portainer里面有两个网络,有一个是 www_net
的 external: true
意思是使用外部创建的www_net, 如果不设置他会创建当前stack的网络,不设置名称会自动 名称_www_net
。
$ docker stack deploy --compose-file=portainer-agent-stack.yml portainer 复制代码
验证是否部署成功:
docker service ls ID NAME MODE REPLICAS IMAGE PORTS td1uhbhmsb5f portainer_agent global 1/1 portainer/agent:latest aeoqcexzg7hu portainer_portainer replicated 1/1 portainer/portainer:latest *:9000->9000/tcp 复制代码
如果 REPLICAS 0/1
时说明还在部署请等待。如果太慢,是因为你没有设置国内镜像。 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://48udk7jr.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker 复制代码
上面的 48udk7jr.mirror.aliyuncs.com 使用的是专属的阿里云镜像,可以在阿里云控制面板里开通镜像服务。
当部署完成后,就可以访问 http://ip:9000 来访问, 如果是一些云服务器,要先确定是否开放了9000端口
首次登陆他会让你设置密码, 这是登陆后的界面:
注意,后面的自动部署需要使用阿里云的容器镜像服务,而且使用的是私有的镜像,所以要给Portainer注册一个registries。要不然会授权不成功,导致镜像pull失败。 注意:
之后部署的image镜像他会匹配registry.cn-hangzhou.aliyuncs.com这个前缀。他会自动使用这个注册的授权。
上面的配置相当于我们命令行部署stack是一样的:
sudo docker login --username=用户名 registry.cn-hangzhou.aliyuncs.com docker stack deploy -c xxx.yml web --with-registry-auth
示例图:
到此基础的管理环境搭建结束了。