====== Running PyLith in a portable, Linux environment via Docker ======
**See the PyLith User Manual (v2.2.0) for the latest instructions.** The instructions here do not include how to use applications with graphical-user interfaces within the container.
===== What is Docker? =====
From https://www.docker.com/what-docker:
> "Docker containers wrap a piece of software in a complete filesystem that contains everything needed to run: code, runtime, system tools, system libraries – anything that can be installed on a server. This guarantees that the software will always run the same, regardless of its environment.
>
> LIGHTWEIGHT
>
> Containers running on a single machine share the same operating system kernel; they start instantly and use less RAM. Images are constructed from layered filesystems and share common files, making disk usage and image downloads much more efficient."
===== Setup (first time only) =====
==== Install Docker ====
https://www.docker.com/products/docker
==== Create container to store persistent user data ====
This container, called pylith-data, will hold a directory where all your user data can be stored for use with PyLith within Docker. The data can persist for different versions of PyLith; that is, you can update to a newer version of PyLith and your user data will still be available. This directory is not directly accessible from your host computer. However, you can copy files to/from your host filesystem using "docker cp" (see below).
$ docker create --name pylith-data geodynamics/pylith-data
===== Run Unix shell within Docker to use PyLith. =====
$ docker run -ti --volumes-from pylith-data geodynamics/pylith
**HINT**: Within the container, you will probably want to copy the examples from the pylith-VERSION directory to the data directory, which is the persistent storage.
$ cp -R ~/pylith-VERSION/examples ~/data
* To "pause" the container. ''Control-p Control-q''
* To attach to a "paused" or "running" container.
- Get container id ''$ docker ps''
- Attach to container ''$ docker attach CONTAINER_ID''
==== Troubleshooting ====
docker: Error response from daemon: oci runtime error: process_linux.go:330: running prestart hook 0 caused "fork/exec /usr/bin/dockerd (deleted): no such file or directory: ".
* Restart docker. ''$ sudo service docker restart''
* Run docker image. ''$ docker run -ti --volumes-from pylith-data geodynamics/pylith''
===== Copy data to/from persistent storage volume. =====
These commands are run on the local host outside the container, not inside the Docker container.
* Copy data FROM persistent storage volume TO local host
$ docker cp pylith-data:/data/pylith-user/PATH/FILENAME LOCAL_PATH
* Copy data FROM local host TO persistent storage volume
$ docker cp LOCAL_PATH pylith-data:/data/pylith-user/PATH/
===== Docker Quick Reference =====
* List local docker images ''$ docker images''
* List all docker containers ''$ docker ps -a''
* List running docker containers ''$ docker ps''
* Remove docker container ''$ docker rm CONTAINER_ID''
* Remove docker image ''$ docker rmi IMAGE_ID''