feat: support docker image creation from local codebase (#476)
diff --git a/.github/workflows/apisix_dev_docker_local_test.yaml b/.github/workflows/apisix_dev_docker_local_test.yaml
new file mode 100644
index 0000000..e8974c3
--- /dev/null
+++ b/.github/workflows/apisix_dev_docker_local_test.yaml
@@ -0,0 +1,66 @@
+name: CI for docker image built from local source code
+
+on:
+ schedule:
+ - cron: "0 1 * * *"
+ push:
+ branches: [master]
+ paths-ignore:
+ - 'docs/**'
+ - '**/*.md'
+ pull_request:
+ branches:
+ - master
+ - 'release/apisix-2.15.**'
+
+env:
+ APISIX_IMAGE_TAG: "local"
+
+jobs:
+
+ build:
+ runs-on: ubuntu-latest
+
+ strategy:
+ fail-fast: false
+ matrix:
+ platform:
+ - debian
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Checkout APISIX code
+ run: |
+ git clone https://github.com/apache/apisix.git
+
+ - name: Build image
+ run: |
+ cd apisix
+ tag="apache/apisix:$APISIX_IMAGE_TAG"
+ docker build -t $tag -f ../debian-dev/Dockerfile.local .
+
+ - name: use docker-compose
+ run: docker-compose -p docker-apisix -f example/docker-compose.yml up -d
+
+ - name: Test APISIX
+ run: |
+ sleep 30
+
+ curl http://127.0.0.1:9180/apisix/admin/routes/1 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
+ {
+ "uri": "/get",
+ "upstream": {
+ "type": "roundrobin",
+ "nodes": {
+ "web1:80": 1
+ }
+ }
+ }'
+
+ result_code=`curl -I -m 10 -o /dev/null -s -w %{http_code} http://127.0.0.1:9080/get`
+ if [[ $result_code -ne 200 ]];then
+ printf "result_code: %s\n" "$result_code"
+ exit 125
+ fi
diff --git a/debian-dev/Dockerfile.local b/debian-dev/Dockerfile.local
new file mode 100644
index 0000000..c861088
--- /dev/null
+++ b/debian-dev/Dockerfile.local
@@ -0,0 +1,76 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# Use this dockerfile to create a docker image of your apisix local/patched codebase
+
+FROM api7/apisix-base:dev AS build
+
+ARG ENABLE_PROXY=false
+
+ENV DEBIAN_FRONTEND noninteractive
+
+# replace the source path with the location of apisix related directories in your host machine
+# refer: https://web.archive.org/web/20230604150902/https://www.jamestharpe.com/docker-include-files-outside-build-context/
+
+COPY ./apisix /usr/local/apisix/apisix
+COPY ./conf /usr/local/apisix/conf
+COPY ./bin/apisix /usr/bin/apisix
+COPY ./rockspec/apisix-master-0.rockspec /usr/local/apisix/rockspec/apisix-master-0.rockspec
+COPY ./utils/linux-install-luarocks.sh /usr/local/apisix/linux-install-luarocks.sh
+
+WORKDIR /usr/local/apisix
+
+SHELL ["/bin/bash", "-c"]
+
+RUN set -x \
+ && (test "${ENABLE_PROXY}" != "true" || /bin/sed -i 's,http://deb.debian.org,http://mirrors.aliyun.com,g' /etc/apt/sources.list) \
+ && apt-get -y update --fix-missing \
+ && apt-get install -y curl \
+ gawk \
+ git \
+ libldap2-dev \
+ liblua5.1-0-dev \
+ lua5.1 \
+ sudo \
+ unzip \
+ wget \
+ make \
+ libssl-dev \
+ && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
+ && source "$HOME/.cargo/env" \
+ # rust version 1.69.0 required to compile lua-resty-ldap
+ && rustup install 1.69.0 \
+ && rustup default 1.69.0 \
+ && bash ./linux-install-luarocks.sh \
+ && luarocks config variables.OPENSSL_INCDIR /usr/include/ \
+ && luarocks config variables.PCRE_DIR /usr/local/openresty/pcre \
+ && luarocks install rockspec/apisix-master-0.rockspec --tree=/usr/local/apisix/deps --deps-only \
+ && mkdir /usr/local/apisix/logs && touch /usr/local/apisix/logs/error.log && touch /usr/local/apisix/logs/access.log
+
+ENV PATH=$PATH:/usr/local/openresty-debug/luajit/bin:/usr/local/openresty-debug/nginx/sbin:/usr/local/openresty-debug/bin
+
+EXPOSE 9080 9443
+
+RUN wget https://raw.githubusercontent.com/apache/apisix-docker/master/debian-dev/docker-entrypoint.sh
+
+RUN ["chmod", "+x", "./docker-entrypoint.sh"]
+
+ENTRYPOINT ["./docker-entrypoint.sh"]
+
+CMD ["docker-start"]
+
+STOPSIGNAL SIGQUIT