docker篇-(安装docker web控制台portainer)

查找镜像

docker search portainer

这里拉取portainer/portainer-ce这个镜像
在这里插入图片描述

编写docker-compose文件

version: '3'
services:
  portainer:
    image: portainer/portainer-ce
    container_name: portainer
    ports:
    - 9000:9000
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock #因为需要管理docker,所以需要配置docker.sock文件映射
    - ./data:/data #portainer默认挂载的数据目录
    networks:
      portainer:
        ipv4_address: "10.10.110.80"
networks:
  portainer:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 10.10.0.0/16

运行portainer

docker-compose up -d

第一次访问页面需要配置账号密码
在这里插入图片描述
选择docker
在这里插入图片描述
在这里插入图片描述
点击local进入容器管理界面
在这里插入图片描述

为portainer添加ssl支持

这里我没有具体去看过portainer官方的ssl配置,就使用nginx反向代理的方式实现ssl

1.在同级目录下创建ssl目录

# 当前目录为/root/portainer,创建之后为/root/portainer/ssl
mkdir ssl && cd ssl

这里生成证书我使用的是cfssl进行生成,下载地址 https://pkg.cfssl.org/或者执行以下脚本进行安装

wget -O /usr/local/sbin/certinfo https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 && chmod +x /usr/local/sbin/certinfo
wget -O /usr/local/sbin/cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 && chmod +x /usr/local/sbin/cfssl
wget -O /usr/local/sbin/cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 && chmod +x /usr/local/sbin/cfssljson

2.编写ca-config.json文件
使用cfssl打印默认ca-config文件,对其进行修改

cfssl print-defaults config > ca-config.json

修改后的ca-config.json

{
    "signing": {
        "default": {
            "expiry": "876000h"
        },
        "profiles": {
            "portainer": {
                "expiry": "876000h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth"
                ]
            }
        }
    }
}

3.编写ca-csr.json文件
使用cfssl命令打印默认ca-csr配置

cfssl print-defaults csr > ca-csr.json

修改后的ca-csr.json

{
    "CN": "www.portainer.com.cn",
    "hosts": [
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "US",
            "L": "CA",
            "ST": "San Francisco"
        }
    ]
}

4.生成ca根证书

cfssl gencert -initca ca-csr.json | cfssljson -bare ca

目录如下
在这里插入图片描述
5.编写server端证书配置

cfssl print-defaults csr > server-csr.json

修改后的server-csr.json

{
    "CN": "www.portainer.com.cn",
    "hosts": [
    ],
    "key": {
        "algo": "ecdsa",
        "size": 256
    },
    "names": [
        {
            "C": "US",
            "L": "CA",
            "ST": "San Francisco"
        }
    ]
}

6.生成server端证书

 cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=portainer server-csr.json | cfssljson -bare server

目录如下
在这里插入图片描述
7.在docker-compose.yml添加nginx
返回到portainer目录,修改docker-compose.yml文件,内容如下
docker-compose.yml

version: '3'
services:
  portainer:
    image: portainer/portainer-ce
    container_name: portainer
    #ports:
    #- 9000:9000 不需要暴露端口,通过nginx暴露
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    - ./data:/data
    networks:
      portainer:
        ipv4_address: "10.10.110.80"
  nginx:
    image: nginx:alpine
    container_name: portainer-web
    ports:
    - 443:443
    volumes:
    - ./ssl:/opt/ssl/portainer
    - ./conf.d:/etc/nginx/conf.d
    networks:
    - portainer
networks:
  portainer:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 10.10.0.0/16

8.编写nginx配置文件
在同级目录创建conf.d目录

mkdir conf.d && cd conf.d

编写portainer.conf文件

upstream portainer {
  ip_hash;
  server 10.10.110.80:9000 weight=1;
}
server {
    listen       443 ssl http2 default_server;
    server_name  www.portainer.com.cn [::]:443 ssl http2 default_server;
    ssl_certificate     /opt/ssl/portainer/server.pem;  # pem文件的路径
    ssl_certificate_key  /opt/ssl/portainer/server-key.pem; # key文件的路径
    ssl_session_timeout  5m;    #缓存有效期
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    #加密算法
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #安全链接可选的加密协议
    ssl_prefer_server_ciphers on;   #使用服务器端的首选算法
   
    location / {
        proxy_set_header X-Real-IP $remote_addr;                       # 将客户端真实ip存放到X-Real-IP这个header里面,由于这里是没有使用host模式启动nginx,获取的会是宿主机的ip
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   # 每经过一个反向代理,就会把反向代理IP存放在X-Forwarded-For里
        proxy_pass http://portainer;
    }

  
}

目录如下
在这里插入图片描述
9.启动容器
返回到portainer目录

cd ..

目录结构如下
在这里插入图片描述
执行docker-compose.yml脚本

docker-compose up -d

通过浏览器访问页面效果如下
因为是自签证书,所以这里报的是不安全
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值