diff --git a/app/victoria-metrics/multiarch/Dockerfile b/app/victoria-metrics/multiarch/Dockerfile new file mode 100644 index 000000000..78a003881 --- /dev/null +++ b/app/victoria-metrics/multiarch/Dockerfile @@ -0,0 +1,13 @@ +# See https://medium.com/on-docker/use-multi-stage-builds-to-inject-ca-certs-ad1e8f01de1b +ARG certs_image +ARG root_image +FROM $certs_image as certs +RUN apk --update --no-cache add ca-certificates tzdata + +FROM $root_image +COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +COPY --from=certs /usr/share/zoneinfo /usr/share/zoneinfo/ +EXPOSE 8428 +ENTRYPOINT ["/victoria-metrics-prod"] +ARG TARGETARCH +COPY victoria-metrics-${TARGETARCH}-prod ./victoria-metrics-prod diff --git a/app/vmagent/multiarch/Dockerfile b/app/vmagent/multiarch/Dockerfile new file mode 100644 index 000000000..74a8ceb12 --- /dev/null +++ b/app/vmagent/multiarch/Dockerfile @@ -0,0 +1,13 @@ +# See https://medium.com/on-docker/use-multi-stage-builds-to-inject-ca-certs-ad1e8f01de1b +ARG certs_image +ARG root_image +FROM $certs_image as certs +RUN apk --update --no-cache add ca-certificates tzdata + +FROM $root_image +COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +COPY --from=certs /usr/share/zoneinfo /usr/share/zoneinfo/ +EXPOSE 8429 +ENTRYPOINT ["/vmagent-prod"] +ARG TARGETARCH +COPY vmagent-${TARGETARCH}-prod ./vmagent-prod diff --git a/app/vmauth/multiarch/Dockerfile b/app/vmauth/multiarch/Dockerfile new file mode 100644 index 000000000..79be2563f --- /dev/null +++ b/app/vmauth/multiarch/Dockerfile @@ -0,0 +1,13 @@ +# See https://medium.com/on-docker/use-multi-stage-builds-to-inject-ca-certs-ad1e8f01de1b +ARG certs_image +ARG root_image +FROM $certs_image as certs +RUN apk --update --no-cache add ca-certificates tzdata + +FROM $root_image +COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +COPY --from=certs /usr/share/zoneinfo /usr/share/zoneinfo/ +EXPOSE 8427 +ENTRYPOINT ["/vmauth-prod"] +ARG TARGETARCH +COPY vmauth-${TARGETARCH}-prod ./vmauth-prod diff --git a/app/vmbackup/multiarch/Dockerfile b/app/vmbackup/multiarch/Dockerfile new file mode 100644 index 000000000..836a86a51 --- /dev/null +++ b/app/vmbackup/multiarch/Dockerfile @@ -0,0 +1,12 @@ +# See https://medium.com/on-docker/use-multi-stage-builds-to-inject-ca-certs-ad1e8f01de1b +ARG certs_image +ARG root_image +FROM $certs_image as certs +RUN apk --update --no-cache add ca-certificates tzdata + +FROM $root_image +COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +COPY --from=certs /usr/share/zoneinfo /usr/share/zoneinfo/ +ENTRYPOINT ["/vmbackup-prod"] +ARG TARGETARCH +COPY vmbackup-${TARGETARCH}-prod ./vmbackup-prod diff --git a/app/vmctl/multiarch/Dockerfile b/app/vmctl/multiarch/Dockerfile new file mode 100644 index 000000000..e05980d89 --- /dev/null +++ b/app/vmctl/multiarch/Dockerfile @@ -0,0 +1,12 @@ +# See https://medium.com/on-docker/use-multi-stage-builds-to-inject-ca-certs-ad1e8f01de1b +ARG certs_image +ARG root_image +FROM $certs_image as certs +RUN apk --update --no-cache add ca-certificates tzdata + +FROM $root_image +COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +COPY --from=certs /usr/share/zoneinfo /usr/share/zoneinfo/ +ENTRYPOINT ["/vmctl-prod"] +ARG TARGETARCH +COPY vmctl-${TARGETARCH}-prod ./vmctl-prod diff --git a/app/vmrestore/multiarch/Dockerfile b/app/vmrestore/multiarch/Dockerfile new file mode 100644 index 000000000..6ed44dd12 --- /dev/null +++ b/app/vmrestore/multiarch/Dockerfile @@ -0,0 +1,12 @@ +# See https://medium.com/on-docker/use-multi-stage-builds-to-inject-ca-certs-ad1e8f01de1b +ARG certs_image +ARG root_image +FROM $certs_image as certs +RUN apk --update --no-cache add ca-certificates tzdata + +FROM $root_image +COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt +COPY --from=certs /usr/share/zoneinfo /usr/share/zoneinfo/ +ENTRYPOINT ["/vmrestore-prod"] +ARG TARGETARCH +COPY vmrestore-${TARGETARCH}-prod ./vmrestore-prod diff --git a/deployment/docker/Makefile b/deployment/docker/Makefile index 0a19fc843..c922e5d99 100644 --- a/deployment/docker/Makefile +++ b/deployment/docker/Makefile @@ -21,7 +21,7 @@ package-builder: --build-arg go_builder_image=$(GO_BUILDER_IMAGE) \ deployment/docker/builder -app-via-docker: package-base package-builder +app-via-docker: package-builder mkdir -p gocache-for-docker docker run --rm \ --user $(shell id -u):$(shell id -g) \ @@ -37,7 +37,7 @@ app-via-docker: package-base package-builder -tags 'netgo osusergo nethttpomithttp2' \ -o bin/$(APP_NAME)$(APP_SUFFIX)-prod $(PKG_PREFIX)/app/$(APP_NAME) -package-via-docker: +package-via-docker: package-base (docker image ls --format '{{.Repository}}:{{.Tag}}' | grep -q '$(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)$(APP_SUFFIX)$(RACE)$$') || (\ $(MAKE) app-via-docker && \ docker build \ @@ -46,45 +46,22 @@ package-via-docker: -t $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)$(APP_SUFFIX)$(RACE) \ -f app/$(APP_NAME)/deployment/Dockerfile bin) -package-manifest: \ - package-via-docker-amd64 \ - package-via-docker-arm \ - package-via-docker-arm64 \ - package-via-docker-ppc64le \ - package-via-docker-386 - $(MAKE) package-manifest-internal - -package-manifest-internal: - docker push $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-amd64$(RACE) - docker push $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-arm$(RACE) - docker push $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-arm64$(RACE) - docker push $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-ppc64le$(RACE) - docker push $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-386$(RACE) - DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create --amend $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)$(RACE) \ - $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-amd64$(RACE) \ - $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-arm$(RACE) \ - $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-arm64$(RACE) \ - $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-ppc64le$(RACE) \ - $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-386$(RACE) - GOARCH=amd64 $(MAKE) package-manifest-annotate-goarch - GOARCH=arm $(MAKE) package-manifest-annotate-goarch - GOARCH=arm64 $(MAKE) package-manifest-annotate-goarch - GOARCH=ppc64le $(MAKE) package-manifest-annotate-goarch - GOARCH=386 $(MAKE) package-manifest-annotate-goarch - -package-manifest-annotate-goarch: - DOCKER_CLI_EXPERIMENTAL=enabled docker manifest annotate $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)$(RACE) \ - $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-$(GOARCH)$(RACE) --os linux --arch $(GOARCH) - -publish-via-docker: package-manifest - docker tag $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-amd64$(RACE) $(DOCKER_NAMESPACE)/$(APP_NAME):latest-amd64$(RACE) - docker tag $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-arm$(RACE) $(DOCKER_NAMESPACE)/$(APP_NAME):latest-arm$(RACE) - docker tag $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-arm64$(RACE) $(DOCKER_NAMESPACE)/$(APP_NAME):latest-arm64$(RACE) - docker tag $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-ppc64le$(RACE) $(DOCKER_NAMESPACE)/$(APP_NAME):latest-ppc64le$(RACE) - docker tag $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)-386$(RACE) $(DOCKER_NAMESPACE)/$(APP_NAME):latest-386$(RACE) - PKG_TAG=latest $(MAKE) package-manifest-internal - DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push --purge $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)$(RACE) - DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push --purge $(DOCKER_NAMESPACE)/$(APP_NAME):latest$(RACE) +publish-via-docker: \ + app-via-docker-amd64 \ + app-via-docker-arm \ + app-via-docker-arm64 \ + app-via-docker-ppc64le \ + app-via-docker-386 + docker buildx build \ + --platform=linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/386 \ + --build-arg certs_image=$(CERTS_IMAGE) \ + --build-arg root_image=$(ROOT_IMAGE) \ + --build-arg APP_NAME=$(APP_NAME) \ + -t $(DOCKER_NAMESPACE)/$(APP_NAME):$(PKG_TAG)$(RACE) \ + -o type=image \ + -f app/$(APP_NAME)/multiarch/Dockerfile \ + --push \ + bin run-via-docker: package-via-docker docker run -it --rm \