由于我在 Mac 1 上,我认为尝试“docker run”此映像时会出现错误,但我没有。
调用
make build
、make image
构建,然后推送到远程。
生成文件:
.PHONY: build
build:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -o ./dist/retry main.go
.PHONY: image
image: build
docker build -t "my-repo/my-image:latest" --target retry .
Dockerfile:
####################################################################################################
# base
####################################################################################################
FROM alpine:3.12.3 as base
RUN apk update && apk upgrade && \
apk add ca-certificates && \
apk --no-cache add tzdata
COPY dist/retry /bin/retry
RUN chmod +x /bin/retry
####################################################################################################
# retry
####################################################################################################
FROM scratch as retry
ARG ARCH
COPY --from=base /usr/share/zoneinfo /usr/share/zoneinfo
COPY --from=base /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=base /bin/retry /bin/retry
ENTRYPOINT [ "/bin/retry" ]
我既可以在本地也可以通过我们的 CI 拉取并运行它,我相信 CI 使用 amd64 机器。
Mac 版 Docker 允许您运行与您所在架构不同的架构的映像。 如果有多个可用架构(例如,如果您构建并推送了多个版本),您甚至可以使用
--platform
命令上的 docker run
标志指定所需的架构。