Portainer
Portainer 概述
Portainer
是一个 Docker
可视化管理工具,为 Docker
提供状态提示面板、快速配置部署、数据卷管理等各种功能,基本上能满足中小型容器管理的需求。
我也感觉 Portainer
使用起来非常方便
Portainer 版本
Portainer
社区版目前具有两个镜像。portainer/portainer
和 portainer/portainer-ce
。
portainer/portainer
portainer/portainer 是 1.X版本(老版本)镜像。官方现在已弃用此镜像。
不过目前网上教程都是以此镜像为准。我刚开始也没注意,结果被坑到了。
此镜像版本对非 SWARM
云连接的 Docker Compose
语法版本只支持到 2.X,并且创建具名Volume
挂载目录时有问题(我就被这个坑到了)。
portainer/portainer-ce
portainer/portainer-ce 是 2.X 版本的新镜像。
完全支持 Docker Compose
3.X 语法版本。
Portainer 部署
在此 Portainer
通过 Docker Compose
进行部署。Docker Compose
可观性较强,并且配置文件可以保存 以后的所有部署方案都采用这种形式。
version: '3.9'
services:
portainer:
image: portainer/portainer-ce
container_name: portainer
restart: always
ports:
- 9000:9000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /volumes/portainer:/data
以上是部署 Portainer
的 YAML
格式配置文件
- version:
YMAL
格式版本,当前版本具有 1、 2 、 2.X、 3.X,每个版本的语法都略有差异,不过差异并不大,一般语法没什么区别。 不过不同版本语法对Docker
版本有一定要求,详细可以参考:https://docs.docker.com/compose/compose-file/compose-file-v3/ - services:
容器组
配置,依照YAML
格式可配置多个容器,当前只有一个portainer
配置。services
之间可以配置 network,依赖顺序等。- portainer:这是
服务(Service)
名称,代表一个容器(Container)
。- image:容器所使用的镜像
- container_name:容器名称
- restart:容器重启策略。就是
docker run
时设置 restart - ports:映射端口号,第一个端口号是宿主机端口号,可以设置任意一个未被使用的端口号;第二个端口号是容器中所提供的端口号,容器既然理解为一个单独的系统环境,那么就需要提供一些端口号供外部访问。
Portainer
提供了端口号为 9000 - volumes:数据卷挂载,容器作为单独的系统环境,往往需要指定宿主目录对容器内目录挂载。例如数据库应用,如果不挂载宿主目录,容器删除数据款中数据就没了。
或者挂载容器的配置文件,这样就不需要每次都进入容器内部更新配置。
第一个可以是一个volume
名称 或者 宿主目录 ,当直接为宿主目录 时,容器启动时会使用 宿主目录 覆盖 容器内目录 这个之后会介绍;
第二个是容器内目录(Portainer
数据存储在容器内 /data 目录)。
- portainer:这是
PS: 注意:
Volume
挂载目录和文件时,有两种情况。目录:宿主机中可以不存在此目录,Docker
在启动容器时会自动创建目录。 文件:当挂载路径为文件时,宿主机中必须存在此文件
配置属性中还可以设置好多参数,例如:environment
,之后会使用使用,不再介绍。
/var/run/docker.sock
是一个特殊的文件,有些容器需要提供此文件。
文件编写完成后上传服务器执行
docker-compose -f /yml/docker-compose/portainer.yml -p portainer up -d
- -f:
YAML
文件存放的地址,在此文件上传到了 /yml/docker-compose/ 目录, - -p: 设置当前
Docker Compose
名称 - up: 根据配置文件重新构建服务,启动镜像。如果主机没有此镜像,默认情况会下载镜像(可以配置参数是否允许下载镜像)。当主机中没有此
portainer/portainer-ce
镜像时会进行下载,所有可能有些慢 - -d: 设置为后台运行,与
docker run -d
参数一致
成功运行后,会自动启动容器。
并且在挂载的目下可以看到容器中的的数据
此时就可以使用访问 Portainer
页面。
注意:如果是云主机,需要启动 9000 端口访问策略,否则无法访问。
Portainer
第一次访问会跳转到设置管理员用户页面
设置完成之后,如果本地具有 Docker
, 会默认连接到本地 Docker
Portainer 页面
进入主页面后,第一个就是自动连接的本地 Docker
, 点击可以看到 Docker
各种信息
- Stack:
Docker Compose
管理,对当前Docker Compose
进行管理,并且可以直接上传 YAML 文件进行构建容器。目前只有一个Stack
:portainer - Container:
Docker
容器管理,可以对所有容器进行管理设置。目前也只有一个容器
:portainer - Image:
Docker
镜像管理,对当前Docker
所有镜像进行管理,目前也只有一个镜像
:portainer/portainer - Volumes:
Docker
数据卷管理, - Networks:
Docker
network 管理,目前只有默认的 4 个Network
Stack 模块
Stack 是用来管理 Docker Compose
,目前只有一个,也就是部署的 Portainer
Limited
未使用 Portainer
可视化工具部署的 Docker Compose
, 在 Portainer
可视化工具内部是不允许操作的。
例如 Portainer, 在 Portainer
可视化工具中 Control 属性显示为 Limited, 意思就是不允许操作这个 stack
。
Add Stack
点击 Add Stack 按钮就可以进行添加 Docker Compose
, Portainer
支持四种方式添加;
- Web editor(直接在当前页编写配置)
- Upload(提供本地上传 xxx.yml 文件)
- Repository(提供一个配置文件的 URL 地址)
- Custom template 自定义模板 (2.X 版本新添加的,我也没了解)
个人比较喜欢使用 Upload 在本地使用编辑器编写完成之后上传。当然也可以使用其它方式。看使用场景和个人喜好。
Portainer API 连接方式
Portainer
支持多种连接方式。 介绍一种使用 Docker API 连接方式
API 连接方式是使用 TCP
协议访问的 Docker API 进行通信,需要设置 Docker API,允许 Docker
被访问
Docker API 需要设置 /lib/systemd/system/docker.service 文件 ExecStart 属性
在此设置只允许内网访问 ,其实只允许本地 IP 访问(模拟远程连接方式)
PS:注意:设置连接主机根据实际情况设置,千万不要设置为 tcp://0.0.0.0:2375,这样极大可能会中病毒,亲测中过挖矿脚本病毒。
设置完成后需要重启 Docker
服务
sudo systemctl daemon-reload
sudo systemctl restart docker
现在 Portainer
就可以使用 API 连接方式