# Customize Kong by injecting plugins and templates This dockerfile takes an existing Kong image and adds custom plugins and/or a custom template file to it. ``` docker build \ --build-arg KONG_BASE="kong:0.14.1-alpine" \ --build-arg PLUGINS="kong-http-to-https,kong-upstream-jwt" \ --build-arg TEMPLATE="/mykong/nginx.conf" \ --build-arg "KONG_LICENSE_DATA=$KONG_LICENSE_DATA" \ --tag "your_new_image" . ``` The above command will take the `kong:0.14.1-alpine` image and add the plugins (as known on [luarocks.org](https://luarocks.org)) `kong-http-to-https` and `kong-upstream-jwt` to it. Also the custom template ([for rendering the underlying nginx configuration file](https://docs.konghq.com/latest/configuration/#custom-nginx-templates--embedding-kong) ), located at `/mykong/nginx.conf` will be injected. The resulting new image will be tagged as `your_new_image`. When starting a container from the newly created image, the added plugins and template will automatically be applied. So there is no need to specify the environment variable `KONG_PLUGINS` nor the `--nginx-conf` command line switch to enable them. # Curated list of plugins This tool is based on the LuaRocks packagemanager to include all plugin dependencies. The `ROCKS_DIR` variable allows you to only use a curated list of rocks to be used (instead of the public ones). It will generate a local LuaRocks server, and not allow any public ones to be used. For an example of how to use it see the `example.sh` script. ## Arguments: - `KONG_BASE` the base image to use, defaults to `kong:latest`. - `PLUGINS` a comma-separated list of the plugin names (NOT rock files!) that you wish to add to the image. All dependencies will also be installed. - `ROCKS_DIR` a local directory where the allowed plugins/rocks are located. If specified, only rocks from this location will be allowed to be installed. If not specified, then the public `luarocks.org` server is used. - `TEMPLATE` the custom configuration template to use - `KONG_LICENSE_DATA` this is required when the base image is an Enterprise version of Kong. Note that the `PLUGINS` entries are simply LuaRocks commands used as: `luarocks install `. So anything that LuaRocks accepts can be added there, including commandline options. For example: ``` --build-arg PLUGINS="luassert --deps-mode=none" ``` Will add the `luassert` module, without resolving dependencies (this is useless, but demonstrates how it works). ## Limitations - Only works for pure-Lua modules for now.