mirror of https://github.com/docker/docs.git
103 lines
3.8 KiB
Docker
103 lines
3.8 KiB
Docker
# This Dockerfile builds the docs for https://docs.docker.com/
|
|
# from the master branch of https://github.com/docker/docker.github.io
|
|
#
|
|
# Here is the sequence:
|
|
# 1. Set up base stages for building and deploying
|
|
# 2. Collect and build the archived documentation
|
|
# 3. Collect and build the reference documentation (from upstream resources)
|
|
# 4. Build static HTML from the current branch
|
|
# 5. Build the final image, combining the archives, reference docs, and
|
|
# current version of the documentation
|
|
#
|
|
# When the image is run, it starts Nginx and serves the docs at port 4000
|
|
|
|
|
|
# Engine
|
|
ARG ENGINE_BRANCH="19.03.x"
|
|
|
|
# Distribution
|
|
ARG DISTRIBUTION_BRANCH="release/2.6"
|
|
|
|
|
|
###
|
|
# Set up base stages for building and deploying
|
|
###
|
|
|
|
# Get basic configs and Jekyll env
|
|
FROM docs/docker.github.io:docs-builder AS builderbase
|
|
ENV TARGET=/usr/share/nginx/html
|
|
WORKDIR /usr/src/app/md_source/
|
|
|
|
# Set vars used by fetch-upstream-resources.sh script
|
|
# Branch to pull from, per ref doc. To get master from svn the svn branch needs
|
|
# to be 'trunk'. To get a branch from svn it needs to be 'branches/branchname'
|
|
ARG ENGINE_BRANCH
|
|
ENV ENGINE_BRANCH=${ENGINE_BRANCH}
|
|
ENV ENGINE_SVN_BRANCH=branches/${ENGINE_BRANCH}
|
|
|
|
ARG DISTRIBUTION_BRANCH
|
|
ENV DISTRIBUTION_BRANCH=${DISTRIBUTION_BRANCH}
|
|
ENV DISTRIBUTION_SVN_BRANCH=branches/${DISTRIBUTION_BRANCH}
|
|
|
|
|
|
# Reset to alpine so we don't get any docs source or extra apps
|
|
FROM nginx:alpine AS deploybase
|
|
ENV TARGET=/usr/share/nginx/html
|
|
|
|
# Get the nginx config from the nginx-onbuild image
|
|
# This hardly ever changes so should usually be cached
|
|
COPY --from=docs/docker.github.io:nginx-onbuild /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf
|
|
|
|
# Set the default command to serve the static HTML site
|
|
CMD echo -e "Docker docs are viewable at:\nhttp://0.0.0.0:4000"; exec nginx -g 'daemon off;'
|
|
|
|
|
|
# Build the archived docs
|
|
# these docs barely change, so can be cached
|
|
FROM deploybase AS archives
|
|
# Get all the archive static HTML and put it into place. To add a new archive,
|
|
# add it here, and ALSO edit _data/docsarchives/archives.yaml to add it to the drop-down
|
|
COPY --from=docs/docker.github.io:v17.03 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v17.06 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v17.09 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v17.12 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v18.03 ${TARGET} ${TARGET}
|
|
|
|
# Fetch library samples (documentation from official images on Docker Hub)
|
|
# Only add the files that are needed to build these reference docs, so that
|
|
# these docs are only rebuilt if changes were made to the configuration.
|
|
# @todo find a way to build HTML in this stage, and still have them included in the navigation tree
|
|
FROM builderbase AS library-samples
|
|
COPY ./_scripts/fetch-library-samples.sh ./_scripts/
|
|
COPY ./_samples/boilerplate.txt ./_samples/
|
|
RUN bash ./_scripts/fetch-library-samples.sh
|
|
|
|
# Fetch upstream resources (reference documentation)
|
|
# Only add the files that are needed to build these reference docs, so that
|
|
# these docs are only rebuilt if changes were made to the configuration.
|
|
FROM builderbase AS upstream-resources
|
|
COPY ./_scripts/fetch-upstream-resources.sh ./_scripts/
|
|
COPY ./_config.yml .
|
|
COPY ./_data/toc.yaml ./_data/
|
|
RUN bash ./_scripts/fetch-upstream-resources.sh .
|
|
|
|
|
|
# Build the current docs from the checked out branch
|
|
FROM builderbase AS current
|
|
COPY . .
|
|
COPY --from=library-samples /usr/src/app/md_source/. ./
|
|
COPY --from=upstream-resources /usr/src/app/md_source/. ./
|
|
|
|
# Build the static HTML, now that everything is in place
|
|
RUN jekyll build -d ${TARGET}
|
|
|
|
# Fix up some links, don't touch the archives
|
|
RUN find ${TARGET} -type f -name '*.html' | grep -vE "v[0-9]+\." | while read i; do sed -i 's#href="https://docs.docker.com/#href="/#g' "$i"; done
|
|
|
|
|
|
# Docs with archives (for deploy)
|
|
FROM archives AS deploy
|
|
|
|
# Add the current version of the docs
|
|
COPY --from=current ${TARGET} ${TARGET}
|