前面介绍了 Kong 和 Konga 的安装,里面还涉及到了 Docker 网络、PostgreSQL 数据库等,Kong 1个容器,Konga 1个容器,database 1个容器,还要3个容器在同一网络下,不管是部署还是操作,管理起来都很麻烦,并且也很慢,那么能不能将这3个相关联容器打包在一起组成一个项目,一启动就启动所有的,一停止就停掉所有,准备使用 Docker Compose 部署Kong、Konga,不怎么熟悉 Docker Compose 使用的和不太了解的戳下面文章。
话不多说,下面是 docker-compose 部署整套环境的脚本。
最开始准备了两个 yml,分别是 docker-compose-db.yml
和 docker-compose.yml
,先执行 docker-compose-db.yml
再执行 docker-compose.yml
。
docker-compose-db.yml
version: '3.7'
services:
db:
image: postgres:9.6
environment:
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong
POSTGRES_USER: kong
healthcheck:
test: ["CMD", "pg_isready", "-U", "kong"]
interval: 30s
timeout: 30s
retries: 3
restart: on-failure
stdin_open: true
tty: true
ports:
- "5432:5432/tcp"
konga:
image: pantsel/konga
environment:
NODE_ENV: production
ports:
- "1337:1337/tcp"
如果你的 docker-composer 安装的版本比较低,可以将 version 版本改低,就可以执行了;db 的 healthcheck 做了数据层初始化完成检测,数据库完成之后才会按照顺序继续启动接下来的容器。
docker-compose -f docker-compose-db.yml up -d
我这里选择后台执行,执行完会返回
Creating test_db_1 ... done
Creating test_konga_1 ... done
docker-compose.yml
version: '3.7'
services:
kong:
image: kong
restart: always
environment:
- KONG_DATABASE=postgres
- KONG_PG_HOST=test_db_1
- KONG_PG_USER=kong
- KONG_PG_PASSWORD=kong
- KONG_PG_DATABASE=kong
- KONG_PROXY_ACCESS_LOG=/dev/stdout
- KONG_ADMIN_ACCESS_LOG=/dev/stdout
- KONG_PROXY_ERROR_LOG=/dev/stderr
- KONG_ADMIN_ERROR_LOG=/dev/stderr
- KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl
ports:
- "8000:8000"
- "8443:8443"
- "8001:8001"
再执行 docker-compose docker-compose.yml up -d
,执行完会返回 Creating test_kong_1 ... done
但是分成两个 yaml 文件,执行起来也挺麻烦的,后来合二为一,化为一整个 docker-compose.yml
docker-compose.yml(整理版)
version: '3.7'
services:
db:
image: postgres:9.6
environment:
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong
POSTGRES_USER: kong
healthcheck:
test: ["CMD", "pg_isready", "-U", "kong"]
interval: 30s
timeout: 30s
retries: 3
restart: on-failure
stdin_open: true
tty: true
ports:
- "5432:5432/tcp"
kong:
image: kong
restart: always
environment:
- KONG_DATABASE=postgres
- KONG_PG_HOST=db
- KONG_PG_USER=kong
- KONG_PG_PASSWORD=kong
- KONG_PG_DATABASE=kong
- KONG_PROXY_ACCESS_LOG=/dev/stdout
- KONG_ADMIN_ACCESS_LOG=/dev/stdout
- KONG_PROXY_ERROR_LOG=/dev/stderr
- KONG_ADMIN_ERROR_LOG=/dev/stderr
- KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl
ports:
- "8000:8000"
- "8443:8443"
- "8001:8001"
depends_on:
- db
konga:
image: pantsel/konga
environment:
NODE_ENV: production
ports:
- "1337:1337/tcp"
links:
- kong
这里用了 depends_on
先等 db 启动起来,再启动 kong,同时使用了 links
来链接 kong 和 konga 两个容器,再执行:docker-compose docker-compose.yml up -d
,此时就会返回:
Creating test_db_1 ... done
Creating test_kong_1 ... done
Creating test_konga_1 ... done
大功告成!效果如图: