【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