• portainer管理远程docker和docker-swarm集群


    使用前请先安装docker和docker-compose,同时完成docker-swarm集群初始化

    一、portainer-ce部署

    部署portainer-ce实时管理本机docker,使用docker-compose一键拉起

    docker-compose.yml

    version: '3'
    services:
      portainer:
        container_name: portainer
        #image: portainer/portainer
        image: 6053537/portainer-ce
        #image: portainer/portainer-ce
        command: -H unix:///var/run/docker.sock
        ports:
          - 9000:9000
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
          - portainer_data:/data
        restart: always
    volumes:
      portainer_data:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    6053537/portainer-ce 此镜像为中文版本,效果如下
    在这里插入图片描述
    管理本地docker比较简单,直接使用volumes挂载目录即可 /var/run/docker.sock:/var/run/docker.sock

    二、管理远程docker和docker-swarm步骤

    1、开启docker远程访问

    1)低安全性开启(不推荐)

    直接在守护进程服务文件后添加 -H tcp://0.0.0.0:2375配置即可

    # 修改守护进程文件
    vim /usr/lib/systemd/system/docker.service
    
    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
    
    • 1
    • 2
    • 3
    • 4

    2)高安全性开启(推荐)

    需要先行生成TLS证书文件
    这里直接提供一份大佬写好的TLS证书生成脚本

    2.1、使用gen-TLS.sh脚本生成TLS证书

    /etc/docker/certs创建gen-TLS.sh

    mkdir -p /etc/docker/certs && cd /etc/docker/certs && vi gen-TLS.sh 
    
    chmod +x /etc/docker/certs/gen-TLS.sh
    
    ./gen-TLS.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5

    gen-TLS.sh 脚本内容如下

    #!/bin/bash
    #
    # -------------------------------------------------------------
    # 自动创建 Docker TLS 证书
    # wget https://gitee.com/dromara/Jpom/raw/master/script/docker-tls.sh
    # curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    # systemctl daemon-reload && systemctl restart docker
    # -------------------------------------------------------------
    # 以下是配置信息
    # --[BEGIN]------------------------------
    NOW_PATH=$(
    	cd "$(dirname "$0")" || exit
    	pwd
    )"/"
    echo "当前目录:${NOW_PATH} 证书文件将保存在此文件夹下"
    read -p "请输入证书使用的 IP 地址或者 HOST: " HOST
    #
    echo "您输入的是:${HOST} 证书只能在这个 IP 或者 HOST 下使用,证书密码和输入的一致"
    # --[INIT PARAMETER]------------------------------
    PASSWORD="$HOST"
    COUNTRY="CN"
    STATE="$HOST"
    CITY="$HOST"
    ORGANIZATION="$HOST"
    ORGANIZATIONAL_UNIT="Dev"
    COMMON_NAME="$HOST"
    EMAIL="$HOST@docker-tls.com"
    # --[END]--
    # Generate CA key
    openssl genrsa -aes256 -passout "pass:$PASSWORD" -out "ca-key.pem" 4096
    # Generate CA
    openssl req -new -x509 -days 365 -key "ca-key.pem" -sha256 -out "ca.pem" -passin "pass:$PASSWORD" -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$COMMON_NAME/emailAddress=$EMAIL"
    # Generate Server key
    openssl genrsa -out "server-key.pem" 4096
    # Generate Server Certs.
    openssl req -subj "/CN=$COMMON_NAME" -sha256 -new -key "server-key.pem" -out server.csr
    rm -f extfile.cnf
    echo "subjectAltName = DNS.1:$HOST,IP.1:127.0.0.1,IP.2:$HOST" >>extfile.cnf
    echo "extendedKeyUsage = serverAuth" >>extfile.cnf
    openssl x509 -req -days 365 -sha256 -in server.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "server-cert.pem" -extfile extfile.cnf
    # Generate Client Certs.
    rm -f extfile.cnf
    openssl genrsa -out "key.pem" 4096
    openssl req -subj '/CN=client' -new -key "key.pem" -out client.csr
    echo "extendedKeyUsage = clientAuth" >>extfile.cnf
    openssl x509 -req -days 365 -sha256 -in client.csr -passin "pass:$PASSWORD" -CA "ca.pem" -CAkey "ca-key.pem" -CAcreateserial -out "cert.pem" -extfile extfile.cnf
    rm -f client.csr server.csr ca.srl extfile.cnf
    
    # check
    if [ -f "${NOW_PATH}key.pem" -a -f "${NOW_PATH}ca.pem" -a -f "${NOW_PATH}ca-key.pem" -a -f "${NOW_PATH}server-cert.pem" -a -f "${NOW_PATH}server-key.pem" ]; then
    	echo "证书生成完成"
    	echo "客户端使用文件:key.pem ca.pem cert.pem"
    	echo "Docker 端使用文件:ca.pem server-cert.pem server-key.pem"
    	echo "Docker 推荐配置内容:-H tcp://0.0.0.0:2375 --tlsverify --tlscacert=${NOW_PATH}ca.pem --tlscert=${NOW_PATH}server-cert.pem --tlskey=${NOW_PATH}server-key.pem"
    else
    	echo "证书生成不完成,请检查配置和根据错误日志排查"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    执行此脚本会提升让输入IP,此IP为你开启远程docker权限的IP,被管理的远程docker的IP

    
    
    • 1

    在这里插入图片描述
    脚本执行结果如下
    在这里插入图片描述
    按照脚本提示

    客户端使用文件:key.pem ca.pem cert.pem
    Docker端使用文件:ca.pem server-cert.pem server-key.pem
    
    • 1
    • 2

    这里客户端指portainer,我们将会在portainer中使用到key.pem ca.pem cert.pem这三个证书文件

    2.2、配置使用TLS证书开启docker远程访问权限
    # 修改守护进程文件
    vim /usr/lib/systemd/system/docker.service
    
    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/etc/docker/certs/ca.pem --tlscert=/etc/docker/certs/server-cert.pem --tlskey=/etc/docker/certs/server-key.pem -H tcp://0.0.0.0:2375
    
    • 1
    • 2
    • 3
    • 4

    2、在portainer中添加远程docker

    在这里插入图片描述
    这里以第二项docker-swarm为例
    在这里插入图片描述
    选着API这种方式,填写IP和PORT,勾选TLS,将脚本生成的三个证书文件key.pem ca.pem cert.pem对应添加
    在这里插入图片描述
    成功后在首页即可看到相关信息如下
    在这里插入图片描述
    参考:Docker Swarm(十)Portainer 集群可视化管理

  • 相关阅读:
    Java+JSP基于ssm共享充电宝管理系统-计算机毕业设计
    【从0到1开发一个网关】网关日志的开发
    使用 uWSGI 部署 Django 应用详解
    五、资源控制器
    用户登录程序需求
    深入了解移动端适配的方案
    拼多多商家私信群发脚本,按键精灵版工具,源码分享
    C语言的文件操作
    阿里开源组件Nacos实战操作之安装部署完整版
    飞行员需要新的策略来解决资金被困、外汇危机
  • 原文地址:https://blog.csdn.net/UberSoldier/article/details/136572158