【API网关Kong系列十一】- 源码构建Docker 镜像

1、前语

在前的十章中我们介绍了Kong的基本功能和使用,也介绍了基于docker的部署,不过官网提供的Docker部署都是基于rpm形式发布yum安装的,这就有些麻烦了。
本章我们介绍基于源码的方式来构建docker镜像。

2、回顾官方Docker镜像方式

在DockerHub中能够搜索到这里使用的kong的镜像,它是docker官方提供的镜像,不是第三方用户上传的,页面上给出了对应的Dockerfile,例如kong: 1.0.3-centos的dockerfile

FROM centos:7
LABEL maintainer="Kong Core Team <[email protected]>"

ENV KONG_VERSION 1.0.3

ARG SU_EXEC_VERSION=0.2
ARG SU_EXEC_URL="https://github.com/ncopa/su-exec/archive/v${SU_EXEC_VERSION}.tar.gz"

RUN yum install -y -q gcc make unzip \
&& curl -sL "${SU_EXEC_URL}" | tar -C /tmp -zxf - \
&& make -C "/tmp/su-exec-${SU_EXEC_VERSION}" \
&& cp "/tmp/su-exec-${SU_EXEC_VERSION}/su-exec" /usr/bin \
&& rm -fr "/tmp/su-exec-${SU_EXEC_VERSION}" \
&& yum autoremove -y -q gcc make \
&& yum clean all -q \
&& rm -fr /var/cache/yum/* /tmp/yum_save*.yumtx /root/.pki

RUN useradd --uid 1337 kong \
    && yum install -y https://bintray.com/kong/kong-community-edition-rpm/download_file?file_path=centos/7/kong-community-edition-$KONG_VERSION.el7.noarch.rpm \
    && yum clean all

COPY docker-entrypoint.sh /docker-entrypoint.sh

ENTRYPOINT ["/docker-entrypoint.sh"]

EXPOSE 8000 8443 8001 8444

STOPSIGNAL SIGTERM

CMD ["kong", "docker-start"]

从中能够看到CentOS中的kong以rpm的形式发布的,用yum安装:

yum install -y https://bintray.com/kong/kong-community-edition-rpm/download_file?file_path=centos/7/kong-community-edition-$KONG_VERSION.el7.noarch.rpm

这个有些麻烦,因为如果对kong进行了修改,要先打成rpm文件,然后才能重新制作镜像,需要一个直接使用kong源代码生成镜像的Dockerfile
下面进入正题

3、使用源码来生成镜像的Dockerfile

先制作Base镜像,减少后续镜像的制作时间,使用下面的Dockerfile:

FROM centos:7
LABEL maintainer="https://github.com/yuelicn/containers"

RUN yum install -y yum-utils  epel-release \
&& yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo \
&& yum install -y openresty-1.13.6.2 openresty-resty-1.13.6.2 luarocks make git gcc lua-devel openssl-devel m4 \
&& yum install -y libyaml \
&& yum install -y libyaml-devel \
&& yum clean all

生成镜像yueli/openresty:centos:

docker build -f ./Dockerfile.base -t yueli/openresty:centos .

在Base镜像的基础上制作kong的镜像,将kong源码拷贝到镜像中,并安装,Dockerfile如下

FROM yueli/openresty:centos
LABEL maintainer="https://github.com/yuelicn/containers"

ENV KONG_VERSION 1.2.1

COPY ./kong  /kong
COPY ./kong.sh /kong.sh
COPY ./kong.conf /kong.conf
COPY ./docker-entrypoint.sh /docker-entrypoint.sh

RUN useradd --uid 1337 kong && pushd /kong && make install && popd && chmod +x /kong.sh && ln -s  /kong.sh /usr/bin/kong

ENTRYPOINT ["/docker-entrypoint.sh"]

EXPOSE 8000 8443 8001 8444

STOPSIGNAL SIGTERM

CMD ["kong", "docker-start"]

所有相关文件位于https://github.com/yuelicn/do... 或者 https://github.com/yuelicn/co...中,可以直接用下面的操作:

git clone https://github.com/yuelicn/containers.git
cd docker-kong
make base
make prod

或者

git clone https://github.com/yuelicn/docker-kong

docker build -f ./Dockerfile-dev -t yueli/kong:1.2.1 .

两种方式都可以。
注意:在https://github.com/yuelicn/do... 项目中 docker-entrypoint.sh 中我加了对kong初始化执行,如果想手动执行初始化,可以去掉。

到这我们就可以愉悦使用源码构建镜像了。

想了解更多关于Kong网关的请移步 >>>>> 企业级API网关Kong