关于如何在 Docker 中使用 Kong 的细节讨论可以在存有 Kong 镜像的 DockerHub 页面上找到。我们也有一个 Docker Compose template,内置了群组和可扩展性。
带数据库模式
以下是一个简单例子,展示了如何将一个 kong 容器连接至 Cassandra 或 PostgreSQL。
- 创建 docker 网络 你需要手动创建一个网络,用于容器之间互相发现和沟通。在本例中,kong-net是网络的名称,你可以随便改个名字。
$ docker network create kong-net
- 运行数据库
期望使用 Cassandra 容器:$ docker run -d --name kong-database \ --network=kong-net \ -p 9042:9042 \ cassandra:3
期望使用 PostgreSQL 容器:
$ docker run -d --name kong-database \ --network=kong-net \ -p 5432:5432 \ -e POSTGRES_USER=kong \ -e POSTGRES_DB=kong \ postgres:9.6
- 准备数据库 用一个临时 Kong 容器运行迁移。
$ docker run --rm \ --network=kong-net \ -e KONG_DATABASE=postgres \ -e KONG_PG_HOST=kong-database \ -e KONG_CASSANDRA_CONTACT_POINTS=kong-database \ kong:latest kong migrations bootstrap
在上例中,Cassandra 和 PostgreSQL 均已完成配置,不过,你需要用 Cassandra 或 PostgreSQL 更新 KONG_DATABASE
环境变量。 对于版本低于 0.15 的注意点:版本号低于 0.15 的 kong (最高 0.14),用 up
子命令替换 bootstrap
。另外,版本号低于 0.15 的 kong 禁止同时运行迁移。同一时间,只能有一个 kong 节点在运行迁移。这个限制对 kong 0.15,1.0 或更高版本不存在。 1. 启动 kong 准备好数据库和运行迁移后,启动一个连接至数据库容器的 kong 容器,就像前文的临时迁移容器一样。
$ docker run -d --name kong \ --network=kong-net \ -e KONG_DATABASE=postgres \ -e KONG_PG_HOST=kong-database \ -e KONG_CASSANDRA_CONTACT_POINTS=kong-database \ -e KONG_PROXY_ACCESS_LOG=/dev/stdout \ -e KONG_ADMIN_ACCESS_LOG=/dev/stdout \ -e KONG_PROXY_ERROR_LOG=/dev/stderr \ -e KONG_ADMIN_ERROR_LOG=/dev/stderr \ -e KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl \ -p 8000:8000 \ -p 8443:8443 \ -p 8001:8001 \ -p 8444:8444 \ kong:latest
- 使用 kong
kong 正在运行:
$ curl -i http://localhost:8001/
通过 5 分钟快速入门 快速学习如何使用 kong。
无数据库模式
以 无数据库模式 启动 kong 的步骤:
- 创建 docker 网络 这与 Pg/Cassandra 教程中的一样。我们使用了相同的网络名
kong-net
,你也可以改名成你想要的名字。
$ docker network create kong-net
以无数据库模式运行 kong 并不强制要求此步骤,不过,万一以后你想添加一些其它玩意(例如由 Redis Cluster 驱动的限速插件)时是个不错的伏笔。
- 创建一个 docker 磁盘 (volume)
本文中,一个 docker 磁盘就是实体主机中的一个目录,它被映射至容器内的一个目录。磁盘有一个名字,本里中,我们将其命名为kong-vol
。
docker volume create kong-vol
现在,你可以检查这个磁盘了:
$ docker volume inspect kong-vol
结果类似这个:
[ { "CreatedAt": "2019-05-28T12:40:09Z", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/kong-vol/_data", "Name": "kong-vol", "Options": {}, "Scope": "local" } ]
注意条目 MountPoint
,下一步我们会用到这个路径。
- 准备好你的配置文件
相关语法和属性在 声明式配置格式 中介绍。
在其中添加所有需要的条目(Services 服务,Route 路由,Plugins 插件,Consumers 消费者,等等)。
本教程中,我们假定你将其命名为 kong.yml
。
文件保存在上一部步提到的 MountPoint
路径下。在本例中,存储路径为 /var/lib/docker/volumes/kong-vol/_data/kong.yml
。
- 以无数据库模式启动 kong
虽然可以通过KONG_DATABASE=off
以无数据库模式启动 kong,但更常用的方式是通过KONG_DECLARATIVE_CONFIG
变量将声明式配置文件作为参数传递。为此,我们要让此文件在容器中可见。我们通过-v
实现操作,它将kong-vol
映射至容器内的/usr/local/kong/declarative
目录。
$ docker run -d --name kong \ --network=kong-net \ -v "kong-vol:/usr/local/kong/declarative" \ -e "KONG_DATABASE=off" \ -e "KONG_DECLARATIVE_CONFIG=/usr/local/kong/declarative/kong.yml" \ -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \ -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \ -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \ -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \ -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \ -p 8000:8000 \ -p 8443:8443 \ -p 8001:8001 \ -p 8444:8444 \ kong:latest
- 使用 kong
Kong 应该已经运行起来,包含了 kong.yml 中添加的条目。
$ curl -i http://localhost:8001/
例如,获取服务列表:
$ curl -i http://localhost:8001/services