Skip to content

Docker

Install

Debian

https://docs.docker.com/engine/install/debian/

sudo -i
apt remove docker docker-engine docker.io containerd runc
apt install curl apt-transport-https ca-certificates curl gnupg-agent software-properties-common
echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"> /etc/apt/sources.list.d/docker.list
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo tee /etc/apt/trusted.gpg.d/docker.asc
apt update
apt install docker-ce

Manage Docker as a non-root user

https://docs.docker.com/engine/installation/linux/linux-postinstall/

sudo usermod -aG docker $USER
newgrp docker

Usage

Show general informations:

docker info

Run containers

Start container in foreground:

docker run hello-world
docker run -p 3128:8000 varac/squid_deb_proxy

Run shell:

docker run -i -t --entrypoint /bin/bash varac/soledad

Start a container and start bash:

docker run -i -t useragent:latest /bin/bash

Run cmd in existing container:

docker exec -it squid_deb_proxy /bin/bash

Kill container:

docker kill couchdb

Start existing container:

docker start couchdb

Prune / cleanup

Prune all stopped containers:

docker container prune

Prune all old containers, images, volumes etc:

docker system prune
docker system prune --force

Remove ll shutdown containers:

docker rm `docker ps --no-trunc -aq`

Remove all containers including running ones:

docker rm -f `docker ps --no-trunc -aq`

Remove all images:

docker rmi $(docker images -q)
docker rmi $(docker images -q) --force

Remove image based on certain image:

docker rm  $(docker ps -a | awk '/myimage:mytag/{print $1}')

Inspect containers / images

List files in container:

docker export 4ec52b6023d2 | tar -tf -

Show history of image build:

docker image history --no-trunc traefik:1.7.9 > /tmp/image_history

Show size of container:

docker ps --size

docker output formatting

Output only specific fields:

docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Size}}\t{{.Names}}" \
  | cut -c-$(tput cols)

Or put the size at front:

docker ps --format "table {{.Size}}\t{{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}" \
  | cut -c-$(tput cols)

Disk usage

Given this cluster disk usage:

/dev/xvda1       30G   26G  4.1G  87% /

But du only schows 18G usage:

root@master:~# du -sch /
18G     /
18G     total

The problem is that some deleted files from the overlay filesystem are not completly freed, as shown with lsof:

root@master:~# lsof -l | grep '(deleted)' | head
dockerd    8768                       root   29w      REG              202,1 16151995496   21692420
  /var/lib/docker/containers/…eb3b5cc697f23-json.log
  (deleted)
dockerd    8768  3759 dockerd         root   29w      REG              202,1 16151995496   21692420
  /var/lib/docker/containers/…eb3b5cc697f23-json.log
  (deleted)
dockerd    8768  3761 dockerd         root   29w      REG

Those files were deleted from the container host from /var/lib/….

For a real disk usage investigation you either need to restart docker containers which hold up removed files or reboot the system.