Run AiiDA via a Docker image#
The AiiDA team maintains a Docker image on Docker Hub. This image contains a fully pre-configured AiiDA environment which makes it particularly useful for learning and testing purposes.
All data stored in a container will persist only over the lifetime of that particular container unless you use volumes (see instructions below).
First, pull the image:
$ docker pull aiidateam/aiida-core:latest
Then start the container with:
$ docker run -d --name aiida-container aiidateam/aiida-core:latest
You can use the following command to block until all services have started up:
$ docker exec -t aiida-container wait-for-services
The default profile is created under the
aiida user, so to execute commands you must add the
--user aiida option.
For example, to check the verdi status, execute:
$ docker exec -t --user aiida aiida-container /bin/bash -l -c 'verdi status' ✓ config dir: /home/aiida/.aiida ✓ profile: On profile default ✓ repository: /home/aiida/.aiida/repository/default ✓ postgres: Connected as aiida_qs_aiida_477d3dfc78a2042156110cb00ae3618f@localhost:5432 ✓ rabbitmq: Connected as amqp://127.0.0.1?heartbeat=600 ✓ daemon: Daemon is running as PID 1795 since 2020-05-20 02:54:00
To “enter” the container and run commands directly in the shell, use:
$ docker exec -it --user aiida aiida-container /bin/bash
This will drop you into the shell within the container as the user “aiida”.
If you stop the container and start it again, any data you created will persist.
$ docker stop aiida-container $ docker start aiida-container
However, if you remove the container, all data will be removed as well.
$ docker stop aiida-container $ docker rm aiida-container
The preferred way to persistently store data is to create a volume. To create a simple volume, run:
$ docker volume create my-data
Then make sure to mount that volume when running the aiida container:
$ docker run -d --name aiida-container --mount source=my-data,target=/tmp/my_data aiidateam/aiida-core:latest
Starting the container with the above command, ensures that any data stored in the
/tmp/my_data path within the container is stored in the
my-data volume and therefore persists even if the container is removed.