Portainer.io安装并配置Docker远程访问及CA证书

Portainer.io安装并配置Docker远程访问及CA证书


一.安装 Portainer.io

version: '3.3'
services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    ports:
      - "8000:8000"
      - "9443:9443"
      - "9000:9000"
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./portainer_data:/data
2.启动容器
docker-compose up -d 

查看是否启动成功

docker ps -a | grep portainer

image-20240620103924858

查看日志

docker logs -f portainer

image-20240620104856162

在浏览器输入我们部署服务的ip:port 访问服务,第一次访问需要设置管理员密码。

访问地址:http://<your ip>:9000

登陆之后就是这样

image-20240620105015316

二.docker API远程访问并配置CA安全认证

1.配置安全(密钥)访问

创建CA私钥和CA公钥
创建一个ca文件夹用来存放私钥跟公钥

mkdir -p /usr/local/ca
cd /usr/local/ca

在Docker本机,生成CA私钥和公钥

openssl genrsa -aes256 -out ca-key.pem 4096

执行上述指令,会输入密码。此密码需记住,后面的步骤也需要。

image-20240620112406300

可以看到已经生成ca-key.pem证书文件

image-20240620112554479

2.补全CA证书信息
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

不切换目录,继续执行上述指令,会要求录入信息。

#输入上一步设置的密码
Enter pass phrase for ca-key.pem:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
# 国家:CN
Country Name (2 letter code) [XX]: CN
# 省份: 可以不填,直接回车
State or Province Name (full name) []:
# 地市:可以不填,直接回车
Locality Name (eg, city) [Default City]:
# 公司: 可以不填,直接回车
Organization Name (eg, company) [Default Company Ltd]:
# 组织: 可以不填,直接回车
Organizational Unit Name (eg, section) []:
# 服务器地址或域名,按要求填写
Common Name (eg, your name or your server's hostname) []:  <主机IP>
# 邮箱联系方式,可以不填,直接回车
Email Address []:

到这一步CA证书就创建完成了,还需要去创建服务器密钥和证书签名请求(CSR),确保“通用名称”与Docker时使用的主机名相匹配。

3.生成server-key.pem
openssl genrsa -out server-key.pem 4096
4.创建服务端签名请求证书文件
openssl req -subj "/CN=$<主机ip>" -sha256 -new -key server-key.pem -out server.csr
5.创建服务端扩展配置文件 extfile.cnf
echo "subjectAltName = IP:$<主机ip>,IP:0.0.0.0" > extfile.cnf
echo "extendedKeyUsage = serverAuth" >> extfile.cnf
6.创建签名生效的服务端证书文件

输入之前的密码

openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf

image-20240620115930339

7.创建客户端私钥
openssl genrsa -out key.pem 4096
8.创建客户端签名请求证书文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
7.创建客户端扩展配置文件 extfile-client.cnf
echo "extendedKeyUsage = clientAuth" > extfile-client.cnf
8.创建签名生效的客户端证书文件
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf

输入密码。

9.删除临时文件
rm -f client.csr server.csr extfile.cnf extfile-client.cnf
10.设置文件权限
chmod 0400 ca-key.pem key.pem server-key.pem
chmod 0444 ca.pem server-cert.pem cert.pem
11.配置docker服务端

修改vim /lib/systemd/system/docker.service文件中的ExecStart这一行,如下:

ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca-new-1/ca.pem --tlscert=/usr/local/ca-new-1/server-cert.pem --tlskey=/usr/local/ca-new-1/server-key.pem  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --containerd=/run/containerd/containerd.sock

其中/usr/local/ca-new-1/是刚才生产证书的目录。

修改之后重启docker服务

#重启
systemctl daemon-reload && systemctl restart docker

三.Portainer配置使用客户端证书

访问Portainer.io

image-20240622141105867

image-20240622141123973

image-20240622141220870

此处的Docker API URL是二.11步骤中的,-H tcp://0.0.0.0:2375这一段代码配置的端口号,ip则是主机IP。

然后需要从服务器上下载生成的ca文件。

-r--r--r--  1 root root 1952 Jun 20 11:11 ca.pem
-r--r--r--  1 root root 1883 Jun 20 11:12 cert.pem
-r--------  1 root root 3268 Jun 20 11:12 key.pem

然后依次对应上图配置中的

image-20240622141525548

配好之后点击如下按钮

image-20240622141630013

显示连接成功则表示已经配好,然后就可以在Portainer中看到目标主机的docker信息了

image-20240622141934836

以下是一个快速生成ca证书的脚本

#!/bin/sh

ip="<your ip>"
password="123456"
dir="/usr/local/ca-new-1" # 证书生成位置
validity_period=3650    # 证书有效期10年,单位是天

# 如果目录不存在则创建目录,否则删除重建
if [ ! -d "$dir" ]; then
  echo "$dir 不存在,将创建目录"
  mkdir -p $dir
else
  echo "$dir 存在,将删除并重建"
  rm -rf $dir
  mkdir -p $dir
fi

cd $dir || exit

# 1. 创建根证书 RSA 私钥
openssl genrsa -aes256 -passout pass:"$password" -out ca-key.pem 4096

# 2. 创建 CA 证书
openssl req -new -x509 -days $validity_period -key ca-key.pem -passin pass:"$password" -sha256 -out ca.pem -subj "/C=NL/ST=./L=./O=./CN=$ip"

# 3. 创建服务端私钥
openssl genrsa -out server-key.pem 4096

# 4. 创建服务端签名请求证书文件
openssl req -subj "/CN=$ip" -sha256 -new -key server-key.pem -out server.csr

# 创建服务端扩展配置文件 extfile.cnf
echo "subjectAltName = IP:$ip,IP:0.0.0.0" > extfile.cnf
echo "extendedKeyUsage = serverAuth" >> extfile.cnf

# 5. 创建签名生效的服务端证书文件
openssl x509 -req -days $validity_period -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out server-cert.pem -extfile extfile.cnf

# 6. 创建客户端私钥
openssl genrsa -out key.pem 4096

# 7. 创建客户端签名请求证书文件
openssl req -subj '/CN=client' -new -key key.pem -out client.csr

# 创建客户端扩展配置文件 extfile-client.cnf
echo "extendedKeyUsage = clientAuth" > extfile-client.cnf

# 8. 创建签名生效的客户端证书文件
openssl x509 -req -days $validity_period -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out cert.pem -extfile extfile-client.cnf

# 删除临时文件
rm -f client.csr server.csr extfile.cnf extfile-client.cnf

# 设置文件权限
chmod 0400 ca-key.pem key.pem server-key.pem
chmod 0444 ca.pem server-cert.pem cert.pem

echo "证书生成完成"

Docker安装和卸载(centos)
Ubuntu安装指定版本Docker

### 安装 Docker 配置远程访问 #### 准备工作 为了在 Ubuntu 上安装 Docker 设置图形化界面以支持远程访问,需先更新系统软件包列表确保拥有必要的依赖项。 ```bash sudo apt-get update && sudo apt-get upgrade -y ``` #### 安装 Docker CE 和 Docker Compose 按照官方推荐的方式安装 Docker 社区版 (CE),这通常是最稳定的选择之一[^2]: 1. **移除旧版本** ```bash sudo apt remove docker docker-engine docker.io containerd runc ``` 2. **安装必要组件** ```bash sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release ``` 3. **添加 Docker 的官方 GPG 密钥** ```bash curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg ``` 4. **设置稳定的仓库源** ```bash echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null ``` 5. **再次更新索引** ```bash sudo apt-get update ``` 6. **正式安装 Docker Engine** ```bash sudo apt-get install docker-ce docker-ce-cli containerd.io ``` 7. **验证安装成功与否** ```bash sudo docker run hello-world ``` 8. **安装 Docker Compose** 对于多容器应用来说非常有用。 ```bash sudo curl -L "https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d '"' -f 4)/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` 9. **启动服务设为开机自启** ```bash sudo systemctl start docker sudo systemctl enable docker ``` #### 设置 Docker 图形化界面 目前没有官方提供的独立 Docker GUI 应用程序适用于 Linux 发行版。不过有第三方开发的应用如 Portainer 或者 Kitematic 可供选择。这里介绍使用 Portainer 来作为 Docker 的 Web 界面管理工具。 ##### 使用 Portainer 创建 Web UI 接口 Portainer 是一款轻量级的开源解决方案,能够帮助管理员轻松管理和监控多个 Docker 主机环境。 1. **拉取镜像** ```bash sudo docker pull portainer/portainer-ce:latest ``` 2. **创建持久卷存储数据** ```bash sudo mkdir -p /var/lib/portainer/data/ ``` 3. **运行容器实例** ```bash sudo docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/portainer/data/:/data portainer/portainer-ce ``` 此时应该可以通过浏览器访问 `http://<your_server_ip>:9000` 访问到 Portainer 登录页面了。 #### 开放防火墙端口以便外部连接 为了让其他设备能通过网络访问本地主机上的 Docker API 或者上述提到的服务端口,则需要开放相应的 TCP/IP 协议下的特定端口号给外界通信。 假设要让所有人可以无阻碍地访问刚才部署好的 Portainer 实例的话,在终端执行如下命令来打开对应端口的安全策略: ```bash sudo ufw allow 9000/tcp comment 'Allow Portainer' ``` 如果之前已经激活过 UFW(Uncomplicated Firewall), 则记得重启它使更改生效;如果没有开启则可以直接启用该功能. 最后一步就是确认服务器 IP 地址是否正确指向公网地址或者是内网可被寻址的位置上,这样才能保证远端机器顺利连入目标站点完成后续操作流程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值