Docker quicktips #2
Heyyy just another small set of tricks I picked up over time when working with Docker.
Pull new versions of existing images / tags
docker images | awk 'BEGIN{OFS=":"} {print $1,$2}' | grep -v 'none' | grep -iv 'repo' | xargs -n1 docker pull
This chain of commands reformats the output of docker images
to pull a new
version of all tagged images on the host.
docker images
should be self explanatory.
Afterwards we use awk
to build image:tag
for each image on each line.
We also want to skip images that are untagged (i.e. the tag reads ‘none’).
Obviously we also want to drop the first line of the docker images
command
via inversely matching on ‘repo’.
Last we pipe in each line separately (-n1
) into a docker pull call.
We can use a similar approach to delete untagged images
after upgrading and restarting all containers.
(I.e. just grapping ‘none’ lines and feeding it into docker rmi
)
docker images | grep '<none>' | awk '{print $3}' | xargs -n1 docker rmi
Add them to your .bashrc
for convenience (NOTE: you need to escape
special chars):
alias docker_update="docker images | awk 'BEGIN{OFS=\":\"} {print \$1,\$2}' | grep -v 'none' | grep -iv 'repo' | xargs -n1 docker pull"
alias docker_cleanup="docker images | grep '<none>' | awk '{print \$3}' | xargs -n1 docker rmi"
Restart all systemd managed docker containers
If we expand the unit files listed in
docker quicktips #1
with PartOf=
lines we can achieve services that ‘propagate’ restarts.
See the systemd man pages for more info on PartOf=
.
[winlu@winlu-main system]$ cat docker_nginx_reverse.service
[Unit]
Description=docker nginx_reverse proxy container
After=docker.service
Requires=docker.service
PartOf=docker.service
[Service]
Restart=always
ExecStartPre=-/usr/bin/docker stop -t 2 nginx_reverse
ExecStartPre=-/usr/bin/docker rm nginx_reverse
ExecStart=/usr/bin/docker run --rm --name nginx_reverse -p 80:80 -p 443:443 -e DEFAULT_HOST=heroicdebugging.biz -v /docker/nginx_reverse/certs:/etc/nginx/certs -v /docker/nginx_reverse/vhost.d:/etc/nginx/vhost.d:ro -v /var/run/docker.sock:/tmp/docker.sock jwilder/nginx-proxy
[Install]
WantedBy=multi-user.target