diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..cd6fde9 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,10 @@ +sudo: required +services: + - docker + +env: + - JAVA_VERSION=openjdk-8 + +script: + - docker build -t fiji-$JAVA_VERSION fiji-$JAVA_VERSION + - docker run --rm fiji-$JAVA_VERSION --ij2 --console --run ./demo.py 'name="travis"' diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..07a8cbe --- /dev/null +++ b/Makefile @@ -0,0 +1,41 @@ +today = $(shell date +%Y%m%d) + +latest = fiji-openjdk-8 + +images = \ +$(latest) \ +fiji-openjdk-7 + +## Currently broken: +## - fiji-oracle-jdk6 +## - fiji-openjdk-6 +## - fiji-oracle-jdk7 +## Propose removal + +## Must be built on special hardware: +## - fiji-oracle-jdk8-arm32v7 + +all : build + +update : + @for image in $(images); do (cd $${image}; grep FROM Dockerfile | cut -f2 -d" " | xargs docker pull); done + +build: $(images) + +$(images) : %: + cd $@ && docker build -t fiji/fiji:$@ . + +release : + for f in $(images); do docker tag fiji/fiji:$${f} fiji/fiji:$${f}.$(today); done + for f in $(images); do docker push fiji/fiji:$${f}.$(today); done + for f in $(images); do docker push fiji/fiji:$${f}; done + docker tag fiji/fiji:$(latest) fiji/fiji:latest; + docker tag fiji/fiji:$(latest) fiji/fiji:$(today); + docker push fiji/fiji:latest; + docker push fiji/fiji:$(today); + +clean : + @for image in $(images); do echo docker rmi fiji/fiji:$${image}; done + docker rmi fiji/fiji:latest + +.PHONY: all update build release clean $(images) diff --git a/fiji-openjdk-8/Dockerfile b/fiji-openjdk-8/Dockerfile index f5a0779..52d95d4 100644 --- a/fiji-openjdk-8/Dockerfile +++ b/fiji-openjdk-8/Dockerfile @@ -6,18 +6,28 @@ FROM openjdk:8 # Define maintainer. -MAINTAINER Mark Hiner +LABEL maintainer="https://gitter.im/fiji/fiji" + +# Create a user. +RUN useradd -u 1000 -ms /bin/bash fiji +RUN mkdir /opt/fiji && chown fiji:fiji /opt/fiji +USER fiji # Define working directory. -WORKDIR /fiji +WORKDIR /opt/fiji # Install Fiji. -RUN \ - curl -O https://update.imagej.net/bootstrap.js && \ - jrunscript bootstrap.js update-force-pristine +RUN wget -q https://downloads.imagej.net/fiji/latest/fiji-nojre.zip \ + && unzip fiji-nojre.zip \ + && rm fiji-nojre.zip # Add fiji to the PATH -ENV PATH $PATH:/fiji +ENV PATH $PATH:/opt/fiji/Fiji.app + +# Define entrypoint. +COPY --chown=fiji:fiji entrypoint.sh /opt/fiji +ENTRYPOINT ["./entrypoint.sh"] -# Define default command. -CMD ["fiji-linux64"] +# Run once to create Java preferences. +COPY --chown=fiji:fiji demo.py /opt/fiji/ +RUN ./entrypoint.sh --headless --ij2 --console --run ./demo.py 'name="test"' diff --git a/fiji-openjdk-8/demo.py b/fiji-openjdk-8/demo.py new file mode 100644 index 0000000..538e811 --- /dev/null +++ b/fiji-openjdk-8/demo.py @@ -0,0 +1,2 @@ +#@String name +print('Hello ' + name) diff --git a/fiji-openjdk-8/entrypoint.sh b/fiji-openjdk-8/entrypoint.sh new file mode 100755 index 0000000..b40f22b --- /dev/null +++ b/fiji-openjdk-8/entrypoint.sh @@ -0,0 +1,44 @@ +#!/bin/bash +# +# Entrypoint for the docker image which tries to do +# the most sensible thing for the user: +# +# (A) If no arguments are passed, print help: +# $ docker run fiji +# +# (B) If no arguments are passed but a ternimal is requested, open a shell: +# $ docker run -ti fiji +# +# (C) Otherwise, assume arguments are to be passed to ImageJ-linux64: +# $ docker run fiji --console --run /my/script.py +# +# (D) Unless, the command starts with an executable, in which case run it: +# $ docker run fiji ImageJ-linux64 --console --run /my/script.py + +# Command run by default +IMAGEJ=${IMAGEJ:-"ImageJ-linux64 --headless --default-gc"} + +# For debugging purposes +RUN=${RUN:-exec} + +set -e + +if [[ $# -eq 0 ]] ; then + if [ -t 0 ] ; then + # (B) start a shell + $RUN bash + else + # (A) print help and exit + $RUN $IMAGEJ --help + fi +else + COMMAND=$1 + if command -v "$COMMAND" >/dev/null 2>&1; then + # (D) if the user has passed e.g. ImageJ-linux64, + # then run it verbatim for backwards compatibility + $RUN "$@" + else + # (C) Expected usage + $RUN $IMAGEJ "$@" + fi +fi