Permalink
Cannot retrieve contributors at this time
93 lines (71 sloc)
3.36 KB
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # 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.7" | |
| ### | |
| # 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} | |
| COPY --from=docs/docker.github.io:v18.09 ${TARGET} ${TARGET} | |
| # 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=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} |