The render web services can be built and deployed within Docker. You'll need to first install Docker for your OS.
To build the full janelia-render:latest-ws image:
# cd to root directory of render repo (where Dockerfile is located)
docker build -t janelia-render:latest-ws --target render-ws .
# To help debug image build issues, you can use the EXTRA_JETTY_PACKAGES arg
# to add packages to the image.
--build-arg EXTRA_JETTY_PACKAGES=vim
You can speed up future builds by building and tagging the build environment:
# cd to root directory of render repo (where Dockerfile is located)
docker build -t janelia-render:latest-build-environment --target build_environment .
all compiled artifacts and dependencies:
# cd to root directory of render repo (where Dockerfile is located)
docker build -t janelia-render:latest-builder --target builder .
or a slimmed down image of just the Jetty server and the compiled render web services:
# cd to root directory of render repo (where Dockerfile is located)
# saves JAR and WAR files in /root/render-lib
docker build -t janelia-render:latest-archive --target archive .
To run the full render-ws image:
# with database running on same host at default port and no authentication
docker run -p 8080:8080 -e "MONGO_HOST=localhost" --rm janelia-render:latest-ws
# with customized environment variables in a file (named dev.env)
docker run -p 8080:8080 --env-file dev.env --rm janelia-render:latest-ws
You must explicitly specify either the MONGO_HOST or MONGO_CONNECTION_STRING environment variables when running a container based upon the full render-ws image.
The full render-ws image supports the following set of environment variables (specified values are defaults):
# ---------------------------------
# Docker Environment Variables File
#
# NOTE: don't use quotes around values - details here:
# https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file
# ---------------------------------
# Database Connection Parameters
# if a connection string is specified, other mongo connection variables are ignored
# format details are here: https://docs.mongodb.com/manual/reference/connection-string
# example: mongodb://<user>:<password>@replRender/render-mongodb2.int.janelia.org,render-mongodb3.int.janelia.org/admin
MONGO_CONNECTION_STRING=
# should be 'y' if you are using a connection string that includes username and password
MONGO_CONNECTION_STRING_USES_AUTH=n
MONGO_HOST=
MONGO_PORT=
# if authentication is not needed (or you are using a connection string), leave these empty
MONGO_USERNAME=
MONGO_PASSWORD=
MONGO_AUTH_DB=
# ---------------------------------
# Web Service JVM Parameters
JAVA_OPTIONS=-Xms3g -Xmx3g -server -Djava.awt.headless=true
# ---------------------------------
# Web Service Threadpool Parameters (leave these alone unless you really know what you are doing)
JETTY_THREADPOOL_MIN_THREADS=10
JETTY_THREADPOOL_MAX_THREADS=200
# ---------------------------------
# Web Service Logging Parameters
# appender options are 'STDOUT', 'FILE', or 'NONE'
LOG_ACCESS_ROOT_APPENDER=STDOUT
LOG_JETTY_ROOT_APPENDER=STDOUT
# log level options are: 'OFF', 'ERROR', 'WARN', 'INFO', 'DEBUG', or 'TRACE'
LOG_JETTY_ROOT_LEVEL=WARN
LOG_JETTY_JANELIA_LEVEL=WARN
# ---------------------------------
# Web Service Rendering Parameters
# use this to improve dynamic rendering speed for zoomed-out views,
# views that contain more than this number of tiles will have bounding boxes rendered instead of actual tile content
WEB_SERVICE_MAX_TILE_SPECS_TO_RENDER=20
# if left empty, the image processor cache will be sized at half of the memory allocated to the JVM
WEB_SERVICE_MAX_IMAGE_PROCESSOR_GB=
# ---------------------------------
# Viewing Tools Parameters
NDVIZHOST=
NDVIZPORT=
# use the url parameter if you need https (overrides host and port parameters)
NDVIZ_URL=
# specify without protocol (assumes http) like: 'renderer-catmaid:8080'
VIEW_CATMAID_HOST_AND_PORT=
VIEW_DYNAMIC_RENDER_HOST_AND_PORT=
VIEW_RENDER_STACK_OWNER=
VIEW_RENDER_STACK_PROJECT=
VIEW_RENDER_STACK=
VIEW_MATCH_OWNER=
VIEW_MATCH_COLLECTION=
The following entrypoints are provided:
- /render-docker/render-run-jetty-entrypoint.sh (default)
- /render-docker/render-export-jetty-entrypoint.sh
If you'd like to run the render-ws application on an external jetty server (outside of Docker), you can use /render-docker/render-export-jetty-entrypoint.sh to configure a container within Docker and then export the configured JETTY_BASE to a mounted volume for external use.
# export files to <working-directory>/jetty_base_<run-time> (change or drop --env-file as needed)
docker run -it --mount type=bind,source="$(pwd)",target=/render-export \
--env-file ./env.janelia.prod \
--entrypoint /render-docker/render-export-jetty-entrypoint.sh \
--rm \
janelia-render:latest-ws
To open a Bourne shell on the latest running render-ws container:
docker exec -it $(docker ps --latest --quiet) /bin/sh
To open a Bourne shell on a new render-ws container without running jetty (and remove the container on exit):
docker run -it --entrypoint /bin/sh --rm janelia-render:latest-ws
To remove all stopped containers:
docker rm $(docker ps --all --quiet)
To remove all untagged (<none>) images (including the large build artifacts image if you did not tag it):
docker image rm $(docker images --filter "dangling=true" -q --no-trunc)