Docker 管理工具 Portainer
Portainer 是一款免费、开源的 Docker 的图形化管理工具,其能够提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm 集群和服务等集中管理和操作、登录用户管理和控制等功能。
# 安装 Docker
# 更新、安装必备软件
apt-get update && apt-get install -y wget vim
# Docker 安装
wget -qO- get.docker.com | bash
# or
curl -sSL get.docker.com | sh
2
3
# 查看 Docker 版本
docker -v
# 开机自动启动
systemctl enable docker
# 卸载 Docker
sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
2
# Docker-compose 安装
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
2
3
# Docker 基本命令
docker ps -a #查看运行的镜像进程
docker stop <CONTAINER ID> #停止该镜像进程
docker start <CONTAINER ID> #启动该镜像进程
docker rm <CONTAINER ID> #卸载镜像
docker images #查看当前 Docker 的镜像 IMAGE ID
docker rmi <IMAGE ID> #删除镜像
2
3
4
5
6
# 修改 Docker 配置
限制日志文件大小,防止 Docker 日志塞满硬盘
cat > /etc/docker/daemon.json <<EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "3"
}
}
EOF
2
3
4
5
6
7
8
9
然后重启 Docker 服务
systemctl restart docker
# 安装 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
2
3
4
5
6
7
8
# 配置 Docker API
- 在需要添加到 Portainer 的服务器中安装 Docker
- 安装完成 Docker 后,修改 vim /usr/lib/systemd/system/docker.service 暴露 docker api 接口
# 命令查看 docker.service 文件所在路径
systemctl status docker.service
# 编辑 docker.service 文件
nano /lib/systemd/system/docker.service
2
3
4
5
修改配置项ExecStart中的值为:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
🚫 直接开启非加密的 Docker API 是个非常危险的行为!
重启 Docker 服务
# 重新加载服务配置文件
systemctl daemon-reload
# 重启 Docker 服务
systemctl restart docker
2
3
4
5
在 Portainer 所在服务器测试是否可连接目标服务器 Docker Api
# 格式 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
2
3
4
5
6
7
8
完成以上内容后即可在 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 (opens new window)
# 获取脚本并赋予执行权限
wget https://img.lisir.me/file/shell/generate_docker_api_pem.sh && chmod +x generate_docker_api_pem.sh
# 执行脚本
./generate_docker_api_pem.sh
2
3
4
5
# 开启 Docker API
编辑 docker 配置文件:
vim /lib/systemd/system/docker.service
找到 ExecStart 行,在后面添加以下选项:
-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:
systemctl daemon-reload && service docker restart
# 配置 Portainer
- 打开 Portainer,进入 Environments。
- 点击右上角的 Add environment 添加节点,并在随后的向导中选择 API。
- 将 Environment URL 或者 Docker API URL 中的端口从 2375 改为 2376。
- 然后将 TLS 的 Switch 打开,上传证书文件即可。