部署
Portainer可以在Docker上运行,而且部署起来非常简单。
除非指定,否则可以在任何平台上执行Portainer部署方案。
部署Portainer非常简单:
$ docker volume create portainer_data
$ docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
Voilà,您现在可以通过访问运行Portainer的服务器上的端口9000来使用Portainer。
使用我们的代理设置在Swarm集群中部署Portainer。
注意:此设置将假定您在Swarm管理器节点上执行以下指令。
$ curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml
$ docker stack deploy --compose-file=portainer-agent-stack.yml portainer
查看代理部分以查找有关如何将现有Portainer实例连接到手动部署的Portainer代理的更多详细信息。
默认情况下,Portainer将其数据存储/data
在Linux(C:\\data
Windows)文件夹中的容器中。
在重新启动/升级Portainer容器后,您需要保留Portainer数据以保留更改。您可以使用绑定装载来保存Docker主机文件夹上的数据:
$ docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /path/on/host/data:/data portainer/portainer
Docker for Windows 10支持同时运行Linux和Windows容器,您需要使用不同的启动命令,具体取决于您使用的是哪一个。Windows Server仅支持本机Windows容器。
Linux容器的示例:
$ docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v C:\ProgramData\Portainer:/data portainer/portainer
本机Windows容器的示例:
$ docker run -d -p 9000:9000 --name portainer --restart always -v \\.\pipe\docker_engine:\\.\pipe\docker_engine -v C:\ProgramData\Portainer:C:\data portainer/portainer
如果您将Portainer部署为Docker Swarm服务:
$ docker service create \
--name portainer \
--publish 9000:9000 \
--replicas=1 \
--constraint 'node.role == manager' \
--mount type=bind,src=//path/on/host/data,dst=/data \
portainer/portainer
注意:Swarm服务示例将为集群中/path/on/host/data
的每个主机保留Portainer数据。如果在另一个节点上重新调度容器,则现有的Portainer数据可能不可用。在Swarm集群的所有节点上保留数据超出了本文档的范围。
高级Portainer部署方案。
您可以指定Portainer通过CLI管理的初始环境,使用-H
标志和tcp://
协议连接到远程Docker环境:
$ docker run -d -p 9000:9000 --name portainer --restart always -v portainer_data:/data portainer/portainer -H tcp://:
确保您更换REMOTE_HOST
,并REMOTE_PORT
与您要管理的服务器泊坞窗的地址/端口。
您还可以绑定mount Docker套接字以管理本地Docker环境(仅适用于Unix套接字可用的环境):
$ docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer -H unix:///var/run/docker.sock
如果您的Docker环境使用TLS进行保护,则需要确保您可以访问CA,证书和用于访问Docker引擎的公钥。
您可以通过Portainer UI上传所需文件或使用--tlsverify
CLI上的标志。
Portainer将尝试使用以下指定的文件路径(在Linux上,有关Windows的详细信息,请参阅配置部分):
/certs/ca.pem
/certs/cert.pem
/certs/key.pem
您必须使用绑定装置确保容器中存在这些文件:
$ docker run -d -p 9000:9000 --name portainer --restart always -v /path/to/certs:/certs -v portainer_data:/data portainer/portainer -H tcp://: --tlsverify
你也可以使用--tlscacert
,--tlscert
而--tlskey
如果你想分别更改默认路径CA,证书和密钥文件的标志:
$ docker run -d -p 9000:9000 --name portainer -v /path/to/certs:/certs portainer/portainer -H tcp://: --tlsverify --tlscacert /certs/myCa.pem --tlscert /certs/myCert.pem --tlskey /certs/myKey.pem
$ docker run -d -p 9000:9000 --name portainer --restart always -v /path/to/certs:/certs -v portainer_data:/data portainer/portainer -H tcp://: --tlsverify --tlscacert /certs/myCa.pem --tlscert /certs/myCert.pem --tlskey /certs/myKey.pem
默认情况下,Portainer的Web界面和API通过HTTP公开。这不安全,建议在生产环境中启用SSL。
为此,您可以使用以下标志--ssl
,--sslcert
并且--sslkey
:
$ docker run -d -p 443:9000 --name portainer --restart always -v ~/local-certs:/certs -v portainer_data:/data portainer/portainer --ssl --sslcert /certs/portainer.crt --sslkey /certs/portainer.key
您可以使用以下命令生成所需的文件:
$ openssl genrsa -out portainer.key 2048
$ openssl ecparam -genkey -name secp384r1 -out portainer.key
$ openssl req -new -x509 -sha256 -key portainer.key -out portainer.crt -days 3650
请注意,也可以使用Certbot生成证书和密钥。但是,由于Docker存在符号链接问题,因此如果使用Certbot,则需要将“实时”和“存档”目录作为卷传递(如下所示)。
docker run -d -p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /root/portainer/data:/data \
-v /etc/letsencrypt/live/<redacted>:/certs/live/<redacted>:ro \
-v /etc/letsencrypt/archive/<redacted>:/certs/archive/<redacted>:ro \
--name portainer \
portainer/portainer:1.13.4 --ssl --sslcert /certs/live/<redacted>/cert.pem --sslkey /certs/live/<redacted>/privkey.pem
您可以使用docker -compose来部署Portainer。
这是一个示例撰写文件:
version: '2'
services:
portainer:
image: portainer/portainer
command: -H unix:///var/run/docker.sock
restart: always
ports:
- 9000:9000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
volumes:
portainer_data:
每个版本页面都提供了Portainer二进制文件:Portainer版本
下载并将二进制文件解压缩到磁盘上的某个位置:
$ cd /opt
$ wget https://github.com/portainer/portainer/releases/download/1.21.0/portainer-1.21.0-linux-amd64.tar.gz
$ tar xvpfz portainer-1.21.0-linux-amd64.tar.gz
然后只使用portainer二进制文件,就像在Docker中使用CLI标志一样。
注意:默认情况下,Portainer会尝试将其数据写入/ data文件夹。您必须首先确保此文件夹存在(或通过更改其将使用的路径--data
,请参阅下文)。
$ mkdir /data
$ cd /opt/portainer
$ ./portainer --template-file "${PWD}/templates.json"
您可以使用该-p
标志在另一个端口上为Portainer提供服务:
$ ./portainer -p :8080
您可以更改Portainer使用的文件夹以使用--data
标志存储其数据:
$ ./portainer --data /opt/portainer-data
可以使用CLI标志轻松调整Portainer。
From the command line
Portainer允许您从管理员帐户的命令行指定bcrypt加密密码。您需要先生成bcrypt加密密码。
您可以使用以下命令生成加密密码:
$ htpasswd -nb -B admin | cut -d ":" -f 2
或者如果您的系统没有提供htpasswd,您可以使用带有以下命令的docker容器:
$ docker run --rm httpd:2.4-alpine htpasswd -nbB admin | cut -d ":" -f 2
要从命令行指定管理员密码,请使用以下--admin-password
标志启动Portainer :
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer --admin-password='$2y$05$qFHAlNAH0A.6oCDe1/4W.ueCWC/iTfBMXIHBI97QYfMWlMCJ7N.a6'
Inside a file
您还可以将明文密码存储在文件中并使用--admin-password-file
标志:
# mypassword is plaintext here
$ echo -n mypassword > /tmp/portainer_password
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /tmp/portainer_password:/tmp/portainer_password portainer/portainer --admin-password-file /tmp/portainer_password
这也适用于Swarm和Docker的秘密:
# mypassword is plaintext here
$ echo -n mypassword | docker secret create portainer-pass -
$ docker service create \
--name portainer \
--secret portainer-pass \
--publish 9000:9000 \
--replicas=1 \
--constraint 'node.role == manager' \
--mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
portainer/portainer \
--admin-password-file '/run/secrets/portainer-pass' \
-H unix:///var/run/docker.sock
注意:这将自动创建一个名为admin的管理员帐户,并使用指定的密码。
Portainer允许您使用-l
标志隐藏具有特定标签的容器。
例如,以标签owner = acme开头的容器(注意这是一个示例标签,您可以定义自己的标签):
$ docker run -d --label owner=acme nginx
要隐藏此容器,只需在启动Portainer时在CLI上添加该选项:-l owner=acme
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer -l owner=acme
请注意,该-l
标志可以重复多次以指定多个标签:
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer -l owner=acme -l service=secret
你不喜欢我们的标志?想让Portainer更加公司化吗?不用担心,您可以使用标志轻松切换外部徽标(它必须正好是155px乘55px)--logo
:
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer --logo "https://www.docker.com/sites/all/themes/docker/assets/images/brand-full.svg"
Portainer允许您使用App Templates快速部署容器。
默认情况下,将使用Portainer模板,但您也可以定义自己的模板。
注意:目前,模板仅在Portainer初次启动时加载一次。如果您已经部署了Portainer实例并希望在此之后使用自己的模板,则需要通过HTTP API清除任何现有模板(默认模板)。
有两种方法可以指定自己的模板:
使用-template-file标志,您可以在文件系统上指定自己的模板文件的路径。默认情况下,它指向Linux和Windows主机上的/templates.json。
例如,您可以在容器中安装自己的模板文件:
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/my/templates.json:/templates.json portainer/portainer
或者使用-template-file指定模板文件的特定路径:
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /path/to/template/folder:/templates portainer/portainer --template-file /templates/templates.json
使用-templates标志,您可以指定可通过HTTP访问模板文件的URL。
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer --templates http://my-host.my-domain/templates.json
有关托管您自己的模板定义的更多信息,请参阅模板
Portainer为您提供了从JSON文件定义UI中可用的所有端点的选项。
您只需要使用--external-endpoints
标志启动Portainer 并指定容器中JSON文件的路径。
注意:使用外部端点管理时,将在UI中禁用端点管理。
$ docker run -d -p 9000:9000 -v /tmp/endpoints:/endpoints portainer/portainer --external-endpoints /endpoints/endpoints.json
有关端点定义格式的详细信息,请参阅外部端点
以下CLI标志可用:
--admin-password
:为admin用户指定bcrypt哈希密码--admin-password-file
:包含admin用户密码的文件的路径--bind
,-p
:地址和端口提供Portainer(默认值::9000
)--data
,-d
:存储Portainer数据的目录(默认:/data
在Linux上,C:\data
在Windows上)--external-endpoints
:通过指定文件中JSON端点源的路径来启用外部端点管理--hide-label
,-l
:隐藏UI中具有特定标签的容器--host
,-H
:Docker守护程序端点--logo
:要在UI中显示为徽标的图片的URL,如果未指定,请使用Portainer徽标--no-analytics
:禁用分析(默认值:false
)--no-snapshot
:禁用定期端点的快照(默认值:false
)--snapshot-interval
:两个端点快照作业之间的时间间隔表示为一个字符串,例如30s
,5m
,1h
...利用所支持的time.ParseDuration方法(默认:5m
)--ssl
:使用SSL安全Portainer实例(默认值:false
)--sslcert
:用于保护Portainer实例的SSL证书的路径(默认值:/certs/portainer.crt
,C:\certs\portainer.crt
在Windows上)--sslkey
:用于保护Portainer实例的SSL密钥的路径(默认值:/certs/portainer.key
,C:\certs\portainer.key
在Windows上)--sync-interval
:两个端点的同步请求之间的时间间隔表示为一个字符串,例如30s
,5m
,1h
...利用所支持的time.ParseDuration方法(默认:60s
)--templates
,-t
:模板(apps)定义的URL--template-file
:路径在磁盘上的模板(应用程序)的定义(默认值:/templates.json
)--tlscacert
:CA的路径(默认:/certs/ca.pem
在Linux上,C:\certs\ca.pem
在Windows上)--tlscert
:TLS证书文件的路径(默认值:/certs/cert.pem
,C:\certs\cert.pem
在Windows上)--tlskey
:TLS键的路径(默认值:/certs/key.pem
,C:\certs\key.pem
在Windows上)--tlsverify
:支持TLS(默认false
)Portainer公开了一个HTTP API,您可以使用它来自动化您通过Portainer UI执行的所有操作。
可以在Swaggerhub上找到API文档,您也可以在这里找到一些示例。
使用Docker API管理Docker环境时,Portainer Agent是Docker API限制的解决方法。用户与特定资源(容器,网络,卷和映像)的交互仅限于Docker API请求所针对的节点上可用的交互。
Docker Swarm模式引入了一个概念,即Docker节点的集群。它还添加了群集感知资源的服务,任务,配置和机密。群集感知意味着只要您在管理器节点上执行Docker API请求,就可以查询服务列表或检查群集上任何节点内的任务。
容器,网络,卷和映像是节点特定的资源,而不是群集感知的。例如,当您希望列出群集内某个节点上的所有可用卷时,您需要向该特定节点发送查询。
代理的目的是允许先前节点特定的资源具有群集感知。同时保持Docker API请求格式。如前所述,这意味着您只需执行一个Docker API请求即可从群集内的每个节点检索所有这些资源。总之,在管理Swarm集群时,可以带来更好的Docker用户体验。
有关如何部署代理以及如何将其连接到Portainer的说明。
查看一下Swarm集群内的部署文档,以便在Swarm集群中快速部署代理和Portainer实例。docker stack deploy
总的来说,设置包括以下步骤:
注意:此设置假定您正在Swarm管理器节点上执行以下指示信息。
步骤1,在Swarm集群中创建一个新的覆盖网络:
$ docker network create --driver overlay --attachable portainer_agent_network
步骤2,将代理部署为集群中的全局服务:
$ docker service create \
--name portainer_agent \
--network portainer_agent_network \
-e AGENT_CLUSTER_ADDR=tasks.portainer_agent \
--mode global \
--constraint 'node.platform.os == linux' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \
portainer/agent
步骤3,将Portainer实例部署为服务:
$ docker service create \
--name portainer \
--network portainer_agent_network \
--publish 9000:9000 \
--replicas=1 \
--constraint 'node.role == manager' \
portainer/portainer -H "tcp://tasks.portainer_agent:9001" --tlsskipverify
步骤4,为所有Windows Server节点部署代理
由于Docker限制,您需要通过在每个节点上运行以下命令将代理部署到所有Windows Server节点。
$ docker run -d --name portainer_agent --restart always --network portainer_agent_network -e AGENT_CLUSTER_ADDR=tasks.portainer_agent --mount type=npipe,source=\\.\pipe\docker_engine,target=\\.\pipe\docker_engine portainer/agent:windows1803-amd64
注意:如果您使用的是Windows Server 1803,则可能需要打开DNS端口以支持tasks.portainer_agent的DNS解析。请参阅:https://success.docker.com/article/swarm-internal-dns-is-inaccessible-on-windows-server-1803
如果要将现有Portainer实例连接到代理,可以在创建新端点时选择代理环境类型。
确保在部署代理时,在Swarm群集中公开代理的端口,并将模式设置为host (默认端口为9001):
$ docker service create \
--name portainer_agent \
--network portainer_agent_network \
--publish mode=host,target=9001,published=9001 \
-e AGENT_CLUSTER_ADDR=tasks.portainer_agent \
--mode global \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \
portainer/agent
然后,您可以在代理URL字段中使用群集中任何节点的地址(使用代理端口)。
或者,您可以使用以下堆栈部署代理:
version: '3.2'
services:
agent:
image: portainer/agent
environment:
AGENT_CLUSTER_ADDR: tasks.agent
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
ports:
- target: 9001
published: 9001
protocol: tcp
mode: host
networks:
- portainer_agent
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]
networks:
portainer_agent:
driver: overlay
attachable: true
您可以使用变体代理配置来实现不同的设置或启用特定功能。
默认情况下,代理将注册连接到它的第一个Portainer实例,并在此之后阻止来自任何其他实例的连接。
要绕过此安全机制,可以在部署时配置Portainer和代理以使用共享密钥。此配置允许多个Portainer实例连接到同一代理端点。
的AGENT_SECRET
环境变量可以用于定义共享秘密。
将代理部署为服务时:
$ docker service create \
--name portainer_agent \
--network portainer_agent_network \
--publish mode=host,target=9001,published=9001 \
-e AGENT_CLUSTER_ADDR=tasks.portainer_agent \
-e AGENT_SECRET=mysecrettoken \
--mode global \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \
portainer/agent
通过堆栈文件:
version: '3.2'
services:
agent:
image: portainer/agent
environment:
AGENT_CLUSTER_ADDR: tasks.agent
AGENT_SECRET: mysecrettoken
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
ports:
- target: 9001
published: 9001
protocol: tcp
mode: host
networks:
- portainer_agent
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]
networks:
portainer_agent:
driver: overlay
attachable: true
在AGENT_SECRET
部署Portainer时也必须指定:
$ docker run -d -p 9000:9000 --name portainer --restart always -e AGENT_SECRET=mysecrettoken -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
出于安全原因,默认情况下禁用以下功能:
要启用这些功能,必须通过以下方式正确配置代理:
CAP_HOST_MANAGEMENT
环境变量启用主机管理功能/host
)通过堆栈文件部署代理程序时的示例:
version: '3.2'
services:
agent:
image: portainer/agent
environment:
AGENT_CLUSTER_ADDR: tasks.agent
CAP_HOST_MANAGEMENT: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
- /:/host
ports:
- target: 9001
published: 9001
protocol: tcp
mode: host
networks:
- portainer_agent
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]
networks:
portainer_agent:
driver: overlay
attachable: true
您可以使用环境变量更改代理的配置。
可以调整以下环境变量:
9001
)INFO
)tasks.
在Swarm集群内部署代理时将此值设置为。1
如果要使用Portainer API查询在Swarm集群内的特定节点上运行的容器,并且在使用Portainer代理设置时,可以X-PortainerAgent-Target
在HTTP请求中指定标头以定位集群中的特定节点。必须将该值设置为NodeName
在查询群集资源(容器,卷...)时可通过属性检索的特定节点的名称。
外部端点定义是用JSON编写的。
它必须由一个数组组成,每个端点定义由一个元素组成。
[
{
"Name": "my-first-endpoint",
"URL": "tcp://myendpoint.mydomain:2375"
},
{
"Name": "my-second-endpoint",
"URL": "tcp://mysecondendpoint.mydomain:2375",
"TLS": true,
"TLSSkipVerify": true,
"TLSCACert": "/tmp/ca.pem",
"TLSCert": "/tmp/cert.pem",
"TLSKey": "/tmp/key.pem"
}
]
endpoint元素必须是有效的JSON对象。
例:
{
"Name": "my-secure-endpoint",
"URL": "tcp://myendpoint.mydomain:2375",
"TLS": true,
"TLSCACert": "/tmp/ca.pem",
"TLSCert": "/tmp/cert.pem",
"TLSKey": "/tmp/key.pem"
}
它由多个字段组成,一些是强制的,一些是可选的。
Name
端点的名称。用于在同步请求期间检查数据库中是否已存在端点。它也将显示在UI中。
该字段是必填字段。
URL
如何到达端点。
必须仅指定协议,tcp://
并且此时unix://
支持协议。将跳过不使用这两个协议之一的任何定义。
该字段是必填字段。
TLS
如果需要使用TLS连接到端点,请将此字段指定为true。默认为false
。将true值应用于此字段时,Portainer将期望定义TLSCACertPath,TLSCertPath和TLSKeyPath字段。
该字段是可选的。
TLSSkipVerify
如果要跳过服务器验证,请将此字段指定为true。默认为false
。
该字段是可选的。
TLSCACert
用于连接到端点的CA的路径。
该字段是可选的。
TLSCert
用于连接到端点的证书的路径。
该字段是可选的。
TLSKey
用于连接到端点的密钥的路径。
该字段是可选的。
使用该--external-endpoints
标志时,Portainer将在启动时读取指定的JSON文件并自动创建端点。
然后,Portainer将根据--sync-interval
(60s
默认情况下)中定义的时间间隔读取文件,并自动执行以下操作:
使用外部端点管理时,将禁用通过UI的端点管理以避免任何可能的配置覆盖(端点视图仍可访问,但仅显示端点列表,而不提供创建/更新端点的可能性)。端点视图中将显示一条简单的警告消息。
模板定义是用JSON编写的。
它必须由一个数组组成,每个模板定义由一个元素组成。
模板元素必须是有效的JSON对象。
容器模板的示例:
{
"type": 1,
"title": "Nginx",
"description": "High performance web server",
"logo": "https://cloudinovasi.id/assets/img/logos/nginx.png",
"image": "nginx:latest",
"ports": [
"8080:80/tcp",
"443/tcp"
]
}
它由多个字段组成,一些是强制的,一些是可选的。
type
模板类型,有效值为:1(容器),2(Swarm堆栈)或3(Compose堆栈)。
该字段是必填字段。
title
模板的标题。
该字段是必填字段。
description
模板的描述。
该字段是必填字段。
image
与模板关联的Docker镜像。必须包含图片标记。
该字段是必填字段。
administrator_only
模板是否仅供管理员用户使用。
该字段是可选的。
例:
{
"administrator_only": true
}
name
用户界面中此模板的默认名称。
该字段是可选的。
logo
模板徽标的URL。
该字段是可选的。
registry
存储Docker镜像的注册表。如果未指定,Portainer将使用Dockerhub作为默认注册表。
该字段是可选的。
command
要在容器中运行的命令。如果未指定,容器将使用其Dockerfile中指定的默认命令。
该字段是可选的。
例:
{
"command": "/bin/bash -c \"echo hello\" && exit 777"
}
env
描述模板所需的环境变量的JSON数组。数组中的每个元素都必须是有效的JSON对象。
将在模板视图中为数组中的每个元素生成一个输入。根据对象属性,可以生成不同类型的输入(文本输入,选择)。
该字段是可选的。
元素格式:
{
"name": "the name of the environment variable, as supported in the container image (mandatory)",
"label": "label for the input in the UI (mandatory unless set is present)",
"description": "a short description for this input, will be available as a tooltip in the UI (optional)",
"default": "default value associated to the variable (optional)",
"preset": "boolean. If set to true, the UI will not generate an input (optional)",
"select": "an array of possible values, will generate a select input (optional)"
}
例:
{
"env": [
{
"name": "MYSQL_ROOT_PASSWORD",
"label": "Root password",
"description": "Password used by the root user."
},
{
"name": "ENV_VAR_WITH_DEFAULT_VALUE",
"default": "default_value",
"preset": true
},
{
"name": "ENV_VAR_WITH_SELECT_VALUE",
"label": "An environment variable",
"description": "A description for this env var",
"select": [
{
"text": "Yes, I agree",
"value": "Y",
"default": true
},
{
"text": "No, I disagree",
"value": "N"
},
{
"text": "Maybe",
"value": "YN"
}
],
"description": "Some environment variable."
}
]
}
network
与现有Docker网络名称对应的字符串。
将在模板视图中自动选择网络(如果存在)。
该字段是可选的。
例:
{
"network": "host"
}
volumes
描述模板关联卷的JSON数组。数组中的每个元素都必须是具有必需容器属性的有效JSON对象。
对于数组中的每个元素,将在启动容器时创建并关联Docker卷。如果定义了绑定属性,则它将用作绑定装入的源。如果定义了readonly属性且为true,则卷将以只读模式挂载。
该字段是可选的。
例:
{
"volumes": [
{
"container": "/etc/nginx"
},
{
"container": "/usr/share/nginx/html",
"bind": "/var/www",
"readonly": true
}
]
}
ports
描述模板公开的端口的JSON数组。数组中的每个元素都必须是有效的JSON字符串,用于指定容器和协议中的端口号。
它可以选择以必须在port:
窗体中映射到主机上的端口为前缀。
如果未指定主机端口,则Docker主机将在启动容器时自动分配一个端口。
该字段是可选的。
例:
{
"ports": ["8080:80/tcp", "443/tcp"]
}
labels
描述与模板关联的标签的JSON数组。数组中的每个元素都必须具有两个属性的有效的JSON对象name
和value
。
该字段是可选的。
例:
{
"labels": [
{ "name": "com.example.vendor", "value": "Acme" },
{ "name": "com.example.license", "value": "GPL" },
{ "name": "com.example.version", "value": "1.0" }
]
}
privileged
容器是否应以特权模式启动。如果未指定,布尔值将默认为false。
该字段是可选的。
{
"privileged": true
}
interactive
容器应该在前台启动(相当于标志)。如果未指定,布尔值将默认为false。-i -t
该字段是可选的。
{
"interactive": true
}
restart_policy
重新启动与容器关联的策略。值必须是以下之一:
该字段是可选的。always
如果未指定,将默认为。
{
"restart_policy": "unless-stopped"
}
hostname
设置容器的主机名。
该字段是可选的。如果未指定,将使用Docker默认值。
{
"hostname": "mycontainername"
}
note
有关模板的用法/额外信息。这将显示在Portainer UI中的模板创建表单中。
支持HTML。
该字段是可选的。
{
"note": "You can use this field to specify extra information.
It supports HTML."
}
platform
支持的平台。该字段值必须设置为linux或windows。这将在Portainer UI中显示一个与平台相关的小图标。
该字段是可选的。
{
"platform": "linux"
}
categories
将与模板关联的一组类别。将根据所有可用类别填充Portainer UI类别过滤器。
该字段是可选的。
{
"categories": ["webserver", "open-source"]
}
模板元素必须是有效的JSON对象。
堆栈模板示例:
{
"type": 2,
"title": "CockroachDB",
"description": "CockroachDB cluster",
"note": "Deploys an insecure CockroachDB cluster, please refer to CockroachDB documentation for production deployments.",
"categories": ["database"],
"platform": "linux",
"logo": "https://cloudinovasi.id/assets/img/logos/cockroachdb.png",
"repository": {
"url": "https://github.com/portainer/templates",
"stackfile": "stacks/cockroachdb/docker-stack.yml"
}
}
它由多个字段组成,一些是强制的,一些是可选的。
type
模板类型,有效值为:1(容器),2(Swarm堆栈)或3(Compose堆栈)。
Swarm堆栈将使用等效的部署,而Compose堆栈将使用等效的部署。docker stack deploy
docker-compose
该字段是必填字段。
title
模板的标题。
该字段是必填字段。
description
模板的描述。
该字段是必填字段。
repository
一个JSON对象,描述将从中加载堆栈模板的公共git存储库。它指示git存储库的URL以及存储库中Compose文件的路径。
元素格式:
{
"url": "URL of the public git repository (mandatory)",
"stackfile": "Path to the Compose file inside the repository (mandatory)",
}
例:
{
"url": "https://github.com/portainer/templates",
"stackfile": "stacks/cockroachdb/docker-stack.yml"
}
该字段是必填字段。
administrator_only
模板是否仅供管理员用户使用。
该字段是可选的。
例:
{
"administrator_only": true
}
name
用户界面中此模板的默认名称。
该字段是可选的。
logo
模板徽标的URL。
该字段是可选的。
env
描述模板所需的环境变量的JSON数组。数组中的每个元素都必须是有效的JSON对象。
将在模板视图中为数组中的每个元素生成一个输入。根据对象属性,可以生成不同类型的输入(文本输入,选择)。
该字段是可选的。
元素格式:
{
"name": "the name of the environment variable, as supported in the container image (mandatory)",
"label": "label for the input in the UI (mandatory unless set is present)",
"description": "a short description for this input, will be available as a tooltip in the UI (optional)",
"default": "default value associated to the variable (optional)",
"preset": "boolean. If set to true, the UI will not generate an input (optional)",
"select": "an array of possible values, will generate a select input (optional)"
}
例:
{
"env": [
{
"name": "MYSQL_ROOT_PASSWORD",
"label": "Root password",
"description": "Password used by the root user."
},
{
"name": "ENV_VAR_WITH_DEFAULT_VALUE",
"default": "default_value",
"preset": true
},
{
"name": "ENV_VAR_WITH_SELECT_VALUE",
"label": "An environment variable",
"description": "A description for this env var",
"select": [
{
"text": "Yes, I agree",
"value": "Y",
"default": true
},
{
"text": "No, I disagree",
"value": "N"
},
{
"text": "Maybe",
"value": "YN"
}
],
"description": "Some environment variable."
}
]
}
note
有关模板的用法/额外信息。这将显示在Portainer UI中的模板创建表单中。
支持HTML。
该字段是可选的。
{
"note": "You can use this field to specify extra information.
It supports HTML."
}
platform
支持的平台。该字段值必须设置为linux或windows。这将在Portainer UI中显示一个与平台相关的小图标。
该字段是可选的。
{
"platform": "linux"
}
categories
将与模板关联的一组类别。将根据所有可用类别填充Portainer UI类别过滤器。
该字段是可选的。
{
"categories": ["webserver", "open-source"]
}
使用您自己的模板的最简单方法是将您自己的模板文件直接绑定到Portainer容器中,请参阅配置。
您还可以构建自己的容器,使用Nginx来提供模板定义。
克隆Portainer模板存储库,编辑模板文件,构建并运行容器:
$ git clone https://github.com/portainer/templates.git portainer-templates
$ cd portainer-templates
# Edit the file templates.json
$ docker build -t portainer-templates .
$ docker run -d -p "8080:80" portainer-templates
现在,您可以访问模板定义http://docker-host:8080/templates.json
。
您也可以将templates.json
文件挂载到容器中,以便编辑文件并查看实时更改:
$ docker run -d -p "8080:80" -v "${PWD}/templates.json:/usr/share/nginx/html/templates.json" portainer-templates
如果要在启用SELinux的情况下管理本地Docker环境,则--privileged
在部署Portainer时需要将标志传递给Docker run命令:
$ docker run -d --privileged -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
你也可以看一下这个助手:https://github.com/dpw/selinux-dockersock。
要管理远程Docker环境,Portainer必须能够通过网络与Docker API进行通信(通常使用TLS上的TCP 2375,2376)。
您必须根据您的网络环境考虑安全问题。
请参阅Docker Reference中的Daemon套接字选项和Windows上的Docker Engine。
有关说明,请查看Airdesk博客文章。
您可以将Portainer部署为Play-with-Docker中的堆栈。
这是Nginx的一个工作配置(在1.11上测试)在myhost.mydomain / portainer上为Portainer提供服务:
upstream portainer {
server ADDRESS:PORT;
}
server {
listen 80;
location /portainer/ {
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_pass http://portainer/;
}
location /portainer/api/websocket/ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_pass http://portainer/api/websocket/;
}
}
替换ADDRESS:PORT
为Portainer服务器/容器详细信息。
这是一个工作配置HAProxy的以服务Portainer portainer.127.0.0.1.xip.io:
global
maxconn 10000
daemon
ssl-server-verify none
tune.ssl.default-dh-param 2048
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 30
timeout http-request 300s
timeout queue 1m
timeout connect 10s
timeout client 1d
timeout server 1d
timeout http-keep-alive 10s
timeout check 10s
maxconn 10000
userlist users
group all
group demo
group haproxy
listen stats
bind *:2100
mode http
stats enable
maxconn 10
timeout client 10s
timeout server 10s
timeout connect 10s
timeout queue 10s
stats hide-version
stats refresh 30s
stats show-node
stats realm Haproxy\ Statistics
stats uri /
stats admin if TRUE
frontend www-http
bind *:80
stats enable
mode http
option http-keep-alive
acl portainer hdr_end(host) -i portainer.127.0.0.1.xip.io
use_backend portainer if portainer
backend portainer
stats enable
option forwardfor
option http-keep-alive
server portainer 127.0.0.1:9000 check
注意:必须为前端和后端设置http-keep-alive
为了使Portainer能够将您重定向到Docker主机IP地址而不是0.0.0.0地址,您必须更改Docker守护程序的配置并添加该--ip
选项。
有关更多详细信息,请查看Docker文档。
请注意,您必须重新启动Docker守护程序才能使更改生效。
Portainer数据存储在Docker容器中。如果要在重新引导/升级后保留Portainer实例的数据,则需要保留数据。请参阅部署
在容器内运行Portainer时,它将使用您的Docker引擎系统时间来计算身份验证令牌到期时间。使用计算机/ VM休眠时,可能会在Docker系统时间内出现时间偏差。您需要确保Docker引擎系统时间与机器系统时间相同,如果没有,请重新启动Docker引擎。
检查Docker系统时间的简单方法是使用或者如果信息不可用。docker info
docker run busybox date
Docker for Windows的用户也可以通过导航到hyper-v-management - >虚拟机 - >右键单击MobyLinuxVM - >设置 - >集成服务并启用服务列表中的时间同步复选框来解决此问题。
在某些Windows安装程序中,Docker正在侦听本地环回地址,无法从Portainer容器中访问。您可以使用netsh
创建端口重定向,然后使用新创建的IP地址从Portainer进行连接。
创建从端口2375上的环回地址到端口2375上新创建的地址10.0.75.1的重定向(DOS / Powershell命令):
> netsh interface portproxy add v4tov4 listenaddress=10.0.75.1 listenport=2375 connectaddress=127.0.0.1 connectport=2375
然后,您将能够使用10.0.75.1:2375作为端点的URL。
在代理后面使用Portainer时,某些需要访问Internet的功能(例如应用程序模板)可能不可用。
将Portainer作为容器运行时,可以指定HTTP_PROXY
和HTTPS_PROXY
env var来指定应使用哪个代理。
例:
$ docker run -d -p 9000:9000 -e HTTP_PROXY=my.proxy.domain:7777 portainer/portainer
如果您将Portainer作为容器运行,那只是Docker镜像版本的问题。只需停止现有的Portainer容器,拉出最新的portainer / portainer图像并创建一个新的Portainer容器(使用与创建前一个容器相同的选项)。
如果您在Swarm集群中将Portainer作为服务运行,则可以发出以下命令来更新映像(假设您的Docker服务称为portainer):
$ docker service update --image portainer/portainer:latest portainer
如果您在Docker之外运行Portainer,请下载并解压缩新的二进制文件,并使用您之前使用的相同选项重新启动Portainer二进制文件。
看一下这个要点的说明。
有关详细说明,请查看此帖子。
有关自动创建用户和团队分配的更多细节这篇文章。
Portainer代理是一个封闭源代码软件。
可通过此存储库获取Portainer代理的发行说明。
摘自 https://portainer.readthedocs.io/en/stable/faq.html