Skip to content

Docker 管理工具 Portainer

更新: 1/6/2025 字数: 0 字 时长: 0 分钟

Portainer 是一款免费、开源的 Docker 的图形化管理工具,其能够提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm 集群和服务等集中管理和操作、登录用户管理和控制等功能。

安装 Docker

更新、安装必备软件

bash
apt-get update && apt-get install -y wget vim

Docker 安装

bash
wget -qO- get.docker.com | bash
# or
curl -sSL get.docker.com | sh

查看 Docker 版本

bash
docker -v

开机自动启动

bash
systemctl enable docker

卸载 Docker

bash
sudo apt-get purge docker-ce docker-ce-cli containerd.io
bash
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

Docker-compose 安装

bash
curl -L "https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

Docker 基本命令

bash
docker ps -a #查看运行的镜像进程
docker stop <CONTAINER ID> #停止该镜像进程
docker start <CONTAINER ID> #启动该镜像进程
docker rm <CONTAINER ID> #卸载镜像
docker images #查看当前 Docker 的镜像 IMAGE ID
docker rmi <IMAGE ID> #删除镜像

修改 Docker 配置

限制日志文件大小,防止 Docker 日志塞满硬盘

bash
cat > /etc/docker/daemon.json <<EOF
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    }
}
EOF

然后重启 Docker 服务

bash
systemctl restart docker

安装 Portainer

bash
# 创建目录同时进入
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 后,修改 vim /usr/lib/systemd/system/docker.service 暴露 docker api 接口
bash
# 命令查看 docker.service 文件所在路径
systemctl status docker.service

# 编辑 docker.service 文件
nano /lib/systemd/system/docker.service

修改配置项ExecStart中的值为:

bash
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock

🚫 直接开启非加密的 Docker API 是个非常危险的行为!

重启 Docker 服务

bash
# 重新加载服务配置文件
systemctl daemon-reload

# 重启 Docker 服务
systemctl restart docker

在 Portainer 所在服务器测试是否可连接目标服务器 Docker Api

bash
# 格式 docker -H [目标服务器IP/公网IP]:[2375/外网IP映射的端口号] info
docker -H 0.0.0.0:2375 info

# 出现以下内容则配置成功
WARNING: 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/engine/security/security/#docker-daemon-attack-surface

完成以上内容后即可在 Portainer 的 “端点/EndPoint” 菜单中点击 “添加端点/Add EndPoint”, 来添加目标服务器 Docker节点

开启 TLS 认证

Docker 自带 API 功能,支持对 Docker 进行管理,但是默认并不启用,而且一般在没有开启加密通信的时候直接启用 API 会有安全风险。

因此我们需要开启 TLS 加密来保障 Docker API 通信的安全性。通过开启 TLS 防止未经许可的客户端访问服务端节点,保障其系统安全性。

而 Docker API 也适用于在一个 Portainer 示例上来远程管理多台机器,这也是我最初使用这一功能的原因。接下来将介绍如何完成 TLS 的设置,来保障 Docker API 通信的安全性。

创建 TLS 证书

脚本链接:https://img.lisir.me/file/shell/generate_docker_api_pem.sh

bash
# 获取脚本并赋予执行权限
wget https://img.lisir.me/file/shell/generate_docker_api_pem.sh && chmod +x generate_docker_api_pem.sh

# 执行脚本
./generate_docker_api_pem.sh

开启 Docker API

编辑 docker 配置文件:

bash
vim /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

执行以下命令重新加载服务并重启 Docker:

bash
systemctl daemon-reload && service docker restart

配置 Portainer

  • 打开 Portainer,进入 Environments。
  • 点击右上角的 Add environment 添加节点,并在随后的向导中选择 API。
  • 将 Environment URL 或者 Docker API URL 中的端口从 2375 改为 2376。
  • 然后将 TLS 的 Switch 打开,上传证书文件即可。

贡献者

The avatar of contributor named as wkwbk wkwbk

页面历史