.. include:: ../../global.rst
Building Options
================
.. seealso:: `docker build `_
reference documentation |br|
(Probably a safer choice for information!)
.. _installation-build-local:
ApPredict-related Containers
----------------------------
This section refers to :
#. `appredict-no-emulators `_
#. `appredict-with-emulators `_
.. warning:: It's important to note that even when using 32 processors it can
30+ mins to build! |br|
Equally, building appredict-with-emulators uses a lot of RAM as
|ApPredict| loads files >1Gb into RAM. So better not to use all
available processors for this step.
.. note:: Within the :file:`Dockerfile`\s we have not enforced version-controlling of images or
dependencies (e.g. by specifying the base image tag with hash, or by using specific
versions of software, e.g. libhdf5-dev version *X*), as the built container represents
a unique snapshot in time. See `No version-controlling in appredict-chaste-libs Dockerfile `_.
.. note:: These instructions cover the case for building and testing |ApPredict| containers
locally, rather than for uploading to DockerHub.
::
user@host:~> mkdir tmp && cd tmp
user@host:~/tmp> git clone https://github.com/CardiacModelling/appredict-docker
user@host:~/tmp> cd appredict-docker/appredict-no-emulators
user@host:~/tmp/appredict-docker/appredict-no-emulators>
Edit the Dockerfile to a new appredict tag value
user@host:~/tmp/appredict-docker/appredict-no-emulators> docker build --build-arg build_processors= -t appredict-no-emulators: .
user@host:~/tmp/appredict-docker/appredict-no-emulators> docker run -it --rm appredict-no-emulators:
Verify below the ApPredict commit value against the commit hashes at https://github.com/Chaste/ApPredict/tags
bash-4.4$ apps/ApPredict/ApPredict 2> /dev/null | grep 'ApPredict is based on commit'
bash-4.4$ exit
user@host:~/tmp/appredict-docker/appredict-no-emulators> cd ../appredict-with-emulators
user@host:~/tmp/appredict-docker/appredict-with-emulators>
Edit the Dockerfile `FROM` clause to appredict-no-emulators:
user@host:~/tmp/appredict-docker/appredict-with-emulators> docker build --build-arg build_processors= -t appredict-with-emulators: .
|ap-nimbus-client-direct| Container
-----------------------------------
This section refers to :
#. `ap-nimbus-client-direct `_
Perhaps the most important thing to keep in mind when building a local container is to **temporarily**
modify the :file:`docker/Dockerfile` to copy the content of the local dir (which you've probably
just modified a bit for this change), e.g.
::
user@host:~> mkdir tmp && cd tmp
user@host:~/tmp> git clone https://github.com/CardiacModelling/ap-nimbus-client
user@host:~/tmp> cd ap-nimbus-client
user@host:~/tmp/ap-nimbus-client>
Edit the docker/Dockerfile to copy the local content
e.g. #RUN git clone --recursive --branch master --depth 1 https://github.com/CardiacModelling/ap-nimbus-client.git
COPY / /opt/django/ap-nimbus-client
user@host:~/tmp/ap-nimbus-client> docker build -f docker/Dockerfile -t ap-nimbus-client-direct: .
Why not use `Chaste/chaste-docker `_?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
It would be possible to use the "offical" Chaste-endorsed dependency container as a
base image to build |appredict-no-emulators|, etc., on -- and up to around 2021 we'd been
using an `Alpine Linux `_ distribution base. Now, however, we're
using the preferred Debian container to enable easy install of dependency packages.