乐趣区

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 <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

退出移动版