私有化轻量级持续集成部署方案--01-环境配置(下)
Portainer
Portainer 概述
Portainer
是一个 Docker
可视化管理工具,为 Docker
提供状态提示面板、快速配置部署、数据卷管理等各种功能,基本上能满足中小型容器管理的需求。
我也感觉 Portainer
使用起来非常方便
Portainer 版本
Portainer
社区版目前具有两个镜像。portainer/portainer
和 portainer/portainer-ce
。
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610695-1098515070.png)
portainer/portainer
portainer/portainer 是 1.X版本(老版本)镜像。官方现在已弃用此镜像。
不过目前网上教程都是以此镜像为准。我刚开始也没注意,结果被坑到了。
此镜像版本对非 SWARM
云连接的 Docker Compose
语法版本只支持到 2.X,并且创建具名Volume
挂载目录时有问题(我就被这个坑到了)。
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610759-1887425294.png)
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
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610681-452642462.png)
- -f:
YAML
文件存放的地址,在此文件上传到了 /yml/docker-compose/ 目录, - -p: 设置当前
Docker Compose
名称 - up: 根据配置文件重新构建服务,启动镜像。如果主机没有此镜像,默认情况会下载镜像(可以配置参数是否允许下载镜像)。当主机中没有此
portainer/portainer-ce
镜像时会进行下载,所有可能有些慢 - -d: 设置为后台运行,与
docker run -d
参数一致
成功运行后,会自动启动容器。
并且在挂载的目下可以看到容器中的的数据
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610690-1385309860.png)
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610765-2073469534.png)
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610750-1167197317.png)
此时就可以使用访问 Portainer
页面。
注意:如果是云主机,需要启动 9000 端口访问策略,否则无法访问。
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610765-1056181738.png)
Portainer
第一次访问会跳转到设置管理员用户页面
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610796-713999128.png)
设置完成之后,如果本地具有 Docker
, 会默认连接到本地 Docker
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610783-1139689576.png)
Portainer 页面
进入主页面后,第一个就是自动连接的本地 Docker
, 点击可以看到 Docker
各种信息
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610716-1643123201.png)
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610799-1911105030.png)
- 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
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610760-1109082425.png)
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 版本新添加的,我也没了解)
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610781-240541567.png)
个人比较喜欢使用 Upload 在本地使用编辑器编写完成之后上传。当然也可以使用其它方式。看使用场景和个人喜好。
Portainer API 连接方式
Portainer
支持多种连接方式。 介绍一种使用 Docker API 连接方式
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610823-208392836.png)
API 连接方式是使用 TCP
协议访问的 Docker API 进行通信,需要设置 Docker API,允许 Docker
被访问
Docker API 需要设置 /lib/systemd/system/docker.service 文件 ExecStart 属性
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610782-1552417920.png)
在此设置只允许内网访问 ,其实只允许本地 IP 访问(模拟远程连接方式)
PS:注意:设置连接主机根据实际情况设置,千万不要设置为 tcp://0.0.0.0:2375,这样极大可能会中病毒,亲测中过挖矿脚本病毒。
设置完成后需要重启 Docker
服务
sudo systemctl daemon-reload
sudo systemctl restart docker
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610729-1149324843.png)
现在 Portainer
就可以使用 API 连接方式
![](https://img2022.cnblogs.com/blog/1147658/202202/1147658-20220210210610801-1767408764.png)