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