Merge pull request #2 from mshuler/docker-as-user

Run container build steps as non-root user
diff --git a/Dockerfile b/Dockerfile
index 99c312f..8ddb50d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,18 @@
 FROM debian:stretch
 
+# Set up non-root user, 'build', with default uid:gid
+# This allows passing --build-arg to use local host user's uid:gid:
+#   $ docker-compose build \
+#     --build-arg UID=$(id -u) \
+#     --build-arg GID=$(id -g) \
+#     cassandra-website
+ARG UID=1000
+ARG GID=1000
+RUN echo "Setting up user 'build' with UID=${UID} GID=${GID}"
+RUN groupadd --gid $GID --non-unique build
+RUN useradd --create-home --shell /bin/bash \
+    --uid $UID --gid $GID --non-unique build
+
 # Install tools
 RUN apt-get update && \
     apt-get install -y \
@@ -26,16 +39,18 @@
     bundle install && \
     rm /Gemfile /Gemfile.lock
 
-ENV CASSANDRA_DIR="/usr/src/cassandra"
+# Run as build user from here
+USER build
+
+ENV CASSANDRA_DIR="/home/build/cassandra"
 
 # Setup repositories to building the docs
-RUN mkdir -p /usr/src/cassandra-site && \
+RUN mkdir -p /home/build/cassandra-site && \
     git clone https://gitbox.apache.org/repos/asf/cassandra.git ${CASSANDRA_DIR}
 
 EXPOSE 4000/tcp
 
-COPY docker-entrypoint.sh /
-RUN chmod +x /docker-entrypoint.sh
-ENTRYPOINT ["/docker-entrypoint.sh"]
+COPY docker-entrypoint.sh /home/build/
+ENTRYPOINT ["/home/build/docker-entrypoint.sh"]
 
 CMD [""]
diff --git a/README.md b/README.md
index cc9b5ea..5ef42ed 100644
--- a/README.md
+++ b/README.md
@@ -27,6 +27,13 @@
 $ docker-compose run cassandra-website
 ```
 
+:warning: *Tip:* In order to prevent root-owned modified files in your repository, the container user, `build`, is set up with a default UID=1000:GID=1000, which is usually the first user configured on a linux machine. If your local user is different you should set up the container user with your local host user's UID:GID, replace the above with:
+
+```bash
+$ docker-compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g) cassandra-website
+$ docker-compose run cassandra-website
+```
+
 Go make yourself a cup of coffee, this will take a while...
 
 Once building has completed, the site content will be in the `./cassandra-website/content` directory ready to be committed.
diff --git a/docker-compose.yml b/docker-compose.yml
index 0729142..5d4f546 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -4,20 +4,22 @@
   cassandra-website:
     build: .
     image: cassandra-website:latest
+    user: build
     volumes:
-      - ./src:/usr/src/cassandra-site/src
-      - ./content:/usr/src/cassandra-site/publish
+      - ./src:/home/build/cassandra-site/src
+      - ./content:/home/build/cassandra-site/publish
 
   cassandra-website-serve:
     build: .
     image: cassandra-website:latest
-    entrypoint: /docker-entrypoint-jekyll-serve.sh
+    user: build
+    entrypoint: /home/build/docker-entrypoint-jekyll-serve.sh
     ports:
       - 4000:4000
     volumes:
-      - ./src:/usr/src/cassandra-site/src
-      - ./content:/usr/src/cassandra-site/publish
-      - ./docker-entrypoint-jekyll-serve.sh:/docker-entrypoint-jekyll-serve.sh
+      - ./src:/home/build/cassandra-site/src
+      - ./content:/home/build/cassandra-site/publish
+      - ./docker-entrypoint-jekyll-serve.sh:/home/build/docker-entrypoint-jekyll-serve.sh
 
   preview:
     image: nginx
@@ -27,5 +29,3 @@
       - "./content:/usr/share/nginx/html"
     command: [nginx-debug, '-g', 'daemon off;']
 
-
-
diff --git a/docker-entrypoint-jekyll-serve.sh b/docker-entrypoint-jekyll-serve.sh
index 21a8f10..b34b927 100755
--- a/docker-entrypoint-jekyll-serve.sh
+++ b/docker-entrypoint-jekyll-serve.sh
@@ -2,6 +2,8 @@
 
 set -e
 
+export CASSANDRA_SITE_DIR="/home/build/cassandra-site"
+
 GREEN='\033[1;32m'
 YELLOW='\033[0;33m'
 NC='\033[0m' # No Color
@@ -10,11 +12,11 @@
 # version in the publish directory
 while [ 1 ]
 do
-    sed -i 's/\.\/\.\.\//\.\/\.\.\/\.\.\//g' /usr/src/cassandra-site/publish/doc/*/index.html
+    sed -i 's/\.\/\.\.\//\.\/\.\.\/\.\.\//g' ${CASSANDRA_SITE_DIR}/publish/doc/*/index.html
     sleep 5
 done &
 
-cd /usr/src/cassandra-site/src
+cd ${CASSANDRA_SITE_DIR}/src
 
 JEKYLL_COMMAND="jekyll serve --host 0.0.0.0"
 
diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh
index d729f46..578804c 100755
--- a/docker-entrypoint.sh
+++ b/docker-entrypoint.sh
@@ -2,7 +2,7 @@
 
 set -xe
 
-export CASSANDRA_SITE_DIR="/usr/src/cassandra-site"
+export CASSANDRA_SITE_DIR="/home/build/cassandra-site"
 
 jekyll --version