Portainer 由两个元素组成,Portainer Server 和 Portainer Agent。这两个元素都在 Docker 引擎上作为轻量级 Docker 容器运行。本文主要介绍Docker图形化管理工具Portainer CE安装配置。

1、Portainer简介

Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。

文档地址https://documentation.portainer.io/

2、Portainer Agent简介

Portainer Agent 是使用 Docker API 管理 Docker 环境时 Docker API 限制的解决方法。用户与特定资源(容器、网络、卷和图像)的交互仅限于 Docker API 请求所针对的节点上可用的资源。Docker Swarm 模式引入了一个概念,即Docker 节点的集群。它还添加了作为集群感知资源的服务、任务、配置和机密。集群感知意味着您可以查询服务列表或检查集群上任何节点内的任务,只要您在管理器节点上执行 Docker API 请求。容器、网络、卷和镜像是特定于节点的资源,而不是集群感知的。例如,当想要列出集群内某个节点上的所有可用卷时,需要向该特定节点发送查询。

Portainer Agent 的目的是允许以前节点特定的资源是集群感知的。同时保持 Docker API 请求格式。如前所述,这意味着只需要执行一个 Docker API 请求即可从集群内的每个节点检索所有这些资源。总而言之,在管理 Swarm 集群时带来更好的 Docker 用户体验。

3、Portainer CE安装

默认情况下,Portainer将通过端口9000公开UI,并通过端口8000公开TCP隧道服务器。后者是可选的,只有在计划使用Edge代理的Edge计算特性时才需要。

注意:始终将 Portainer Agent匹配到Portainer Server版本。例如,在安装或升级到Portainer 2.6时,确保所有代理也是2.6版本。另外要清楚Portainer CE是运行在Docker中,需要先安装Docker。

Portainer Server安装命令:

docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce

参数说明:

-d #容器在后台运行
-p 9000:9000 # 宿主机9000端口映射容器中的9000端口
-v /var/run/docker.sock:/var/run/docker.sock # 把宿主机的Docker守护进程(docker daemon)默认监听的Unix域套接字挂载到容器中
-v /root/portainer:/data # 把宿主机目录 /root/portainer 挂载到容器 /data 目录;
–name dev-portainer # 指定运行容器的名称;

通过http://<manager01的Host或IP>:9000/就可以访问图形界面,初次访问需要设置管理员密码,如下图,

httpswwwcjavapycom

管理Portainer运行的docker环境,需要选择Local,如管理远端的docker环境,需要选择Remote,如下图,

httpswwwcjavapycom

图形界面管理比较简单,登陆成功后就可以通过图形界面进行管理,如下图,

httpswwwcjavapycom

Portainer Agent安装命令:

docker run -d -p 9001:9001 --name portainer_agent --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker/volumes:/var/lib/docker/volumes portainer/agent

注意:如果不使用docker集群,则不用安装Portainer Agent

4、Portainer CE高级配置

一般通过上面命令安装完成就可以了,如果有特殊需要,则需要使用CLI配置选项。使用CLI选项可以很容易地调优Portainer。

1)管理员密码

Portainer 允许您从命令行为管理员帐户指定 bcrypt 加密密码。需要先生成 bcrypt 加密密码。

如果已经安装了 apache2-utils 包,您可以使用以下命令生成加密密码:

htpasswd -nb -B admin "your-password" | cut -d ":" -f 2

如果系统没有提到的命令,可以运行一个容器来运行命令:

docker run --rm httpd:2.4-alpine htpasswd -nbB admin "your-password" | cut -d ":" -f 2

要从命令行指定管理员密码,请使用以下--admin-password标志启动 Portainer :

docker run -d -p 9000:9000 -p 8000:8000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce --admin-password='$2y$05$8oz75U8m5tI/xT4P0NbSHeE7WyRzOWKRBprfGotwDkhBOGP/u802u'

一个文件里面

还可以将明文密码存储在文件中并使用--admin-password-file选项:

将密码添加到文件中,例如使用以下命令:

echo -n mypassword > /tmp/portainer_password

现在可以通过运行以下命令来启动 Portainer 容器:

docker run -d -p 9000:9000 -p 8000:8000 -v /var/run/docker.sock:/var/run/docker.sock -v /tmp/portainer_password:/tmp/portainer_password portainer/portainer-ce --admin-password-file /tmp/portainer_password

