Несколько полезных приемов для работы с docker-контейнерами

1. При работе с docker часто возникает ситуация когда необходимо проверить какие порты открыты внутри контейнера. Это легко реализовать с помощью nsenter (в debian входит в пакет util-linux). Для использования nsenter нам необходимо узнать PID контейнера:
docker inspect -f '{{.State.Pid}}' container_name_or_id
# docker inspect -f '{{.State.Pid}}' 51f30d86a938
392240
После используя полученное значение мы можем просмотреть установленные соединения
nsenter -t 392240 -n netstat -n

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 10.0.0.1:43489        10.0.0.2:981     ESTABLISHED
tcp    79816      0 10.0.0.1:43489        10.0.0.2:981     ESTABLISHED
tcp        0      0 10.0.0.1:43489        10.0.0.2:981       ESTABLISHED
tcp    52368      0 10.0.0.1:43489        10.0.0.2:981       ESTABLISHED
tcp        0   4320 10.0.0.1:43489        10.0.0.2:981     ESTABLISHED

я предпочитаю использовать lsof, ниже пример его использования и сведение вышеперечисленных команд в одну строку:
watch nsenter -t `docker inspect -f '{{.State.Pid}}' container_name_or_id` -n lsof -i -n -P

 

2. Получение таблицы запущенных контейнеров в виде ID, Names, Ports:
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"

усложним таблицу, добавим IP контейнеров:
docker ps -q | xargs -n 1 docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Name }}' | sed 's/ \// /'


3. удаление контейнеров, образов, томов
Остановка всех контейнеров:
docker stop $(docker ps -a -q)

Удаление контейнеров:
docker rm $(docker ps -a -q)

Удаление всех образов:
docker rmi $(docker images)

Удаление всех неиспользуемых образов:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

Удаление контейнеров в статусе “exited”
docker rm $(docker ps -qa --no-trunc --filter "status=exited")

Удаление неиспользуемых томов
docker volume ls -qf "dangling=true" | xargs docker volume rm

 

4. Часто несправедливо забывают про полезную команду docker update, она позволяет изменять следующие параметры контейнера --blkio-weight --cpu-period --cpu-quota  --cpu-rt-period --cpu-rt-runtime --cpu-shares --cpus --cpuset-cpus --cpuset-mems --kernel-memory --memory --memory-reservation --memory-swap --pids-limit --restart без пересоздания контейнера
пример использования

изменим параметр --restart, сперва смотрим текущее значение параметра:
docker inspect 51f30d86a938|grep -A 1 RestartPolicy
"RestartPolicy": {
"Name": "always",

меняем значение
docker update --restart=no 51f30d86a938

проверяем
docker inspect 51f30d86a938|grep -A 1 RestartPolicy
"RestartPolicy": {
"Name": "no",