FROM alpine:latest as builder WORKDIR /app COPY . ./ # This is where one could build the application code as well. FROM alpine:latest as tailscale WORKDIR /app COPY . ./ ENV TSFILE=tailscale_1.68.2_amd64.tgz RUN wget https://pkgs.tailscale.com/stable/${TSFILE} && tar xzf ${TSFILE} --strip-components=1 COPY . ./ # https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds FROM alpine:latest RUN apk update && apk add --no-cache ca-certificates iptables ip6tables nginx # Copy binary to production image COPY --from=builder /app/start.sh /app/start.sh COPY --from=tailscale /app/tailscaled /app/tailscaled COPY --from=tailscale /app/tailscale /app/tailscale RUN mkdir -p /var/run/tailscale /var/cache/tailscale /var/lib/tailscale /usr/share/nginx/html COPY nginx.conf /etc/nginx/http.d/nginx.conf COPY custom_50x.html /usr/share/nginx/html/ # Run on container startup. EXPOSE 8080 CMD ["/app/start.sh"]