mirror of
https://github.com/TECHNOFAB11/dbmate.git
synced 2026-02-02 09:25:07 +01:00
Prior to this commit, we released two linux binaries: * `dbmate-linux-amd64` (built with cgo, dynamically linked) * `dbmate-linux-musl-amd64` (built without cgo, statically linked, no sqlite support) The statically linked binary is desirable for alpine linux users (or anyone else using musl libc or minimal docker images). The original reason for having two separate binaries was that the easiest method to create a static binary for go is to set `CGO_ENABLED=0`, but unfortunately this also prevented us from building sqlite (which requires cgo). With this commit, all linux and windows binaries are explicitly statically linked while leaving cgo enabled. Hat tip to https://www.arp242.net/static-go.html which explained the necessary flags to enable this. As an added bonus, the `dbmate` docker image now now uses a `scratch` base rather than `gcr.io/distroless/base`, reducing the image size from 26.7 MB to 9.8 MB.
37 lines
790 B
Docker
37 lines
790 B
Docker
# build image
|
|
FROM techknowlogick/xgo:go-1.14.x as build
|
|
WORKDIR /src
|
|
|
|
# enable cgo to build sqlite
|
|
ENV CGO_ENABLED 1
|
|
|
|
# install database clients
|
|
RUN apt-get update \
|
|
&& apt-get install -qq --no-install-recommends \
|
|
curl \
|
|
mysql-client \
|
|
postgresql-client \
|
|
sqlite3 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# golangci-lint
|
|
RUN curl -fsSL -o /tmp/lint-install.sh https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh \
|
|
&& chmod +x /tmp/lint-install.sh \
|
|
&& /tmp/lint-install.sh -b /usr/local/bin v1.30.0 \
|
|
&& rm -f /tmp/lint-install.sh
|
|
|
|
# download modules
|
|
COPY go.* ./
|
|
RUN go mod download
|
|
|
|
# build
|
|
COPY . ./
|
|
RUN make build
|
|
|
|
ENTRYPOINT []
|
|
CMD ["/bin/bash"]
|
|
|
|
# runtime image
|
|
FROM scratch
|
|
COPY --from=build /src/dist/dbmate-linux-amd64 /dbmate
|
|
ENTRYPOINT ["/dbmate"]
|