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

$ sudo apt install docker.io        # install docker
$ sudo usermod -aG docker $USER     # add user to docker group

Image management

Create image from Dockerfile

$ docker build -t <image_name>:[tag_name] .

Create image from a specific Dockerfile

$ docker build -f <dockerfile_name> -t <image_name>:[tag_name] .

Image management

$ docker save <image_name>:[tag_name] <image_name>.tar      # save image
$ docker load --input <image_name>.tar                      # load image
$ docker images                                             # list available images
$ docker rmi <image_name>                                   # remove image by name
$ docker rmi <image_id>                                     # remove image by id
$ docker images purge                                       # remove dangling images

Container management

Start container

$ docker run -it --name <container_name> <image_name>:[tag_name]
Options:
    --rm                                      # remove container file system when exits
    --restart always                          # always restart the container if it stops.
    -v <local_dir>:<docker_dir>: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

$ docker exec -it <container_id> bash

Copy files

$ docker cp <container_name>:<src_dir> <local_dst_dir>  # copy files from docker to local
$ docker cp <local_src_dir> <container_name>:<dst_dir>  # copy files from local to docker

Container management

$ docker ps                         # list all available containers
$ docker stop <container_name>      # stop specific container
$ docker rm <container_name>        # remove specific stopped container

Upload image to docker hub

Login to docker hub

$ export DOCKER_ID_USER="user_name"   # set docker hub username
$ docker login                        # login in to docker hub

Tag image

$ docker tag <image_name>:<version> $DOCKER_ID_USER/<image_name>:<version>

Push to docker cloud

$ docker push $DOCKER_ID_USER/<image_name>:<version>

Convert image to singularity

Create docker image tarball

$ docker save <image_name>:<version> -o <image_name>.tar

Build singularity from image tarball

$ singularity build <image_name>.sif docker-archive://<image_name>.tar

Build singularity from DockerHub image

$ singularity pull <image_name>.sif docker://<user_name>/<image_name>:<version>

Nvidia-Docker

Install nvidia-docker 2.0

$ 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