关于如何在 Docker 中使用 Kong 的细节讨论可以在存有 Kong 镜像的 DockerHub 页面上找到。我们也有一个 Docker Compose 模板,内置了群组和可扩展性。
带数据库模式
以下是一个简单例子,展示了如何将一个 kong 容器连接至 Cassandra 或 PostgreSQL。
1. 创建 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 或更高版本不存在。
- 启动 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 的步骤:
1. 创建 docker 网络
这与 Pg/Cassandra 教程中的一样。我们使用了相同的网络名 kong-net
,你也可以改名成你想要的名字。
$ docker network create kong-net
以无数据库模式运行 kong 并不强制要求此步骤,不过,万一以后你想添加一些其它玩意(例如由 Redis Cluster 驱动的限速插件)时是个不错的伏笔。
2. 创建一个 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
,下一步我们会用到这个路径。
3. 准备好你的配置文件
相关语法和属性在 声明式配置格式 中介绍。
在其中添加所有需要的条目(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