docker Portainer 文档

部署

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集群内

使用我们的代理设置在Swarm集群中部署P​​ortainer。

注意:此设置将假定您在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数据

默认情况下,Portainer将其数据存储/data在Linux(C:\\dataWindows)文件夹中的容器中。

在重新启动/升级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

Docker Swarm服务

如果您将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部署方案。

声明Docker环境在部署时进行管理

您可以指定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上传所需文件或使用--tlsverifyCLI上的标志。

Portainer将尝试使用以下指定的文件路径(在Linux上,有关Windows的详细信息,请参阅配置部分):

  • CA: /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使用SSL 

默认情况下,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

经由搬运工-组成部署Portainer 

您可以使用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二进制文件: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:两个端点快照作业之间的时间间隔表示为一个字符串,例如30s5m1h...利用所支持的time.ParseDuration方法(默认:5m
  • --ssl:使用SSL安全Portainer实例(默认值:false
  • --sslcert:用于保护Portainer实例的SSL证书的路径(默认值:/certs/portainer.crtC:\certs\portainer.crt在Windows上)
  • --sslkey:用于保护Portainer实例的SSL密钥的路径(默认值:/certs/portainer.keyC:\certs\portainer.key在Windows上)
  • --sync-interval:两个端点的同步请求之间的时间间隔表示为一个字符串,例如30s5m1h...利用所支持的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.pemC:\certs\cert.pem在Windows上)
  • --tlskey:TLS键的路径(默认值:/certs/key.pemC:\certs\key.pem在Windows上)
  • --tlsverify:支持TLS(默认false

API 

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

手动部署

总的来说,设置包括以下步骤:

  • 步骤1:在您的Swarm群集中为代理创建新的覆盖网络。
  • 步骤2:将代理部署为群集中的全局服务(连接到覆盖网络)。
  • 步骤3:使用代理的IP:PORT作为端点,将Portainer实例连接到任何代理。

注意:此设置假定您正在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实例连接到代理

如果要将现有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

启用主机管理功能

出于安全原因,默认情况下禁用以下功能:

  • 能够管理运行代理程序的主机的文件系统
  • 能够检索有关运行代理程序的主机的硬件信息(PCI设备/磁盘)

要启用这些功能,必须通过以下方式正确配置代理:

  • 通过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

可用选项

您可以使用环境变量更改代理的配置。

可以调整以下环境变量:

  • AGENT_PORT:代理端口(默认:9001
  • LOG_LEVEL:代理日志级别(默认:INFO
  • AGENT_CLUSTER_ADDR:每个代理程序用于形成集群的地址。建议tasks.在Swarm集群内部署代理时将此值设置为。
  • AGENT_SECRET:用于授权Portainer实例连接到代理的共享密钥
  • CAP_HOST_MANAGEMENT:通过将值设置为启用主机管理功能 1

用法

API 

如果要使用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-interval60s默认情况下)中定义的时间间隔读取文件,并自动执行以下操作:

  • 对于数据库中的每个端点,它将使用enpoint名称作为比较键自动合并文件中的任何配置find
  • 如果端点存在于数据库中但文件中不存在,则将从数据库中删除该端点
  • 如果端点存在于文件中但不存在于数据库中,则将在数据库中创建端点

使用外部端点管理时,将禁用通过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对象namevalue

该字段是可选的

例:

{
  "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

支持的平台。该字段值必须设置为linuxwindows。这将在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 deploydocker-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

支持的平台。该字段值必须设置为linuxwindows。这将在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,我可以使用Portainer吗?

如果要在启用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。

如何通过TCP公开Docker API,以便Portainer可以与我的环境进行通信?

要管理远程Docker环境,Portainer必须能够通过网络与Docker API进行通信(通常使用TLS上的TCP 2375,2376)。

您必须根据您的网络环境考虑安全问题

请参阅Docker Reference中的Daemon套接字选项和Windows上的Docker Engine。

如何在Windows Server 2016上设置Portainer?

有关说明,请查看Airdesk博客文章。

如何在公共演示之外与Portainer一起玩?

您可以将Portainer部署为Play-with-Docker中的堆栈。

如何配置反向代理以服务Portainer?

这是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提供服务?

这是一个工作配置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

容器视图中的暴露端口将我重定向到0.0.0.0,我该怎么办?

为了使Portainer能够将您重定向到Docker主机IP地址而不是0.0.0.0地址,您必须更改Docker守护程序的配置并添加该--ip选项。

有关更多详细信息,请查看Docker文档。

请注意,您必须重新启动Docker守护程序才能使更改生效。

我重新启动了Portainer并丢失了所有数据,为什么?

Portainer数据存储在Docker容器中。如果要在重新引导/升级后保留Portainer实例的数据,则需要保留数据。请参阅部署

我在登录时收到错误“您的会话已过期”,无法登录。怎么了?

在容器内运行Portainer时,它将使用您的Docker引擎系统时间来计算身份验证令牌到期时间。使用计算机/ VM休眠时,可能会在Docker系统时间内出现时间偏差。您需要确保Docker引擎系统时间与机器系统时间相同,如果没有,请重新启动Docker引擎。

检查Docker系统时间的简单方法是使用或者如果信息不可用。docker infodocker run busybox date

Docker for Windows的用户也可以通过导航到hyper-v-management - >虚拟机 - >右键单击MobyLinuxVM - >设置 - >集成服务并启用服务列表中的时间同步复选框来解决此问题。

如何在Windows上的端口2375上访问Docker API?

在某些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?

在代理后面使用Portainer时,某些需要访问Internet的功能(例如应用程序模板)可能不可用。

将Portainer作为容器运行时,可以指定HTTP_PROXYHTTPS_PROXYenv var来指定应使用哪个代理。

例:

$ docker run -d -p 9000:9000 -e HTTP_PROXY=my.proxy.domain:7777 portainer/portainer

如何升级我的Portainer版本?

如果您将Portainer作为容器运行,那只是Docker镜像版本的问题。只需停止现有的Portainer容器,拉出最新的portainer / portainer图像并创建一个新的Portainer容器(使用与创建前一个容器相同的选项)。

如果您在Swarm集群中将Portainer作为服务运行,则可以发出以下命令来更新映像(假设您的Docker服务称为portainer):

$ docker service update --image portainer/portainer:latest portainer

如果您在Docker之外运行Portainer,请下载并解压缩新的二进制文件,并使用您之前使用的相同选项重新启动Portainer二进制文件。

如何使用Portainer管理远程Dokku主机?

看一下这个要点的说明。

如何启用LDAP身份验证?

有关详细说明,请查看此帖子。

有关自动创建用户和团队分配的更多细节这篇文章。

我在哪里可以找到Portainer代理的源代码?

Portainer代理是一个封闭源代码软件。

可通过此存储库获取Portainer代理的发行说明。

 

摘自 https://portainer.readthedocs.io/en/stable/faq.html

 

你可能感兴趣的:(docker)