Docker 管理工具 Portainer
更新: 4/19/2025 字数: 0 字 时长: 0 分钟
Portainer 是一款免费、开源的 Docker 图形化管理工具。它提供直观的界面,简化了 Docker 的管理和操作,包括:
- 状态面板:实时监控 Docker 环境的状态。
- 应用模板:快速部署预定义的应用程序。
- 容器管理:创建、启动、停止、重启和删除容器。
- 镜像管理:上传、下载和管理 Docker 镜像。
- 网络管理:创建和管理 Docker 网络。
- 数据卷管理:创建和管理 Docker 数据卷。
- 日志查看:查看容器的实时日志。
- 控制台访问:通过 Web 界面访问容器的控制台。
- Swarm 管理:管理和操作 Docker Swarm 集群和服务。
- 用户管理:管理 Portainer 的用户和权限。
安装 Portainer
# 创建目录同时进入
mkdir -p /root/docker/portainer && cd $_
# 下载 docker compose 配置文件
curl -L https://img.lisir.me/file/docker/portainer/docker-compose.yml
# 启动
docker compose up -d
配置 Docker API
如果你想使用 Portainer 来管理远程服务器上的 Docker 节点,则需要配置 Docker API。
注意,开启非加密的 Docker API 是个非常危险的行为!
直接暴露未加密的 Docker API 存在安全风险!强烈建议开启 TLS 加密。
使用 0.0.0.0 监听所有网络接口可能存在安全风险,因为这会使 Docker API 可以被公开访问。
建议在生产环境中仅允许受信任的 IP 地址访问 Docker API,并使用安全连接(如 TLS)进行通信。
开启未加密的 Docker API
在目标服务器上编辑 Docker 服务配置文件:
bash# 命令查看 docker.service 文件所在路径 systemctl status docker.service # 编辑 docker.service 文件 vim /usr/lib/systemd/system/docker.service
修改 ExecStart 行:
配置远程访问:添加
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
参数bashExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock --containerd=/run/containerd/containerd.sock
unix://var/run/docker.sock
:unix socket,本地客户端将通过这个来连接 Docker Daemontcp://0.0.0.0:2375
:tcp socket,表示允许任何远程客户端通过 2375 端口连接 Docker Daemon
重新加载服务并重启 Docker:
bash# 重新加载服务配置文件 sudo systemctl daemon-reload # 重启 Docker 服务 sudo systemctl restart docker
开启 TLS 加密的 Docker API
创建 TLS 证书:
bashcurl -fsSLO https://img.lisir.me/file/shell/generate_docker_api_pem.sh && bash generate_docker_api_pem.sh
这个脚本会自动生成所需的 TLS 证书文件,并保存在
/root/.docker/certs/
目录下。配置 Docker 服务:
编辑 Docker 服务配置文件
bashvim /usr/lib/systemd/system/docker.service
找到 ExecStart 行,在后面添加以下选项
bash-H=tcp://0.0.0.0:2376 --tlsverify --tlscacert=/root/.docker/certs/ca-docker_api.pem --tlscert=/root/.docker/certs/server-cert-docker_api.pem --tlskey=/root/.docker/certs/server-key-docker_api.pem
-H=tcp://0.0.0.0:2376
:指定监听的 IP 地址和端口 (这里使用 2376)。--tlsverify
:启用 TLS 验证。--tlscacert
:指定 CA 证书的路径。--tlscert
:指定服务器证书的路径。--tlskey
:指定服务器密钥的路径。
重新加载服务并重启 Docker:
bashsudo systemctl daemon-reload sudo systemctl restart docker
测试 Docker API
在配置完 Docker API 后,需要进行测试以确保其正常工作。
测试未加密的 Docker API
在 Portainer 所在的服务器上,使用以下命令测试是否可以连接到目标服务器的 Docker API:
# 格式 docker -H [目标服务器 IP]:[2375] info
docker -H 0.0.0.0:2375 info
如果出现类似以下的提示,表示配置成功(但也表明存在安全风险):
[DEPRECATION NOTICE]: API is accessible on http://0.0.0.0:2375 without encryption.
Access to the remote API is equivalent to root access on the host. Refer
to the 'Docker daemon attack surface' section in the documentation for
more information: https://docs.docker.com/go/attack-surface/
In future versions this will be a hard failure preventing the daemon from starting! Learn more at: https://docs.docker.com/go/api-security/
测试 TLS 加密的 Docker API
验证是否只能通过加密访问:
首先,尝试使用未加密的方式访问 Docker API:
bashdocker -H 0.0.0.0:2376 info
如果配置正确,应该会返回以下错误,表明 API 只能通过 HTTPS 访问:
txtClient: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Docker Buildx (Docker Inc., v0.9.1-docker) Server: ERROR: Error response from daemon: Client sent an HTTP request to an HTTPS server. errors pretty printing info
使用 TLS 验证访问:
尝试使用
--tlsverify
选项进行 TLS 验证:bashdocker -H 0.0.0.0:2376 --tlsverify info
如果出现以下错误,表示缺少证书文件:
txtunable to resolve docker endpoint: open /root/.docker/ca.pem: no such file or directory
配置证书:
这是因为当前用户的
~/.docker
目录下没有配置证书。执行以下命令将证书复制到该目录下:bashmv ~/.docker/certs/ca-docker_api.pem ~/.docker/ca.pem && \ mv ~/.docker/certs/server-cert-docker_api.pem ~/.docker/cert.pem && \ mv ~/.docker/certs/server-key-docker_api.pem ~/.docker/key.pem
再次使用 TLS 验证访问:
完成证书配置后,再次执行以下命令:
bashdocker -H 0.0.0.0:2376 --tlsverify info
如果一切配置正确,此时应该能够成功获取 Docker 信息,表示 TLS 加密的 Docker API 已经配置成功,并且只能通过加密方式访问。
其他 Docker API 使用方法
docker -H 0.0.0.0:2375 version # 查看 Docker 版本
docker -H 0.0.0.0:2375 image ls # 查看镜像包
在 Portainer 中添加 Docker 节点
添加 Environment:
- 进入 "Environments" 页面。
- 点击 "Add environment"。
选择 API 连接方式:
- 在向导中选择 "Docker API"。
配置 API 连接:
- Name:为环境指定一个名称。
- Docker API URL:输入目标服务器的 IP 地址和端口。
- 注意:如果开启了 TLS,请使用 2376 端口。
配置 TLS(如果开启了 TLS 加密):
- 打开 "TLS" 开关。
- 上传以下证书文件:
- TLS CA certificate:
/root/.docker/certs/ca-docker_api.pem
- TLS certificate:
/root/.docker/certs/cert-docker_api.pem
- TLS key:
/root/.docker/certs/key-docker_api.pem
- TLS CA certificate:
点击 "Add environment" 完成添加。
现在,你就可以在 Portainer 中管理远程 Docker 节点了。