From 6d1c068d5ac796a3db92510654468c893d5bf94a Mon Sep 17 00:00:00 2001 From: lspgn Date: Fri, 15 Oct 2021 20:51:34 -0700 Subject: [PATCH] Docker cleanup * Reduce all Dockerfiles to a single multi-staged one * Updates GitHub Actions and also push the current git shortened SHA --- .github/workflows/docker.yml | 15 ++++++---- Dockerfile | 57 ++++++++++++++++++++++++++++++++++++ Dockerfile.rtrdump | 23 --------------- Dockerfile.rtrdump.prod | 17 ----------- Dockerfile.rtrmon | 23 --------------- Dockerfile.rtrmon.prod | 17 ----------- Dockerfile.stayrtr | 28 ------------------ Dockerfile.stayrtr.prod | 23 --------------- Makefile | 37 ++++++++++++----------- 9 files changed, 84 insertions(+), 156 deletions(-) create mode 100644 Dockerfile delete mode 100644 Dockerfile.rtrdump delete mode 100644 Dockerfile.rtrdump.prod delete mode 100644 Dockerfile.rtrmon delete mode 100644 Dockerfile.rtrmon.prod delete mode 100644 Dockerfile.stayrtr delete mode 100644 Dockerfile.stayrtr.prod diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 0340875..aab3799 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -26,9 +26,10 @@ jobs: uses: docker/build-push-action@v2 with: context: ./ - file: ./Dockerfile.stayrtr.prod + file: ./Dockerfile push: true - tags: rpki/stayrtr:latest + tags: rpki/stayrtr:latest,rpki/stayrtr:${GITHUB_SHA::8} + target: stayrtr - name: Image digest (stayrtr) run: echo ${{ steps.docker_build_stayrtr.outputs.digest }} @@ -38,9 +39,10 @@ jobs: uses: docker/build-push-action@v2 with: context: ./ - file: ./Dockerfile.rtrmon.prod + file: ./Dockerfile push: true - tags: rpki/rtrmon:latest + tags: rpki/rtrmon:latest,rpki/rtrmon:${GITHUB_SHA::8} + target: rtrmon - name: Image digest (rtrmon) run: echo ${{ steps.docker_build_rtrmon.outputs.digest }} @@ -50,9 +52,10 @@ jobs: uses: docker/build-push-action@v2 with: context: ./ - file: ./Dockerfile.rtrdump.prod + file: ./Dockerfile push: true - tags: rpki/rtrdump:latest + tags: rpki/rtrdump:latest,rpki/rtrdump:${GITHUB_SHA::8} + target: rtrdump - name: Image digest (rtrdump) run: echo ${{ steps.docker_build_rtrdump.outputs.digest }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2e0aa6a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,57 @@ +############### +# Build stage # +############### +ARG src_dir="/stayrtr" + +FROM golang:alpine as builder +ARG src_dir + +RUN apk --update --no-cache add git make && \ + mkdir -p ${src_dir} + +WORKDIR ${src_dir} +COPY . . + +RUN SUFFIX= make build-all + +################ +# Keygen stage # +################ +FROM alpine:latest as keygen + +RUN apk --update --no-cache add openssl +RUN openssl ecparam -genkey -name prime256v1 -noout -outform pem > private.pem + +################# +# StayRTR stage # +################# +FROM alpine:latest AS stayrtr + +RUN apk --update --no-cache add ca-certificates && \ + adduser -S -D -H -h / rtr +USER rtr +COPY --from=builder /stayrtr/dist/stayrtr / +COPY --from=keygen /private.pem /private.pem +ENTRYPOINT ["./stayrtr"] + +################# +# RTRdump stage # +################# +FROM alpine:latest AS rtrdump + +RUN apk --update --no-cache add ca-certificates && \ + adduser -S -D -H -h / rtr +USER rtr +COPY --from=builder /stayrtr/dist/rtrdump / +ENTRYPOINT ["./rtrdump"] + +################# +# RTRmon stage # +################# +FROM alpine:latest AS rtrmon + +RUN apk --update --no-cache add ca-certificates && \ + adduser -S -D -H -h / rtr +USER rtr +COPY --from=builder /stayrtr/dist/rtrmon / +ENTRYPOINT ["./rtrmon"] diff --git a/Dockerfile.rtrdump b/Dockerfile.rtrdump deleted file mode 100644 index ccf7524..0000000 --- a/Dockerfile.rtrdump +++ /dev/null @@ -1,23 +0,0 @@ -ARG src_dir="/rtrdump" - -FROM golang:alpine as builder -ARG src_dir -ARG LDFLAGS="" - -RUN apk --update --no-cache add git && \ - mkdir -p ${src_dir} - -WORKDIR ${src_dir} -COPY . . - -RUN go build -ldflags "${LDFLAGS}" cmd/rtrdump/rtrdump.go - -FROM alpine:latest -ARG src_dir - -RUN apk --update --no-cache add ca-certificates && \ - adduser -S -D -H -h / rtr -USER rtr - -COPY --from=builder ${src_dir}/rtrdump / -ENTRYPOINT ["./rtrdump"] diff --git a/Dockerfile.rtrdump.prod b/Dockerfile.rtrdump.prod deleted file mode 100644 index ae84af9..0000000 --- a/Dockerfile.rtrdump.prod +++ /dev/null @@ -1,17 +0,0 @@ -ARG src_uri=github.com/bgp/stayrtr/cmd/rtrdump - -FROM golang:alpine as builder -ARG src_uri - -RUN apk --update --no-cache add git && \ - go get -u $src_uri - -FROM alpine:latest -ARG src_uri - -RUN apk --update --no-cache add ca-certificates && \ - adduser -S -D -H -h / rtr -USER rtr - -COPY --from=builder /go/bin/rtrdump / -ENTRYPOINT ["./rtrdump"] diff --git a/Dockerfile.rtrmon b/Dockerfile.rtrmon deleted file mode 100644 index a78e828..0000000 --- a/Dockerfile.rtrmon +++ /dev/null @@ -1,23 +0,0 @@ -ARG src_dir="/rtrmon" - -FROM golang:alpine as builder -ARG src_dir -ARG LDFLAGS="" - -RUN apk --update --no-cache add git && \ - mkdir -p ${src_dir} - -WORKDIR ${src_dir} -COPY . . - -RUN go build -ldflags "${LDFLAGS}" cmd/rtrmon/rtrmon.go - -FROM alpine:latest -ARG src_dir - -RUN apk --update --no-cache add ca-certificates && \ - adduser -S -D -H -h / rtr -USER rtr - -COPY --from=builder ${src_dir}/rtrmon / -ENTRYPOINT ["./rtrmon"] diff --git a/Dockerfile.rtrmon.prod b/Dockerfile.rtrmon.prod deleted file mode 100644 index 0def543..0000000 --- a/Dockerfile.rtrmon.prod +++ /dev/null @@ -1,17 +0,0 @@ -ARG src_uri=github.com/bgp/stayrtr/cmd/rtrmon - -FROM golang:alpine as builder -ARG src_uri - -RUN apk --update --no-cache add git && \ - go get -u $src_uri - -FROM alpine:latest -ARG src_uri - -RUN apk --update --no-cache add ca-certificates && \ - adduser -S -D -H -h / rtr -USER rtr - -COPY --from=builder /go/bin/rtrmon / -ENTRYPOINT ["./rtrmon"] diff --git a/Dockerfile.stayrtr b/Dockerfile.stayrtr deleted file mode 100644 index cddf96e..0000000 --- a/Dockerfile.stayrtr +++ /dev/null @@ -1,28 +0,0 @@ -ARG src_dir="/stayrtr" - -FROM golang:alpine as builder -ARG src_dir -ARG LDFLAGS="" - -RUN apk --update --no-cache add git && \ - mkdir -p ${src_dir} - -WORKDIR ${src_dir} -COPY . . - -RUN go build -ldflags "${LDFLAGS}" cmd/stayrtr/stayrtr.go - -FROM alpine:latest as keygen - -RUN apk --update --no-cache add openssl -RUN openssl ecparam -genkey -name prime256v1 -noout -outform pem > private.pem - -FROM alpine:latest -ARG src_dir - -RUN apk --update --no-cache add ca-certificates && \ - adduser -S -D -H -h / rtr -USER rtr - -COPY --from=keygen /private.pem /private.pem -ENTRYPOINT ["./stayrtr"] diff --git a/Dockerfile.stayrtr.prod b/Dockerfile.stayrtr.prod deleted file mode 100644 index 791386e..0000000 --- a/Dockerfile.stayrtr.prod +++ /dev/null @@ -1,23 +0,0 @@ -ARG src_uri=github.com/bgp/stayrtr/cmd/stayrtr - -FROM golang:alpine as builder -ARG src_uri - -RUN apk --update --no-cache add git && \ - go get -u $src_uri - -FROM alpine:latest as keygen - -RUN apk --update --no-cache add openssl -RUN openssl ecparam -genkey -name prime256v1 -noout -outform pem > private.pem - -FROM alpine:latest -ARG src_uri - -RUN apk --update --no-cache add ca-certificates && \ - adduser -S -D -H -h / rtr -USER rtr - -COPY --from=builder /go/bin/stayrtr / -COPY --from=keygen /private.pem /private.pem -ENTRYPOINT ["./stayrtr"] diff --git a/Makefile b/Makefile index f751027..1acc0c1 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ GOOS ?= linux ARCH ?= $(shell uname -m) BUILDINFOSDET ?= -DOCKER_REPO := bgp/ +DOCKER_REPO := rpki/ STAYRTR_NAME := stayrtr STAYRTR_VERSION := $(shell git describe --tags $(git rev-list --tags --max-count=1)) VERSION_PKG := $(shell echo $(STAYRTR_VERSION) | sed 's/^v//g') @@ -13,14 +13,16 @@ LICENSE := BSD-3 URL := https://github.com/bgp/stayrtr DESCRIPTION := StayRTR: a RPKI-to-Router server BUILDINFOS := ($(shell date +%FT%T%z)$(BUILDINFOSDET)) -LDFLAGS := '-X main.version=$(STAYRTR_VERSION) -X main.buildinfos=$(BUILDINFOS)' +LDFLAGS ?= '-X main.version=$(STAYRTR_VERSION) -X main.buildinfos=$(BUILDINFOS)' RTRDUMP_NAME := rtrdump RTRMON_NAME := rtrmon -OUTPUT_STAYRTR := $(DIST_DIR)stayrtr-$(STAYRTR_VERSION)-$(GOOS)-$(ARCH)$(EXTENSION) -OUTPUT_RTRDUMP := $(DIST_DIR)rtrdump-$(STAYRTR_VERSION)-$(GOOS)-$(ARCH)$(EXTENSION) -OUTPUT_RTRMON := $(DIST_DIR)rtrmon-$(STAYRTR_VERSION)-$(GOOS)-$(ARCH)$(EXTENSION) +SUFFIX ?= -$(STAYRTR_VERSION)-$(GOOS)-$(ARCH)$(EXTENSION) + +OUTPUT_STAYRTR := $(DIST_DIR)stayrtr$(SUFFIX) +OUTPUT_RTRDUMP := $(DIST_DIR)rtrdump$(SUFFIX) +OUTPUT_RTRMON := $(DIST_DIR)rtrmon$(SUFFIX) .PHONY: vet vet: @@ -39,29 +41,26 @@ prepare: clean: rm -rf $(DIST_DIR) +.PHONY: build-all +build-all: build-stayrtr build-rtrdump build-rtrmon + .PHONY: build-stayrtr build-stayrtr: prepare - go build -ldflags $(LDFLAGS) -o $(OUTPUT_STAYRTR) cmd/stayrtr/stayrtr.go + go build -ldflags $(LDFLAGS) -o $(OUTPUT_STAYRTR) cmd/stayrtr/stayrtr.go .PHONY: build-rtrdump build-rtrdump: - go build -ldflags $(LDFLAGS) -o $(OUTPUT_RTRDUMP) cmd/rtrdump/rtrdump.go + go build -ldflags $(LDFLAGS) -o $(OUTPUT_RTRDUMP) cmd/rtrdump/rtrdump.go .PHONY: build-rtrmon build-rtrmon: - go build -ldflags $(LDFLAGS) -o $(OUTPUT_RTRMON) cmd/rtrmon/rtrmon.go + go build -ldflags $(LDFLAGS) -o $(OUTPUT_RTRMON) cmd/rtrmon/rtrmon.go -.PHONY: docker-stayrtr -docker-stayrtr: - docker build -t $(DOCKER_REPO)$(STAYRTR_NAME):$(STAYRTR_VERSION) --build-arg LDFLAGS=$(LDFLAGS) -f Dockerfile.stayrtr . - -.PHONY: docker-rtrdump -docker-rtrdump: - docker build -t $(DOCKER_REPO)$(RTRDUMP_NAME):$(STAYRTR_VERSION) --build-arg LDFLAGS=$(LDFLAGS) -f Dockerfile.rtrdump . - -.PHONY: docker-rtrmon -docker-rtrmon: - docker build -t $(DOCKER_REPO)$(RTRMON_NAME):$(STAYRTR_VERSION) --build-arg LDFLAGS=$(LDFLAGS) -f Dockerfile.rtrmon . +.PHONY: docker +docker: + docker build -t $(DOCKER_REPO)$(STAYRTR_NAME) --target stayrtr . + docker build -t $(DOCKER_REPO)$(RTRDUMP_NAME) --target rtrdump . + docker build -t $(DOCKER_REPO)$(RTRMON_NAME) --target rtrmon . .PHONY: package-deb-stayrtr package-deb-stayrtr: prepare