diff --git a/Dockerfile b/Dockerfile index 9f10bcd80045efad9dedf20db38f7170e3a8dd64..513c56e3e5546514b8d0a9b66a953b3ebe80ebc3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,15 +3,18 @@ # Source material: https://derickbailey.com/2017/05/31/how-a-650mb-node-js-image-for-docker-uses-less-space-than-a-50mb-image/ # Source material: https://hub.docker.com/_/node/ + +### Builder Stage (Multi-Stage Docker Build) # Use the slimed NodeJS source, yielding a space savings of 600MB (~66% of total) -FROM node:alpine +FROM node:alpine as builder +ENV NODEROOT /usr/src/app/ # Create app directory -WORKDIR /usr/src/app +WORKDIR $NODEROOT # Install app dependencies -# A wildcard is used to ensure both package.json AND package-lock.json AND tslint.json AND tsconfig.json are copied -# where available (npm@5+) +# A wildcard is used to ensure the following are copied +# package.json AND package-lock.json AND tslint.json AND tsconfig.json are copied where available (npm@5+) COPY *.json ./ # Install all dependencies and copy results @@ -21,17 +24,16 @@ COPY . . # Build library and canvas application then copy results RUN npm run build RUN npm run build-canvas -COPY build/canvas/ build/canvas/ - -# Open ports for HTTP -EXPOSE 8080/tcp +COPY . . -# Setup standalone simple webserver to run the demo -RUN npm install http-server -g +### Runtime Stage (Multi-Stage Docker Build) +FROM httpd:2.4 as runtime +ENV NODEROOT /usr/src/app +ENV HTTPDROOT /usr/local/apache2/htdocs/ -# Start NodeJS at container stand up -CMD [ "http-server", "build/canvas/", "-p", "8080" ] +## Code must be placed into /usr/local/apache2/htdocs/ +WORKDIR $HTTPDROOT +COPY --from=builder $NODEROOT/build/canvas/ . -# Developer helpers (what is inside this container?) -RUN node -v -RUN ls -alh +# Open ports for HTTP +EXPOSE 80 diff --git a/README.md b/README.md index dde6fcb355b95f304ca7a3e1635e5a69eb83aa57..6544cb77d7cdc4517cbac92842c2c3452093d095 100644 --- a/README.md +++ b/README.md @@ -83,11 +83,11 @@ and navigate to `build/viewer` Build the docker image - docker build -t molstar-proto . + docker build -t molstar/proto:httpd . Run the image - docker run -p 8080:8080 molstar-proto + docker run -d -p 80:80 molstar/proto:httpd