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 <team-core@konghq.com>"
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