这也适用于 Docker Swarm 和 Docker secrets:

echo -n mypassword | docker secret create portainer-pass -
docker service create \
--name portainer \
--secret portainer-pass \
--publish 9000:9000 \
--publish 8000:8000 \
--replicas=1 \
--constraint 'node.role == manager' \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
portainer/portainer-ce \
--admin-password-file '/run/secrets/portainer-pass' \
-H unix:///var/run/docker.sock

注意:这将使用指定的密码自动创建一个名为 admin 的管理员帐户。

2)隐藏特定容器

Portainer 允许您使用-l标志隐藏带有特定标签的容器。

例如,拿一个以标签 owner=acme 开头的容器(注意这是一个示例标签,可以定义自己的标签):

docker run -d --label owner=acme nginx

要隐藏此容器,只需-l owner=acme在启动 Portainer 时在 CLI 上添加选项:

docker run -d -p 9000:9000 -p 8000:8000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce -l owner=acme

请注意,-l 标志可以重复多次以指定多个标签:

docker run -d -p 9000:9000 -p 8000:8000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce -l owner=acme -l service=secret

3)使用自定义的logo

如果您=想用您自己的logo替换默认logo,则可以使用以下命令指定外部logo(必须正好是 155 像素 x 55 像素)--logo flag:

docker run -d -p 9000:9000 -p 8000:8000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce --logo "https://www.docker.com/sites/all/themes/docker/assets/images/brand-full.svg"

这也可以通过 Portainer 设置菜单中的 GUI 进行更新。

4)使用自定义的模板

Portainer 允许使用应用程序模板快速部署容器。

默认情况下将使用 Portainer 模板,但也可以定义自己的模板。

注意:目前,模板仅在第一次 Portainer 启动时加载一次。如果已经部署了 Portainer 实例并希望在此之后使用自定义的模板,则需要通过用户界面或 HTTP API 清除任何现有模板(默认模板)。

使用该--templates,可以指定可以通过 HTTP 访问模板文件的 URL。

docker run -d -p 9000:9000 -p 8000:8000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce --templates http://my-host.my-domain/templates.json

模板文件必须无需身份验证即可从 Portainer 访问。我们建议在Github上托管模板文件。

5)可用flag

以下 CLI flag可用:

--admin-password: 为 admin 用户指定一个 bcrypt 散列密码

--admin-password-file: 包含管理员用户密码的文件路径

--bind, -p: 服务 Portainer 的地址和端口 (默认: :9000)

--data, -d: Portainer 数据的存储目录(默认:Linux 上的 /data,Windows 上的 C:\data)

--edge-compute:自动启用边缘计算功能

--hide-label, -l:在 UI 中隐藏带有特定标签的容器

--host, -H: Docker 守护进程端点

--logo:要在 UI 中显示为徽标的图像的 URL。如果未指定,则使用 Portainer logo

--snapshot-interval:表示为字符串的两个端点快照作业之间的时间间隔,例如 30s、5m、1h... 由 time.ParseDuration 方法支持(默认值:5m)

--ssl:使用 SSL 的安全 Portainer 实例(默认值:false)

--sslcert:用于保护 Portainer 实例的 SSL 证书的路径(默认:/certs/portiner.crt,Windows 上为 C:\certs\portiner.crt)

--sslkey:用于保护 Portainer 实例的 SSL 密钥的路径(默认:/certs/portainer.key,C:\certs\portainer.key 在 Windows 上)

--templates, -t:模板(应用程序)定义的 URL

--tlscacert:CA 路径(默认:Linux 上的 /certs/ca.pem,Windows 上的 C:\certs\ca.pem)

--tlscert:TLS 证书文件的路径(默认:/certs/cert.pem,Windows 上为 C:\certs\cert.pem)

--tlskey:TLS 密钥的路径(默认:/certs/key.pem,Windows 上为 C:\certs\key.pem)

--tlsverify: TLS 支持 (默认: false)

--tunnel-port:指定与 Edge 代理一起使用的备用tunnel端口。使用 --tunnel-port 8001 和 -p 8001:8001 使 Edge 代理在端口 8001 上通信

推荐文档