docker安装Portainer

一、创建网络 mynet

作用:之后可以通过容器名连接相应容器

1
2
3
4
5
docker network create mynet

docker network ls

docker network rm mynet

二、安装Portainer

2.1、传统命今行安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 停止旧的容器
docker stop portainer

# 删除旧的容器
docker rm portainer

# 删除旧的镜像
docker rmi portainer/portainer-ce

# 拉取新的镜像,注意portainer从2.0.0版本镜像名字改为portainer/portainer-ce
docker pull portainer/portainer-ce

docker run -d \
--name=portainer \
--hostname=docker-portainer \
-p 8000:8000 \
-p 9000:9000 \
--net='mynet' \
--restart=unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /root/docker-data/portainer/data:/data \
portainer/portainer-ce

2.2、docker compose 安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# docker-compose.yml
version: '3.3'
services:
portainer-ce:
container_name: portainer
hostname: docker-portainer
# ports:
# - '8000:8000'
# - '9000:9000'
network_mode: mynet
restart: unless-stopped
volumes:
- '/var/run/docker.sock:/var/run/docker.sock'
- '/root/docker-data/portainer/data:/data'
image: portainer/portainer-ce
1
2
3
docker compose down
docker rmi portainer/portainer-ce
docker compose up -d

三、用portainer远程管理其他机器上的docker

docker常见端口

2375:未加密的docker socket,远程无密码访问主机

2376:tls加密套接字,

2377:集群模式套接字,适用于群集管理器,不适用于docker客户端

5000:docker注册服务

4789 和 7946:覆盖网络

1、方法:创建 docker-tls.sh,并执行

https://docs.docker.com/engine/security/protect-access/

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
#/bin/bash
#相关配置信息(除IP有用,其他基本咩有用)
#服务器IP或者域名
SERVER="10.10.10.51"
PASSWORD="lyou"
COUNTRY="CN"
STATE="ZJ"
CITY="HZ"
ORGANIZATION="ilab"
ORGANIZATIONAL_UNIT="ilab"
EMAIL="janwe88@gmail.com"

###开始生成文件###
echo"开始生成文件"
#创建密钥文件夹
mkdir -p ./ca
#切换到生产密钥的目录
cd ca
#生成ca私钥(使用aes256加密)
openssl genrsa -aes256 -passout "pass:$PASSWORD" -out ca-key.pem 4096
#生成ca江书,填写配置信息
openssl req -new -x509 -passin "pass:$PASSWORD" -days 3650 -key ca-key.pem -sha256 -out ca.pem -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL"

#生成server证书私钥文件
openssl genrsa -out server-key.pem 4096
#生成server证书请求文件
openssl req -subj "/CN=$SERVER" -new -key server-key.pem -out server.csr
#配置白名单 你使用的是服务器IP的话,请将前面的DNS换成IP echo subjectAltName IP:$SERVER, IP:0.0.0.0 >> extfile.cnf
# sh -c 'echo "subjectAltName = DNS:'$SERVER',IP: 0.0.0.0" >> extfile.cnt'
sh -c 'echo "subjectAltName = IP:'$SERVER',IP: 0.0.0.0" >> extfile.cnf'
sh -c 'echo "extendedKeyUsage = serverAuth" >> extfile.cnf'
#使用CA证书及CA密钥以及上面的server证书请求文件进行签发,生成server自签证书
openssl x509 -req -days 3650 -in server.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out server-cert.pem -extfile extfile.cnf


#生成c1ient证书RSA私钥文件
openssl genrsa -out key.pem 4096
#生成client证书请求文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
sh -c 'echo extendedKeyUsage = clientAuth >> extfile.cnf'
#生成client自签证书(根据上面的client私钥文件、c1ient证书请求文件生成)
openssl x509 -req -days 3650 -in client.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out cert.pem -extfile extfile.cnf

#更改密钥权限
chmod 0400 ca-key.pem key.pem server-key.pem
#更改密钥权限
chmod 0444 ca.pem server-cert.pem cert.pem
#删除无用文件
rm -rf ca.srl server.csr client.csr extfile.cnf

echo "生成文件完成"
###生成结束###
2、修改 /usr/lib/systemd/system/docker.service
1
2
3
4
5
6
7
8
9
10
#1、将/usr/lib/systemd/system/docker.service 中 /ExecStart修改为如下的
# 在ExecStart=/usr/bin/dockerd 后面追加如下内容
sed -i "s/ExecStart=/#ExecStart=/g" /usr/lib/systemd/system/docker.service
line=$(sed -n -e "/#ExecStart=/=" /usr/lib/systemd/system/docker.service)
# tls加密
# sed -i "${line}a ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375" /usr/lib/systemd/system/docker.service
sed -i "${line}a ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/root/docker-data/docker-ca/ca/ca.pem --tlscert=/root/docker-data/docker-ca/ca/server-cert.pem --tlskey=/root/docker-data/docker-ca/ca/server-key.pem" /usr/lib/systemd/system/docker.service

#2、重启
systemctl daemon-reload & systemctl restart docker
3、测试连通性
1
2
3
4
5
docker --tlsverify \
--tlscacert=ca.pem \
--tlscert=cert.pem \
--tlskey=key.pem \
-H=10.10.10.3:2376 version
4、在控制的Portainer中添加被控制Portainer

image-20220823003525698

四、portainer管理局域网中的群晖docker

1
2
3
4
# 打开/var/packages/Docker/etc/dockerd.json
sudo vi /var/packages/Docker/etc/dockerd.json
# 并添加以下hosts后 重启docker
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
1
2
3
netstat -tnlp |grep 2375

ps -ef | grep docker

参考文档:https://zhuanlan.zhihu.com/p/149235759

查看防火墙状态

1
>systemctl status firewalld

开启防火墙

1
>systemctl start firewalld

关闭防火墙

1
>systemctl stop firewalld

查看当前firewall状态

1
>firewall-cmd --state

重启firewall

1
>firewall-cmd --reload

禁止开机启动

1
>systemctl disable firewalld.service 

查看已经开放的端口:

1
>firewall-cmd --list-ports

开启端口

1
>firewall-cmd --zone=public --add-port=80/tcp --permanent

命令含义:

–zone #作用域

–add-port=80/tcp #添加端口,格式为:端口/通讯协议

–permanent #永久生效,没有此参数重启后失效

开启端口后需要重启防火墙


转载请注明来源,欢迎指出任何有错误或不够清晰的表达。可以邮件至 xiyugee@qq.com