1# Common builder 2ARG GO_IMAGE 3ARG BASE_IMAGE=centos:7 4FROM ${GO_IMAGE} as golang 5 6FROM ${BASE_IMAGE} as builder 7ENV GOPATH=/go 8ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin 9ENV AUTO_GOPATH 1 10COPY --from=golang /usr/local/go /usr/local/go 11COPY hack/dockerfile/install/tini.installer / 12COPY hack/dockerfile/install/proxy.installer / 13RUN yum install -y \ 14 bash \ 15 ca-certificates \ 16 cmake \ 17 gcc \ 18 git \ 19 glibc-static \ 20 libtool \ 21 make 22RUN grep "_COMMIT=" /*.installer |cut -f2- -d: > /binaries-commits 23 24# dockerd 25FROM builder as dockerd-builder 26RUN yum install -y \ 27 btrfs-progs-devel \ 28 device-mapper-devel \ 29 libseccomp-devel \ 30 selinux-policy-devel \ 31 systemd-devel 32WORKDIR /go/src/github.com/docker/docker 33COPY . /go/src/github.com/docker/docker 34ARG VERSION 35ARG GITCOMMIT 36ARG BUILDTIME 37ARG PLATFORM 38ARG PRODUCT 39ARG DEFAULT_PRODUCT_LICENSE 40ENV VERSION ${VERSION} 41ENV GITCOMMIT ${GITCOMMIT} 42ENV BUILDTIME ${BUILDTIME} 43ENV PLATFORM ${PLATFORM} 44ENV PRODUCT ${PRODUCT} 45ENV DEFAULT_PRODUCT_LICENSE ${DEFAULT_PRODUCT_LICENSE} 46# TODO The way we set the version could easily be simplified not to depend on hack/... 47RUN bash ./hack/make/.go-autogen 48RUN go build -o /dockerd \ 49 -tags 'autogen apparmor seccomp selinux journald' \ 50 -i \ 51 -buildmode=pie \ 52 -a -ldflags '-w'\ 53 github.com/docker/docker/cmd/dockerd 54 55# docker-proxy 56# TODO if libnetwork folds into the docker tree this can be combined above 57FROM builder as proxy-builder 58RUN git clone https://github.com/docker/libnetwork.git /go/src/github.com/docker/libnetwork 59WORKDIR /go/src/github.com/docker/libnetwork 60RUN . /binaries-commits && \ 61 git checkout -q "$LIBNETWORK_COMMIT" && \ 62 go build -buildmode=pie -ldflags="-w" \ 63 -o /docker-proxy \ 64 github.com/docker/libnetwork/cmd/proxy 65 66# docker-init - TODO move this out, last time we bumped was 2016! 67FROM builder as init-builder 68RUN git clone https://github.com/krallin/tini.git /tini 69WORKDIR /tini 70RUN . /binaries-commits && \ 71 git checkout -q "$TINI_COMMIT" && \ 72 cmake . && make tini-static && \ 73 cp tini-static /docker-init 74 75# Final docker image 76FROM scratch 77ARG VERSION 78ARG GITCOMMIT 79ARG BUILDTIME 80ARG PLATFORM 81ARG ENGINE_IMAGE 82COPY --from=dockerd-builder /dockerd /bin/ 83COPY --from=proxy-builder /docker-proxy /bin/ 84COPY --from=init-builder /docker-init /bin/ 85 86LABEL \ 87 org.opencontainers.image.authors="Docker Inc." \ 88 org.opencontainers.image.created="${BUILDTIME}" \ 89 org.opencontainers.image.documentation="https://docs.docker.com/" \ 90 org.opencontainers.image.licenses="Apache-2.0" \ 91 org.opencontainers.image.revision="${GITCOMMIT}" \ 92 org.opencontainers.image.url="https://www.docker.com/products/docker-engine" \ 93 org.opencontainers.image.vendor="Docker Inc." \ 94 org.opencontainers.image.version="${VERSION}" \ 95 com.docker.distribution_based_engine="{\"platform\":\"${PLATFORM}\",\"engine_image\":\"${ENGINE_IMAGE}\",\"containerd_min_version\":\"1.2.0-beta.1\",\"runtime\":\"host_install\"}" 96 97ENTRYPOINT ["/bin/dockerd"] 98