diff --git a/README.md b/README.md index c01d4d8aad..832fafa76b 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,8 @@ provided at the download links. You will need the Python 3.6 version. To install Devito, including examples, tests and tutorial notebooks, follow these simple passes: -``` + +```sh git clone https://github.com/opesci/devito.git cd devito conda env create -f environment.yml @@ -39,6 +40,21 @@ source activate devito pip install -e . ``` +Alternatively, you can also install and run Devito via +[Docker](https://www.docker.com/): + +```sh +# get the code +git clone https://github.com/opesci/devito.git +cd devito + +# run the tests +docker-compose run devito /tests + +# start a jupyter notebook server on port 8888 +docker-compose up devito +``` + ## Examples At the core of the Devito API are the so-called `Operator` objects, which @@ -80,11 +96,18 @@ Thread parallel execution via OpenMP can also be enabled by setting For the full list of available environment variables and their possible values, simply run: -``` + +```py from devito import print_defaults print_defaults() ``` +Or with Docker, run: + +```sh +docker-compose run devito /print-defaults +``` + ## Performance optimizations Devito supports two classes of performance optimizations, which are essential diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000000..af958f6ef8 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +version: '2' + +services: + + devito: + + build: + context: . + dockerfile: docker/Dockerfile + + environment: + DEVITO_ARCH: gcc-4.9 + DEVITO_OPENMP: 0 + + volumes: + - ./devito:/app/devito + - ./tests:/app/tests + - ./examples:/app/examples + + ports: + - 8888:8888 diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000000..6341419358 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,32 @@ +FROM python:3.6 + +ADD ./requirements.txt /app/requirements.txt + +RUN python3 -m venv /venv && \ + /venv/bin/pip install --no-cache-dir --upgrade pip && \ + /venv/bin/pip install --no-cache-dir jupyter && \ + /venv/bin/pip install --no-cache-dir -r /app/requirements.txt + +ADD ./devito /app/devito +ADD ./tests /app/tests +ADD ./examples /app/examples + +ADD docker/run-jupyter.sh /jupyter +ADD docker/run-tests.sh /tests +ADD docker/run-print-defaults.sh /print-defaults +ADD docker/entrypoint.sh /docker-entrypoint.sh + +RUN chmod +x \ + /print-defaults \ + /jupyter \ + /tests \ + /docker-entrypoint.sh + +WORKDIR /app + +ENV DEVITO_ARCH="gcc-4.9" +ENV DEVITO_OPENMP="0" + +EXPOSE 8888 +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["/jupyter"] diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100644 index 0000000000..51eddd40f5 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +find /app -type f -name '*.pyc' -delete + +exec "$@" diff --git a/docker/run-jupyter.sh b/docker/run-jupyter.sh new file mode 100644 index 0000000000..ebb76d2aaa --- /dev/null +++ b/docker/run-jupyter.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +PYTHONPATH=/app /venv/bin/jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root diff --git a/docker/run-print-defaults.sh b/docker/run-print-defaults.sh new file mode 100644 index 0000000000..0a47289150 --- /dev/null +++ b/docker/run-print-defaults.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +PYTHONPATH=/app /venv/bin/python -c " +from devito import print_defaults; +print_defaults(); +" diff --git a/docker/run-tests.sh b/docker/run-tests.sh new file mode 100644 index 0000000000..6b6c2cea42 --- /dev/null +++ b/docker/run-tests.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +PYTHONPATH=/app /venv/bin/python -m pytest tests/