Docker¶
Contents
Docker Selection Pin and/or Hold¶
The docker version will be pined and/or set hold.
environments/configuration.yml
docker_version: "5:20.10.0"
hold and/or pin
$ dpkg --get-selections | grep hold
containerd.io hold
$ apt-mark showhold
containerd.io
$ cat /etc/apt/preferences.d/docker
Package: docker-ce
Pin: version 5:20.10.0*
Pin-Priority: 1001
$ cat /etc/apt/preferences.d/docker-cli
Package: docker-ce-cli
Pin: version 5:20.10.0*
Pin-Priority: 1001
Start / Stop all containers¶
When using the live restore (https://docs.docker.com/engine/admin/live-restore/) feature, not all containers will be stopped when the docker service is stopped.
$ docker stop $(docker ps -q)
$ docker start $(docker ps -a -q)
Make sure that any containers intentionally stopped on the system are also started. This can lead to
unintended side effects. Therefore, in many cases it is better to save the output of
docker ps -q
before the stop and, based on this, start the containers later.
Start / Stop all containers of a service¶
#!/usr/bin/env bash
ACTION=${1:-start}
SERVICE=${2:-keystone}
OPENSTACK_RELEASE=queens
case $ACTION in
start)
for container in $(docker ps -a | grep osism/$SERVICE | grep $OPENSTACK_RELEASE | grep Exited | awk '{ print $1 }'); do
docker start $container
sleep 1
done
;;
stop)
for container in $(docker ps -a | grep osism/$SERVICE | grep $OPENSTACK_RELEASE | grep -v Exited | awk '{ print $1 }'); do
docker stop $container
sleep 1
done
;;
esac
Move /var/lib/docker to a block device¶
##########################################################
# docker
docker_configure_storage_block_device: yes
docker_storage_block_device: /dev/vdb
docker_storage_filesystem: ext4
$ sudo mkfs.ext4 /dev/vdb
$ echo "/dev/vdb /var/lib/docker ext4 defaults 0 0" | sudo tee -a /etc/fstab
$ docker ps -q > running.YYYYMMDD
$ docker stop $(cat running.YYYYMMDD)
$ sudo systemctl stop docker
$ sudo mv /var/lib/docker /var/lib/docker.YYYYMMDD
$ sudo mkdir /var/lib/docker
$ sudo mount /var/lib/docker
$ sudo rsync -avz /var/lib/docker.YYYYMMDD/ /var/lib/docker/
$ sudo systemctl start docker
$ docker start $(cat running.YYYYMMDD)
$ rm running.YYYYMMDD
$ sudo rm -rf /var/lib/docker.YYYYMMDD
unable to find user X: no matching entries in passwd file¶
$ docker exec -it kolla_toolbox bash
unable to find user ansible: no matching entries in passwd file
$ docker exec -it -u 0 kolla_toolbox bash
(kolla-toolbox)[root@hostname /]#
$ docker stop CONTAINER
$ docker start CONTAINER
$ docker exec -it kolla_toolbox bash
(kolla-toolbox)[root@hostname /]#
Do not use restart
. restart
will not solve the issue.
Cleanup¶
Warning
Never use docker system prune
on any of the nodes to free storage. This removes stopped containers.
Images that are no longer needed can be removed at any time to release storage.
$ docker image prune --all
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: osism/openvswitch-vswitchd:pike-20180807-0
untagged: osism/keepalived:pike-latest
untagged: osism/keepalived@sha256:59b611a3a84060f38b97dbbd68ab51a52c503a81309ed86c46a92fd0227b09e1
[...]
Total reclaimed space: 9.681GB
This can also be done on all systems by Ansible (included since 2020.01).
$ osism-generic cleanup-docker-images