Docker Swarm与Portainer搭建可视化管理工具_docker swarm portainer
Docker管理工具
一、Portainer-ce单机本地容器管理部署
-
下载汉化版镜像
$ docker pull 6053537/portainer-ce
-
创建存储券
$ docker volume create portainer_data
-
运行容器
$ docker run -d --name portainer -p 9000:9000 --restart=always \\ -v /var/run/docker.sock:/var/run/docker.sock \\ -v portainer_data:/data 6053537/portainer-ce
参数说明
-d #容器在后台运行
-p 9000:9000 # 宿主机9000端口映射容器中的9000端口
-v /var/run/docker.sock:/var/run/docker.sock # 把宿主机的Docker守护进程(docker daemon)默认监听的Unix域套接字挂载到容器中
-v /root/portainer:/data # 把宿主机目录 /root/portainer 挂载到容器 /data 目录;
–name dev-portainer # 指定运行容器的名称;
二、Docker Swarm + Portainer 集群可视化管理
1. 环境准备
如服务器防火墙关闭,则不需要开放端口
# 查看允许访问的服务与端口firewall-cmd --zone=public --list-servicesfirewall-cmd --zone=public --list-ports# 允许http与https访问firewall-cmd --permanent --zone=public --add-service=httpfirewall-cmd --permanent --zone=public --add-service=httpsfirewall-cmd --reloadfirewall-cmd --zone=public --list-services# 允许访问的端口firewall-cmd --zone=public --add-port=2375/tcp --permanentfirewall-cmd --zone=public --add-port=2376/tcp --permanentfirewall-cmd --zone=public --add-port=2377/tcp --permanentfirewall-cmd --zone=public --add-port=4789/udp --permanentfirewall-cmd --zone=public --add-port=7946/tcp --permanentfirewall-cmd --zone=public --add-port=7946/udp --permanentfirewall-cmd --zone=public --add-port=9000/tcp --permanentfirewall-cmd --reloadfirewall-cmd --zone=public --list-ports
http/https用于一些web服务的访问,
2375/tcp,2376/tcp,2377/tcp,4789/udp,7946/tcp,7946/udp 这些都是docker swarm所需的端口/协议
9001/tcp 是Portainer需要的端口/协议。
2. docker swarm集群创建
2.1 docker swarm manager节点创建
-
初始化
# advertise-addr 来指定其它节点连接m0时的地址$ docker swarm init --advertise-addr :2377 --listen-addr :2377
-
查看节点信息
$ docker node ls
-
查看网络信息 docker-swarm 初始化时会创建一个为overlay的网络
$ docker network ls
-
查看docker信息,判断Swarm:active & Is Manager: true
$ docker info
2.2 work节点加入
2.2.1 获取Swarm Manager 初始化时生成的 token执行加入
#其中是Swarm Manager初始化时生成的token,是Swarm Manager的IP地址,是Swarm Manager的端口号$ sudo docker swarm join --token :2377
2.2.2 单独执行加入操作
-
先查看docker信息,查看该节点是否加入swarm
$ docker info
-
离开当前swarm集群
$ docker swarm leave
-
在manager节点上执行加入worker节点 获取令牌、IP 地址和端口
$ docker swarm join-token worker
-
在worker节点上执行manager节点获取的命令
docker swarm join --token SWMTKN-1-0vye595ayebz9osp8q4vysbegthkocodxrjjhptl1h1kb8eebu-3spth3tyii9hi1thrr1t1035m 172.29.60.28:2377
-
再次查看docker信息,Swarm:active & Is Manager: false
3. Portainer管理工具搭建
3.1 manager节点启动portainer_agent服务
-
创建overlay网络
docker network create \\ --driver overlay \\ --attachable \\ portainer_agent_network ## 创建overlay网络是为了保持后续创建的全局服务portainer_agent与Portainer容器位于一个网络内,便于相互通信
-
启动portainer_agent服务
docker service create \\ --name portainer_agent \\ --network portainer_agent_network \\ -p 9003:9001/tcp \\ --mode global \\ --constraint \'node.platform.os == linux\' \\ --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \\ --mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \\ portainer/agent
3.2 创建portainer服务
docker service create \\ --name portainer-ce \\ --network portainer_agent_network \\ --publish 9002:9000 --replicas=1 \\ --constraint \'node.role==manager\' \\ --container-label com.docker.stack.namespace=portainer \\ --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \\ --mount type=volume,src=portainer_data,dst=/data \\ 6053537/portainer-ce \\ -H unix:///var/run/docker.sock
参数说明:
-publish 9000:9000 :宿主机9000端口映射容器中的9000端口
-mount type=bind /var/run/docker.sock:/var/run/docker.sock :把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中;
-mount type=volume portainer_data:/data :把宿主机portainer_data数据卷挂载到容器/data目录;
--constraint node.role==manager 指定容器运行在管理节点上.
--constraint node.hostname==manager-node 指定容器运行在管理节点manager-node上.
--container-label com.docker.stack.namespace=portainer 是为了prometheus+grafana能通过stack标签查看监控数据,建议今后不以stack方式部署的服务都加上com.docker.stack.namespace标签。
#查看docker service创建出来的任务$ docker service ls# 删除服务$ docker service rm # 删除swarm node节点$ docker node rm
三、私有镜像仓库搭建
1. 使用Harbor搭建Docker镜像私服
-
下载可以安装Docker的Harbor,官网下载地址:https://github.com/goharbor/harbor/releases
-
解压缩harbor-offline-installer-vx.x.x.tgz文件,修改harbor.yml配置文件
# 修改harbor.yml文件hostname: 仓库主机IPhttp: port: 8083https: port: 443 certificate: /your/certificate/path private_key: /your/private/key/pathdata_volume: /datalocation: /harbor# 启动Harborsudo ./install.sh
-
登录私服 http://ip:port:8083 用户名密码:admin / Harbor12345
-
在docker服务器上添加私有镜像仓库
$ vim /etc/docker/daemon.json{ \"insecure-registries\": [\"harborIp:port\"]}#--insecure-registry选项允许从不通过TLS(https)的Docker注册表中拉取和推送镜像$ systemctl daemon-reload$ systemctl restart docker.service
-
docker设置自定义目录(可选)
-
使用docker info查看默认存储位置
$ docker info## Docker Root Dir: /var/lib/docker
-
停止docker服务
# 停止dockersudo systemctl stop dockersudo systemctl stop docker.servicesudo systemctl stop docker.socketsudo systemctl status docker.service
-
创建自定义目录,并迁移数据
$ sudo mkdir -p /new/docker/dir$ sudo rsync -aqxP /var/lib/docker/ /new/docker/dir/
-
修改docker配置项信息
# 默认情况下,/etc/docker文件夹或/etc/docker/daemon.json文件不存在$ vi /etc/docker/daemon.json{ \"data-root\":\"{在此处填写存储路径}\"}
-
保存文件重启服务
$ systemctl daemon-reload$ systemctl restart docker.service
-
-
登录镜像仓库
-
登录
$ docker login harborIp:port
-
登录失败
Error response from daemon: Get \"https://172.*.*.25/v2/\": dial tcp 172.*.*.25:443: connect: connection refused1. 注释/etc/docker/daemon.json中的insecure-registries配置2. $ vim /usr/lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd --insecure-registry harborIp:port
-
-
上传镜像
-
镜像打标签
docker tag :port//
-
推镜像
docker push
-
四、服务管理
1. 一键部署集群服务
-
添加注册表(镜像私库)
-
集群部署服务
-
选择主机网络运行
2. 更改节点可用性
$ docker node update --availability drain node_1
如果对你有帮助,请关注公众号: