赞
踩
使用前请先安装docker和docker-compose,同时完成docker-swarm集群初始化
部署portainer-ce实时管理本机docker,使用docker-compose一键拉起
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:
6053537/portainer-ce
此镜像为中文版本,效果如下
管理本地docker比较简单,直接使用volumes
挂载目录即可 /var/run/docker.sock:/var/run/docker.sock
直接在守护进程服务文件后添加 -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
需要先行生成TLS证书文件
这里直接提供一份大佬写好的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
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
执行此脚本会提升让输入IP
,此IP为你开启远程docker权限的IP,被管理的远程docker的IP
脚本执行结果如下
按照脚本提示
客户端使用文件:key.pem ca.pem cert.pem
Docker端使用文件:ca.pem server-cert.pem server-key.pem
这里客户端指portainer
,我们将会在portainer中使用到key.pem ca.pem cert.pem
这三个证书文件
# 修改守护进程文件
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
这里以第二项docker-swarm
为例
选着API
这种方式,填写IP和PORT,勾选TLS,将脚本生成的三个证书文件key.pem ca.pem cert.pem
对应添加
成功后在首页即可看到相关信息如下
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。