mirror of https://github.com/docker/docs.git
92 lines
3.5 KiB
Docker
92 lines
3.5 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 the build
|
|
# 2. Fetch upstream resources
|
|
# 3. Build static HTML from master
|
|
# 4. Reset to clean tiny nginx image
|
|
# 5. Copy Nginx config and archive HTML, which don't change often and can be cached
|
|
# 6. Copy static HTML from previous build stage (step 3)
|
|
#
|
|
# When the image is run, it starts Nginx and serves the docs at port 4000
|
|
|
|
# Get basic configs and Jekyll env
|
|
FROM docs/docker.github.io:docs-builder AS builder
|
|
|
|
# Set the target again
|
|
ENV TARGET=/usr/share/nginx/html
|
|
|
|
# Set the source directory to md_source
|
|
ENV SOURCE=md_source
|
|
|
|
# Get the current docs from the checked out branch
|
|
# ${SOURCE} will contain a directory for each archive
|
|
COPY . ${SOURCE}
|
|
|
|
####### START UPSTREAM RESOURCES ########
|
|
# 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'
|
|
|
|
# Engine
|
|
ENV ENGINE_SVN_BRANCH="branches/17.09.x"
|
|
ENV ENGINE_BRANCH="17.09.x"
|
|
|
|
# Distribution
|
|
ENV DISTRIBUTION_SVN_BRANCH="branches/release/2.6"
|
|
ENV DISTRIBUTION_BRANCH="release/2.6"
|
|
|
|
# Fetch upstream resources
|
|
RUN bash ./${SOURCE}/_scripts/fetch-upstream-resources.sh ${SOURCE}
|
|
####### END UPSTREAM RESOURCES ########
|
|
|
|
|
|
# Build the static HTML, now that everything is in place
|
|
|
|
RUN jekyll build -s ${SOURCE} -d ${TARGET} --config ${SOURCE}/_config.yml
|
|
|
|
# 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
|
|
|
|
# BUILD OF MASTER DOCS IS NOW DONE!
|
|
|
|
# Reset to alpine so we don't get any docs source or extra apps
|
|
FROM nginx:alpine
|
|
|
|
# Set the target again
|
|
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
|
|
|
|
# Get all the archive static HTML and put it into place
|
|
# Go oldest-to-newest to take advantage of the fact that we change older
|
|
# archives less often than new ones.
|
|
# 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:v1.4 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v1.5 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v1.6 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v1.7 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v1.8 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v1.9 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v1.10 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v1.11 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v1.12 ${TARGET} ${TARGET}
|
|
COPY --from=docs/docker.github.io:v1.13 ${TARGET} ${TARGET}
|
|
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}
|
|
|
|
# Get the built docs output from the previous build stage
|
|
# This ordering means all previous layers can come from cache unless an archive
|
|
# changes
|
|
|
|
COPY --from=builder ${TARGET} ${TARGET}
|
|
|
|
# Serve the site (target), which is now all static HTML
|
|
CMD echo -e "Docker docs are viewable at:\nhttp://0.0.0.0:4000"; exec nginx -g 'daemon off;'
|