> 技术文档 > Docker Swarm与Portainer搭建可视化管理工具_docker swarm portainer

Docker Swarm与Portainer搭建可视化管理工具_docker swarm portainer


Docker管理工具

一、Portainer-ce单机本地容器管理部署

  1. 下载汉化版镜像

    $ docker pull 6053537/portainer-ce 
  2. 创建存储券

    $ docker volume create portainer_data 
  3. 运行容器

    $ 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节点创建
  1. 初始化

    # advertise-addr 来指定其它节点连接m0时的地址$ docker swarm init --advertise-addr :2377 --listen-addr :2377 
  2. 查看节点信息

    $ docker node ls
  3. 查看网络信息 docker-swarm 初始化时会创建一个为overlay的网络

    $ docker network ls
  4. 查看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 单独执行加入操作

  1. 先查看docker信息,查看该节点是否加入swarm

    $ docker info
  2. 离开当前swarm集群

    $ docker swarm leave
  3. 在manager节点上执行加入worker节点 获取令牌、IP 地址和端口

    $ docker swarm join-token worker
  4. 在worker节点上执行manager节点获取的命令

    docker swarm join --token SWMTKN-1-0vye595ayebz9osp8q4vysbegthkocodxrjjhptl1h1kb8eebu-3spth3tyii9hi1thrr1t1035m 172.29.60.28:2377
  5. 再次查看docker信息,Swarm:active & Is Manager: false

3. Portainer管理工具搭建

3.1 manager节点启动portainer_agent服务
  1. 创建overlay网络

    docker network create \\ --driver overlay \\ --attachable \\ portainer_agent_network ## 创建overlay网络是为了保持后续创建的全局服务portainer_agent与Portainer容器位于一个网络内,便于相互通信
  2. 启动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镜像私服
  1. 下载可以安装Docker的Harbor,官网下载地址:https://github.com/goharbor/harbor/releases

  2. 解压缩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
  3. 登录私服 http://ip:port:8083 用户名密码:admin / Harbor12345

  4. 在docker服务器上添加私有镜像仓库

    $ vim /etc/docker/daemon.json{ \"insecure-registries\": [\"harborIp:port\"]}#--insecure-registry选项允许从不通过TLS(https)的Docker注册表中拉取和推送镜像​$ systemctl daemon-reload$ systemctl restart docker.service
  5. docker设置自定义目录(可选)

    1. 使用docker info查看默认存储位置

      $ docker info## Docker Root Dir: /var/lib/docker
    2. 停止docker服务

      # 停止dockersudo systemctl stop dockersudo systemctl stop docker.servicesudo systemctl stop docker.socketsudo systemctl status docker.service
    3. 创建自定义目录,并迁移数据

      $ sudo mkdir -p /new/docker/dir$ sudo rsync -aqxP /var/lib/docker/ /new/docker/dir/
    4. 修改docker配置项信息

      # 默认情况下,/etc/docker文件夹或/etc/docker/daemon.json文件不存在$ vi /etc/docker/daemon.json{ \"data-root\":\"{在此处填写存储路径}\"}
    5. 保存文件重启服务

      $ systemctl daemon-reload$ systemctl restart docker.service
  6. 登录镜像仓库

    1. 登录

      $ docker login harborIp:port
    2. 登录失败

      Error response from daemon: Get \"https://172.*.*.25/v2/\": dial tcp 172.*.*.25:443: connect: connection refused​1. 注释/etc/docker/daemon.json中的insecure-registries配置2. $ vim /usr/lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd --insecure-registry harborIp:port
  7. 上传镜像

    1. 镜像打标签

      docker tag  :port//
    2. 推镜像

      docker push 

四、服务管理

1. 一键部署集群服务
  1. 添加注册表(镜像私库)

  2. 集群部署服务

  3. 选择主机网络运行

2. 更改节点可用性
$ docker node update --availability drain node_1

如果对你有帮助,请关注公众号: