| # |
| # 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. |
| # |
| |
| FROM alpine:3.12.3 as builder |
| |
| RUN apk add --no-cache --virtual .tools \ |
| bzip2 curl git automake libtool autoconf make sed file perl openrc openssl |
| |
| # ATS |
| RUN apk add --no-cache --virtual .ats-build-deps \ |
| build-base openssl-dev tcl-dev pcre-dev zlib-dev \ |
| libexecinfo-dev linux-headers libunwind-dev \ |
| brotli-dev jansson-dev luajit-dev readline-dev geoip-dev |
| |
| RUN apk add --no-cache --virtual .ats-extra-build-deps --repository https://dl-cdn.alpinelinux.org/alpine/edge/testing hwloc-dev |
| |
| RUN curl -L https://www-us.apache.org/dist/trafficserver/trafficserver-8.1.1.tar.bz2 | bzip2 -dc | tar xf - \ |
| && cd trafficserver-8.1.1/ \ |
| && autoreconf -if \ |
| && ./configure --enable-debug=yes \ |
| && make \ |
| && make install |
| |
| COPY ["./config/plugin.config", "/usr/local/etc/trafficserver/plugin.config"] |
| COPY ["./config/healthchecks.config", "/usr/local/etc/trafficserver/healthchecks.config"] |
| COPY ["./config/records.config", "/usr/local/etc/trafficserver/records.config"] |
| COPY ["./config/logging.yaml", "/usr/local/etc/trafficserver/logging.yaml"] |
| |
| # enable traffic.out for alpine/gentoo |
| RUN sed -i "s/TM_DAEMON_ARGS=\"\"/TM_DAEMON_ARGS=\" --bind_stdout \/usr\/local\/var\/log\/trafficserver\/traffic.out --bind_stderr \/usr\/local\/var\/log\/trafficserver\/traffic.out \"/" /usr/local/bin/trafficserver |
| RUN sed -i "s/TS_DAEMON_ARGS=\"\"/TS_DAEMON_ARGS=\" --bind_stdout \/usr\/local\/var\/log\/trafficserver\/traffic.out --bind_stderr \/usr\/local\/var\/log\/trafficserver\/traffic.out \"/" /usr/local/bin/trafficserver |
| |
| # Installing lua 5.1.4 |
| RUN curl -R -O http://www.lua.org/ftp/lua-5.1.4.tar.gz \ |
| && tar zxf lua-5.1.4.tar.gz \ |
| && cd lua-5.1.4 \ |
| && make linux test \ |
| && make linux install |
| |
| # luasocket |
| RUN wget https://github.com/diegonehab/luasocket/archive/v3.0-rc1.tar.gz \ |
| && tar zxf v3.0-rc1.tar.gz \ |
| && cd luasocket-3.0-rc1 \ |
| && sed -i "s/LDFLAGS_linux=-O -shared -fpic -o/LDFLAGS_linux=-O -shared -fpic -L\/usr\/lib -lluajit-5.1 -o/" src/makefile \ |
| && ln -sf /usr/lib/libluajit-5.1.so.2.1.0 /usr/lib/libluajit-5.1.so \ |
| && make \ |
| && make install-unix |
| |
| # redis.lua |
| RUN wget https://github.com/nrk/redis-lua/archive/v2.0.4.tar.gz \ |
| && tar zxf v2.0.4.tar.gz \ |
| && cp redis-lua-2.0.4/src/redis.lua /usr/local/share/lua/5.1/redis.lua |
| |
| # ingress-ats |
| RUN apk add --no-cache --virtual .ingress-build-deps \ |
| bash gcc musl-dev openssl go |
| |
| # Installing Golang https://github.com/CentOS/CentOS-Dockerfiles/blob/master/golang/centos7/Dockerfile |
| RUN wget https://dl.google.com/go/go1.15.6.src.tar.gz \ |
| && tar -C /usr/local -xzf go1.15.6.src.tar.gz && cd /usr/local/go/src/ && ./make.bash |
| ENV PATH=${PATH}:/usr/local/go/bin |
| ENV GOPATH="/usr/local/go/bin" |
| |
| # ----------------------- Copy over Project Code to Go path ------------------------ |
| RUN mkdir -p /usr/local/go/bin/src/ingress-ats |
| |
| COPY ["./main/", "$GOPATH/src/ingress-ats/main"] |
| COPY ["./proxy/", "$GOPATH/src/ingress-ats/proxy"] |
| COPY ["./namespace/", "$GOPATH/src/ingress-ats/namespace"] |
| COPY ["./endpoint/", "$GOPATH/src/ingress-ats/endpoint"] |
| COPY ["./util/", "$GOPATH/src/ingress-ats/util"] |
| COPY ["./watcher/", "$GOPATH/src/ingress-ats/watcher"] |
| COPY ["./pluginats/", "$GOPATH/src/ingress-ats/pluginats"] |
| COPY ["./redis/", "$GOPATH/src/ingress-ats/redis"] |
| COPY ["./go.mod", "$GOPATH/src/ingress-ats/go.mod"] |
| |
| # Building Project Main |
| WORKDIR /usr/local/go/bin/src/ingress-ats |
| ENV GO111MODULE=on |
| RUN go build -o ingress_ats main/main.go |
| |
| # redis conf |
| COPY ["./config/redis.conf", "/usr/local/etc/redis.conf"] |
| |
| # entry.sh + other scripts |
| COPY ["./bin/tls-config.sh", "/usr/local/bin/tls-config.sh"] |
| COPY ["./bin/tls-reload.sh", "/usr/local/bin/tls-reload.sh"] |
| COPY ["./bin/records-config.sh", "/usr/local/bin/records-config.sh"] |
| COPY ["./bin/entry.sh", "/usr/local/bin/entry.sh"] |
| WORKDIR /usr/local/bin/ |
| RUN chmod 755 tls-config.sh |
| RUN chmod 755 tls-reload.sh |
| RUN chmod 755 records-config.sh |
| RUN chmod 755 entry.sh |
| |
| FROM alpine:3.12.3 |
| |
| COPY --from=builder /usr/local /usr/local |
| |
| # essential library |
| RUN apk add -U \ |
| bash \ |
| build-base \ |
| curl ca-certificates \ |
| pcre \ |
| zlib \ |
| openssl \ |
| brotli \ |
| jansson \ |
| luajit \ |
| libunwind \ |
| readline \ |
| geoip \ |
| libexecinfo \ |
| redis \ |
| tcl \ |
| openrc \ |
| inotify-tools \ |
| cpulimit \ |
| logrotate |
| |
| RUN apk add -U --repository https://dl-cdn.alpinelinux.org/alpine/edge/testing hwloc |
| |
| # redis |
| RUN mkdir -p /var/run/redis/ \ |
| && touch /var/run/redis/redis.sock \ |
| && mkdir -p /var/log/redis |
| |
| # symlink for luajit |
| RUN ln -sf /usr/lib/libluajit-5.1.so.2.1.0 /usr/lib/libluajit-5.1.so |
| |
| # set up ingress log location |
| RUN mkdir -p /usr/local/var/log/ingress/ |
| COPY ["./config/logrotate.ingress", "/etc/logrotate.d/ingress"] |
| |
| ENTRYPOINT ["/usr/local/bin/entry.sh"] |