前面介绍了 Kong 和 Konga 的安装,里面还涉及到了 Docker 网络、PostgreSQL 数据库等,Kong 1个容器,Konga 1个容器,database 1个容器,还要3个容器在同一网络下,不管是部署还是操作,管理起来都很麻烦,并且也很慢,那么能不能将这3个相关联容器打包在一起组成一个项目,一启动就启动所有的,一停止就停掉所有,准备使用 Docker Compose 部署Kong、Konga,不怎么熟悉 Docker Compose 使用的和不太了解的戳下面文章。

话不多说,下面是 docker-compose 部署整套环境的脚本。
最开始准备了两个 yml,分别是 docker-compose-db.ymldocker-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

大功告成!效果如图:
konga dashboard

最后修改:2020 年 06 月 09 日 12 : 44 PM
如果觉得我的文章对你有用,请随意赞赏