Run fidimag inside a Docker Container¶
Setup Docker¶
Install Docker, follow instructions at https://www.docker.com/products/docker
Setup fidimag docker container with Jupyter Notebook¶
Pull the fidimag notebook container:
docker pull fidimag/notebook
Start Notebook on container¶
docker run -p 30000:8888 fidimag/notebook
This command starts a Jupyter Notebook in which `fidimag <>`__ can be used. The Jupyter notebook inside the container is listening on port 8888.
The parameter -p 30000:8888
says that the port 8888 inside the
container is exposed on the host system as port 30000.
On a Linux host machine, you can connect to http://localhost:30000
to see the notebook.
On a Mac, you need to find out the right IP address to which to connect. The information is provided by
docker-machine ip
For example, if docker-machine ip
returns 192.168.99.100
, then
the right URL to paste into the browser on the host system is
http://192.168.99.100:30000
.
[How does this work on Windows? Pull requests welcome.]
Detach the docker image (to run in the background)¶
You can add the -d
switch to the docker run
command to detach
the process:
docker run -d -p 30000:8888 fidimag/notebook
Show active Docker containers¶
docker ps
lists all running containers.
To only show the id
s, we can use
docker ps -q
To only show the containers that was last started, we can use the -l
flag:
docker ps -l
Stop a docker container¶
To stop the last container started, we can use the docker stop ID
command, where we need to find the ID
first. We can do this using
docker ps -l -q
. Putting the commands together, we have
docker stop $(docker ps -l -q)
to stop the last container we started.
Explore the docker container / run Fidimag from (I)Python¶
We can start the docker container with the -ti
switch, and we can
provide bash
as the command to execute:
docker run -ti fidimag/notebook bash
A bash prompt appears (and we are now inside the container):
jovyan@4df962d27520:~/work$
and can start Python inside the container, and import fidimag:
jovyan@4df962d27520:~/work$ python
Python 3.5.1 |Continuum Analytics, Inc.| (default, Jun 15 2016, 15:32:45)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import fidimag
We could also start IPython:
jovyan@4df962d27520:~/work$ ipython
Python 3.5.1 |Continuum Analytics, Inc.| (default, Jun 15 2016, 15:32:45)
Type "copyright", "credits" or "license" for more information.
IPython 4.2.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]:
[The switch -t
stands for Allocate a pseudo-TTY
and -i
for
Keep STDIN open even if not attached
.]
Mount the local file system to exchange files and data with container¶
Often, we may have a fidimag Python script run.py
we want to execute
in our current working directory in the host machine. We want output
files from that command to be written to the same working directory on
the host machine.
We can use the container like this to achieve that:
docker run -v `pwd`:/io -ti fidimag/notebook python run.py
The -v `pwd`:/io
tells the docker container to take the current
working directory on the host (`pwd`
) and mount it to the path
/io
on the container. The container is set up so that the default
working directory is /io
.
Here is an example file run.py
that reads
import fidimag # to proof we can import it
print("Hello from the container")
# and write to a file
open("data.txt", "w").write("Data from the container.\n")
This can be executed with
docker run -v `pwd`:/io -ti fidimag/notebook python hello.py
and will create a data file data.txt
that is visible from the host’s
working directory.
Explore Jupyter notebook examples with the Docker container¶
git clone https://github.com/computationalmodelling/fidimag.git
cd fidimag/doc/ipynb/
docker run -v `pwd`:/io -p 30000:8888 -d fidimag/notebook
Use smaller docker containers¶
Two alternative docker containers are available that provide only
Fidimag, but not the Jupyter Notebook, nor scipy. They are available
under the names fidimag/minimal-py2
and fidimag/minimal-py3
. Use
these names instead of fidimag/notebook
in the examples above.
The fidimag/minimal-py2
version uses Python2, the
fidimag/minimal-py3
version uses Python 3.