docker
========
`Docker `_ is an open platform for developers and
sysadmins to build, ship, and run distributed applications, whether on laptops,
data center VMs, or the cloud.
Docker installation
--------
.. code-block:: bash
$ sudo apt install docker.io # install docker
$ sudo usermod -aG docker $USER # add user to docker group
Docker configuration
--------
.. code-block:: bash
$ cat /etc/docker/daemon.json # check daemon configuration
$ sudo systemctl status docker # check docker active statu
Image management
--------
Create **image** from `Dockerfile `_
:code:`$ docker build -t :[tag_name] .`
Create **image** from a specific Dockerfile
:code:`$ docker build -f -t :[tag_name] .`
Image management
.. code-block:: bash
$ docker save :[tag_name] .tar # save image
$ docker load --input .tar # load image
$ docker images # list available images
$ docker rmi # remove image by name
$ docker rmi # remove image by id
$ docker images purge # remove dangling images
Container management
--------
Start container
.. code-block:: bash
$ docker run -it --name :[tag_name]
Options:
--rm # remove container file system when exits
--restart always # always restart the container if it stops.
-v ::ro # map local directory to docker
--user $(id -u):$(id -g) # set user the same as local machine
--shm-size 32G # set size of shared memory
--cpuset-cpus 10-20 # set cpus to use
--gpus '"device=1"' # set gpu to use
Attach existing container
.. code-block:: bash
$ docker exec -it bash
Copy files
.. code-block:: bash
$ docker cp : # copy files from docker to local
$ docker cp : # copy files from local to docker
Container management
.. code-block:: bash
$ docker ps # list all available containers
$ docker stop # stop specific container
$ docker rm # remove specific stopped container
Upload image to docker hub
--------
Login to docker hub
.. code-block:: bash
$ export DOCKER_ID_USER="user_name" # set docker hub username
$ docker login # login in to docker hub
Tag image
:code:`$ docker tag : $DOCKER_ID_USER/:`
Push to docker cloud
:code:`$ docker push $DOCKER_ID_USER/:`
Convert image to singularity
--------
Create docker image tarball
.. code-block:: bash
$ docker save : -o .tar
Build singularity from image tarball
.. code-block:: bash
$ singularity build .sif docker-archive://.tar
Build singularity from DockerHub image
.. code-block:: bash
$ singularity pull .sif docker:///:
Nvidia-Docker
--------
Install nvidia-docker 2.0
.. code-block:: bash
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update
$ sudo apt-get install nvidia-docker2
$ sudo pkill -SIGHUP dockerd
$ docker run --runtime nvidia --rm nvidia/cuda:9.0-base-ubuntu16.04 nvidia-smi