I made a dockerized version of FEniCS (to be defined below). I would like to hear some comments and see if there is interest in adding this as yet another way of deploying FEniCS.
Docker (http://www.docker.com/) is an open source lightweight virtual machine, popular among the cloud computing community. It has many advanced features but the only thing that matters here is that it is easy, fast, and runs almost everywhere (win, mac, linux, google cloud, amazon ec2, etc, but no, not yet android~). The result is a "FEniCS-in-a-box" with the following objectives achieved: - Get FEniCS running with <5 lines of command on most computers (I get FEniCS with 3 lines on ArchLinux). - Preferrably not compiling for hours. If it has to be compiled, it is guaranteed to succeed (even on a cluster with weird toolchains). - FEniCS is properly contained in a stable environment (unaffected by things like boost, gcc updates) and can be shared between computers (for checking and comparison). - Minimal loss of performance. To test it: 1. Go to http://docs.docker.com, find out how to install docker on your system (1 line command in ArchLinux, similar for most linux distros). 2. Deploy the FEniCS 1.4 image (1 line, download ~4GB, pretty fast, no compiling) sudo docker pull lzlarryli/fenics:test 2'. Alternatively, you can build FEniCS against a minimum Ubuntu (2 lines, ~1Gb download, ~30 min compiling): wget http://www.math.umn.edu/~lixx1445/fenics_docker/Dockerfile sudo docker build -t="lzlarryli/fenics:test" . 3. Run FEniCS (1 line): sudo docker run -t -i --name fenics -v /tmp:/tmp lzlarryli/fenics:test /bin/bash The above creates a virtual machine instance based on the FEniCS image: -t means attach a terminal -i means interactive --name gives a name to the machine -v /tmp:/tmp mounts the local /tmp to the /tmp in the virtual machine so files can be shared. After running that line, you end up in the FEniCS demo directory and can go ahead and run some demos (fenics.conf is souced already). 4. Once done, run exit. It is the same as ssh into another computer. To use FEniCS again, just run sudo docker start fenics sudo docker attach fenics [ctrl+c] Clean up Remove this virtual machine instance: sudo docker rm fenics Remove the downloaded image: sudo docker rmi lzlarryli/fenics:test Uninstall docker. How is this build? It is built from a simple Dockerfile ( http://www.math.umn.edu/~lixx1445/fenics_docker/Dockerfile), which basically downloads a minimal Ubuntu (~80Mb) and then use Dorsal to compile a FEniCS in it. In fact with the same file, DockerHub (also free) can link repositories to Bitbucket, which completely automates the process of building images. DockerHub is free for binary repositoreis of arbitrary size, as long as it is public. This is one of Docker's advantage over other virtual machines, where images have to be produced by hand and hosted somewhere. Sudo? It is annoying that sudo is used all the time. This undesirable effect can be dealt with by installing sshd in the virtual machine and expose the port to the local machine (2 lines, see Docker docs). Then administrators (who not necessarily know how to compile FEniCS) can use sudo to install docker, FEniCS, and run the virtual machine as a daemon. Users can then ssh into it without sudo or anything else. The users are contained in the virtual machine, so it is safe. Performance? This is the part I was not able to test in a reasonable way. I have FEniCS 1.3 on various systems (none of them runs ubuntu) and FEniCS 1.4 on the virtual Ubuntu machine. The dockerized version runs enlarged FEniCS demo problems faster than the native on the same computer, which is ridiculous. I can only say that probably 1.4 is faster than 1.3 (good job, btw). Most modern (reads non-graduate-student-office) computers have virtualization, which makes the virtual machine performance comparable to the native one. You are welcome to test and show benchmark results. Trade-offs? Precompiled binaries or binaries compiled against standard libraries certainly performs worse than those compiled against hardware-specific optimized libraries. Yet there are quite many cases where performance is not critical but easy deployment is: (1) students, (2) new users, (3) code developement and testing, (4) cluster/system admins who are not familar with numerical software, (5) theoretical numerical analysts (use cluster only when memory outflows), (6) people who have to run FEniCS on many different platforms. Personally, I am (5)(6) and sometimes (4) breaks FEniCS on machines I want to use. This at least makes my life quite easier. More info about docker (can be interesting): http://www.docker.com/tryit/ https://docs.docker.com/userguide/ -- Lizao (Larry) Li Univeristy of Minnesota
_______________________________________________ fenics mailing list fenics@fenicsproject.org http://fenicsproject.org/mailman/listinfo/fenics