GUACAMOLE-409: Merge support for building/hosting the Guacamole manual using Docker.
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..fd35d91
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,4 @@
+.git/
+book/
+html/
+docbook-xsl
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..7390cc2
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,75 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+#
+# Dockerfile for guacamole-manual
+# 
+# See the README for more information on how to use this file.
+
+# Set this build arg to any of the available version labels for the httpd image
+ARG HTTPD_VERSION=2.4
+
+# Perform the build itself on a Debian base
+FROM debian:stretch AS builder
+
+# Set the path for docbook, as required by the Makefile
+ENV DOCBOOK_PATH=/usr/share/sgml/docbook/stylesheet/xsl/docbook-xsl/
+
+# Install build dependencies
+RUN \
+  apt-get update && \
+  apt-get install -y make xsltproc fop docbook-xsl
+
+# Make the directory structure that will be produced by the build so that
+# directories will exist regardless of which target is selected. This ensures
+# that the COPY commands in the second stage of the build will succeed even
+# if the target selected does not include all build variants.
+#  
+# This RUN is a separate command from the previous RUN command, so that changes 
+# to the build structure that might result in the need to change the directories 
+# created here will not invalidate the build cache from the preceding command 
+# that installs dependences (which is a time consuming step).
+#
+RUN \
+  mkdir -p /manual/html && \
+  mkdir -p /manual/book
+
+# Set the working directory for the remainder of the build process
+WORKDIR /manual
+
+# Default build target for the make
+#
+# It might be tempting to move this command to the top of the Dockerfile,
+# but by doing so, any time a different target is selected, the build cache 
+# for the layer that installs all build dependencies will be invalidated.
+#
+ARG TARGET=html
+
+# Copy the manual source into the working directory and build it
+COPY ./ ./
+RUN make ${TARGET}
+
+# For the runtime image, use the official Apache httpd image
+FROM httpd:${HTTPD_VERSION}
+
+# Copy any HTML generated by the build into httpd's document root
+COPY --from=builder /manual/html/ /usr/local/apache2/htdocs/
+
+# Copy any PDF generated by the build into http's document root
+COPY --from=builder /manual/book/ /usr/local/apache2/htdocs/
diff --git a/README b/README
index 9d80b41..0bac7c1 100644
--- a/README
+++ b/README
@@ -83,6 +83,51 @@
 
 
 ------------------------------------------------------------
+ Building and viewing the manual using Docker
+------------------------------------------------------------
+
+The guacamole-manual package includes a Dockerfile that can be used to build 
+an Apache httpd Docker image that contains the Guacamole user manual.
+
+By building and running the resulting container, a developer can work on the 
+user manual without the need to install docbook and related dependencies on 
+his/her workstation. The resulting container can also be used to serve the 
+manual to Guacamole users on a network.
+
+Docker CE version 1.6 or later is required to build the image.
+
+Build the Guacamole manual container image by running the following command in
+the directory that contains this Dockerfile:
+
+    $ docker image build -t guacamole/manual .
+
+Run the resulting container using the following command:
+
+    $ docker container run -p 8080:80 guacamole/manual
+
+You'll see some startup messages from Apache httpd on your terminal when you 
+start up the container. Once the container is running you can then view the 
+HTML version of the manual by accessing http://localhost:8080 using your web 
+browser.
+
+If another process on the host is already using port 8080, you will need to 
+change the corresponding argument in the command used to start the container.
+
+As a developer working on the documentation, it will be necessary to stop the
+container and run the build again each time you wish to see changes you've 
+made to the documentation source.
+
+By default, the container image will contain only the HTML variant of the 
+Guacamole user manual. If you also wish to serve the PDF variant, use the 
+following command to build container image
+
+    $ docker image build --build-arg TARGET=all -t guacamole/manual .
+
+You can view the PDF variant of the manual by accessing 
+http://localhost:8080/gug.pdf using your web browser.
+
+
+------------------------------------------------------------
  Reporting problems
 ------------------------------------------------------------