Portainer
是一个 Docker
可视化管理工具,为 Docker
提供状态提示面板、快速配置部署、数据卷管理等各种功能,基本上能满足中小型容器管理的需求。
我也感觉 Portainer
使用起来非常方便
Portainer
社区版目前具有两个镜像。portainer/portainer
和 portainer/portainer-ce
。
portainer/portainer 是 1.X版本(老版本)镜像。官方现在已弃用此镜像。
不过目前网上教程都是以此镜像为准。我刚开始也没注意,结果被坑到了。
此镜像版本对非 SWARM
云连接的 Docker Compose
语法版本只支持到 2.X,并且创建具名Volume
挂载目录时有问题(我就被这个坑到了)。
portainer/portainer-ce 是 2.X 版本的新镜像。
完全支持 Docker Compose
3.X 语法版本。
在此 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
进入主页面后,第一个就是自动连接的本地 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 是用来管理 Docker Compose
,目前只有一个,也就是部署的 Portainer
未使用 Portainer
可视化工具部署的 Docker Compose
, 在 Portainer
可视化工具内部是不允许操作的。
例如 Portainer, 在 Portainer
可视化工具中 Control 属性显示为 Limited, 意思就是不允许操作这个 stack
。
点击 Add Stack 按钮就可以进行添加 Docker Compose
, Portainer
支持四种方式添加;
- Web editor(直接在当前页编写配置)
- Upload(提供本地上传 xxx.yml 文件)
- Repository(提供一个配置文件的 URL 地址)
- Custom template 自定义模板 (2.X 版本新添加的,我也没了解)
个人比较喜欢使用 Upload 在本地使用编辑器编写完成之后上传。当然也可以使用其它方式。看使用场景和个人喜好。
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 连接方式