🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## [https://blog.csdn.net/u012586326/article/details/112343808](https://blog.csdn.net/u012586326/article/details/112343808) ## :-: Portainer 安装与配置 ## 一、介绍 ​ [Portainer](https://www.portainer.io/) 是一个开源、轻量级Docker管理用户界面,基于Docker API,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。 ## 二、安装使用 ​ 安装使用见官方手册:[https://www.portainer.io/installation/。](https://www.portainer.io/installation/%E3%80%82) ​ 建议建议直接使用 docker 安装,方便快捷。如果仅有一个docker宿主机,则可使用单机版运行,Portainer单机版运行十分简单,只需要一条语句即可启动容器,来管理该机器上的docker镜像、容器等数据,使用如下指令,先拉取docker镜像,再运行: ~~~shell # 搜索镜像 docker search portainer/portainer # 拉取镜像 docker pull portainer/portainer # 运行镜像 docker run -d -p 9000:9000 -v /root/portainer:/data -v /var/run/docker.sock:/var/run/docker.sock --name dev-portainer portainer/portainer ~~~ >[danger] \-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 # 指定运行容器的名称 **注意:** 在启动容器时必须挂载本地 /var/run/docker.socker与容器内的/var/run/docker.socker连接。 启动完成,访问 `<ip>:9000`,第一次访问需要创建一个管理员用户 ![](https://img.kancloud.cn/9d/34/9d3439fbb3fe55f5a7805bd5fe6dcbcd_657x457.png) admin/admin123 ## 三、远程链接 ### 添加Endpoint Endpoints -> Create endpoint -> Docker ![](https://img.kancloud.cn/74/c0/74c0ace8bbae0e43366119796f543aa4_956x554.png) ![](https://img.kancloud.cn/a9/fa/a9fad3ebbc64327337f3089b37716b2a_1339x566.png) ## 四、docker添加TLS暴露2375 1、创建证书脚本 创建文件 ``` cd /root/docker touch tlscert.sh ``` 脚本 ``` #!/bin/bash # @author: Bocloud if [ $# != 1 ] ; then echo "USAGE: $0 [HOST_IP]" exit 1; fi #============================================# # 下面为证书密钥及相关信息配置,注意修改 # #============================================# PASSWORD="Beyond#11" COUNTRY=CN PROVINCE=jiangsu CITY=suzhou ORGANIZATION=Bocloud GROUP=OEM NAME=Bocloud HOST=$1 SUBJ="/C=$COUNTRY/ST=$PROVINCE/L=$CITY/O=$ORGANIZATION/OU=$GROUP/CN=$HOST" echo "your host is: $1" # 1.生成根证书RSA私钥,PASSWORD作为私钥文件的密码 openssl genrsa -passout pass:$PASSWORD -aes256 -out ca-key.pem 4096 # 2.用根证书RSA私钥生成自签名的根证书 openssl req -passin pass:$PASSWORD -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem -subj $SUBJ #============================================# # 用根证书签发server端证书 # #============================================# # 3.生成服务端私钥 openssl genrsa -out server-key.pem 4096 # 4.生成服务端证书请求文件 openssl req -new -sha256 -key server-key.pem -out server.csr -subj "/CN=$HOST" # 5.使tls连接能通过ip地址方式,绑定IP echo subjectAltName = IP:127.0.0.1,IP:$HOST > extfile.cnf # 6.使用根证书签发服务端证书 openssl x509 -passin pass:$PASSWORD -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf #============================================# # 用根证书签发client端证书 # #============================================# # 7.生成客户端私钥 openssl genrsa -out key.pem 4096 # 8.生成客户端证书请求文件 openssl req -subj '/CN=client' -new -key key.pem -out client.csr # 9.客户端证书配置文件 echo extendedKeyUsage = clientAuth > extfile.cnf # 10.使用根证书签发客户端证书 openssl x509 -passin pass:$PASSWORD -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf #============================================# # 清理 # #============================================# # 删除中间文件 rm -f client.csr server.csr ca.srl extfile.cnf # 转移目录 mkdir client server cp {ca,cert,key}.pem client cp {ca,server-cert,server-key}.pem server rm {cert,key,server-cert,server-key}.pem # 设置私钥权限为只读 chmod -f 0400 ca-key.pem server/server-key.pem client/key.pem ``` 2、执行脚本生成TLS证书配置 ~~~ bash ./tlscert.sh 192.168.2.219 IP是开放端口的IP地址 ~~~ ![](https://img.kancloud.cn/37/45/37454a674022918dd54f7510cc3cb320_752x534.png) ``` 证书路径如下:/root/docker ``` ![](https://img.kancloud.cn/09/f8/09f8bc9ffaf274aa644f81e49b1f61eb_362x232.png) 3、配置服务端dockercp证书到docker下。 ~~~ cp server/* /etc/docker ~~~ 修改/usr/lib/systemd/system/docker.service文件,在 `ExecStart=/usr/bin/dockerd -H fd://` 后添加上证书配置 ``` ExecStart=/usr/bin/dockerd -H fd:// --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H=unix:///var/run/docker.sock -H=0.0.0.0:2375 ``` 重启docker使配置生效。 ~~~ systemctl daemon-reload systemctl restart docker ~~~ #### 4、外部访问的方式 1、客户端加tls参数访问 ~~~ docker --tlsverify --tlscacert=client/ca.pem --tlscert=client/cert.pem --tlskey=client/key.pem -H tcp://192.168.2.219:2375 images ~~~ 2、Docker API方式访问 ~~~ curl https://192.168.2.219:2375/images/json --cert client/cert.pem --key client/key.pem --cacert client/ca.pem ~~~ 3、Portainer 远程 TLS ![](https://img.kancloud.cn/fe/30/fe30aa01fc30a00574a8a53b538e8596_1057x552.png) 五、添加Docker私服仓库 左侧下方Registries -> Add registry,输入基本信息,如需认证访问,开启Authentication开关 ![](https://img.kancloud.cn/d9/82/d982b0d157606963e16bc015fe1d5d0d_1123x725.png)