CLI команды¶
Реестры и репозитории Docker¶
Вход в реестр : docker login
docker login localhost:8080
Выход из реестра: docker logout
docker logout localhost:8080
Поиск образа: docker search
docker search nginx -- filter stars=3 --no-trunc busybox
Pull (выгрузка из реестра) образа: docker pull
docker pull eon01/nginx localhost:5000/myadmin/nginx
Push (загрузка в реестр) образа: docker push
docker push eon01/nginx localhost:5000/myadmin/nginx
Первые действия с контейнерами¶
Создание контейнера:
docker create -t -i eon01/infinite --name infinite
Первый запуск контейнера:
docker run -it --name infinite -d eon01/infinite
Переименование контейнера:
docker rename infinite infinity
Удаление контейнера:
docker rm infinite
Обновление контейнера:
docker update --cpu-shares 512 -m 300M infinite
Запуск и остановка контейнеров¶
Запуск остановленного контейнера: docker start nginx
Остановка: docker stop nginx
Перезагрузка: docker restart nginx
Пауза (приостановка всех процессов контейнера):
docker pause nginx
Снятие паузы: docker unpause nginx
Блокировка (до остановки контейнера): docker wait nginx
Отправка SIGKILL (завершающего сигнала): docker kill nginx
Отправка другого сигнала: docker kill -s HUP nginx
Подключение к существующему контейнеру: docker attach nginx
Получение информации о контейнерах¶
Работающие контейнеры: docker ps
Логи контейнера: docker logs infinite
Информация о контейнере: docker inspect infinite
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -q)
События контейнера: docker events infinite
Публичные порты: docker port infinite
Выполняющиеся процессы: docker top infinite
Использование ресурсов: docker stats infinite
Изменения в файлах или директориях файловой системы контейнера:
docker diff infinite
Управление образами¶
Список образов: docker images
Создание образов: docker build .
docker build github.com/creack/docker-firefox
docker build - < Dockerfile
docker build - < context.tar.gz
docker build -t eon/infinite .
docker build -f myOtherDockerfile .
curl example.com/remote/Dockerfile | docker build -f - .
Удаление образа: docker rmi nginx
Загрузка репозитория в tar (из файла или стандартного ввода):
docker load < ubuntu.tar.gz
docker load --input ubuntu.tar
Сохранение образа в tar-архив:
docker save busybox > ubuntu.tar
Просмотр истории образа: docker history
Создание образа из контейнера: docker commit nginx
Тегирование образа: docker tag nginx eon01/nginx
Push (загрузка в реестр) образа: docker push eon01/nginx
Сеть¶
Создание сети:
docker network create -d overlay MyOverlayNetwork
docker network create -d bridge MyBridgeNetwork
docker network create -d overlay \
--subnet=192.168.0.0/16 \
--subnet=192.170.0.0/16 \
--gateway=192.168.0.100 \
--gateway=192.170.0.100 \
--ip-range=192.168.1.0/24 \
--aux-address="my-router=192.168.1.5" --aux-address="my-switch=192.168.1.6" \
--aux-address="my-printer=192.170.1.5" --aux-address="my-nas=192.170.1.6" \
MyOverlayNetwork
Удаление сети: docker network rm MyOverlayNetwork
Список сетей: docker network ls
Получение информации о сети:
docker network inspect MyOverlayNetwork
Подключение работающего контейнера к сети:
docker network connect MyOverlayNetwork nginx
Подключение контейнера к сети при его запуске:
docker run -it -d --network=MyOverlayNetwork nginx
Отключение контейнера от сети:
docker network disconnect MyOverlayNetwork nginx
Очистка Docker¶
Удаление работающего контейнера: docker rm nginx
Удаление контейнера и его тома (volume): docker rm -v nginx
Удаление всех остановленных контейнеров: docker container prune
Удаление контейнеров, остановленных более суток назад:
docker container prune --filter "until=24h"
Удаление образа: docker rmi nginx
Удаление неиспользуемых (dangling) образов: docker image prune
docker rmi $(docker images -f dangling=true -q)
Удаление неиспользуемых (dangling) образов даже с тегами: docker image prune -a
Удаление всех образов: docker rmi $(docker images -a -q)
Удаление всех образов без тегов:
docker rmi -f $(docker images | grep "^<none>" | awk "{print $3}")
Остановка и удаление всех контейнеров:
docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)
Удаление неиспользуемых (dangling) томов:
docker volume prune
docker volume rm $(docker volume ls -f dangling=true -q)
Удаление неиспользуемых (dangling) томов по фильтру:
docker volume prune --filter "label!=keep"
Удаление неиспользуемых сетей:
docker network prune
Удаление всех неиспользуемых объектов:
docker system prune
По умолчанию для Docker 17.06.1+ тома не удаляются. Чтобы удалились и они тоже:
docker system prune --volumes
Docker Swarm¶
Инициализация Swarm:
docker swarm init --advertise-addr 192.168.10.1
Подключение рабочего узла (worker) к Swarm:
docker swarm join-token worker
Подключение управляющего узла (manager) к Swarm:
docker swarm join-token manager
Список сервисов: docker service ls
Список узлов: docker node ls
Создание сервиса:
docker service create --name vote -p 8080:80 instavote/vote
Список заданий Swarm: docker service ps
Масштабирование сервиса: docker service scale vote=3
Обновление сервиса:
docker service update --image instavote/vote:movies vote
docker service update --force --update-parallelism 1 --update-delay 30s nginx
docker service update --update-parallelism 5--update-delay 2s --image instavote/vote:indent vote
docker service update --limit-cpu 2 nginx
docker service update --replicas=5 nginx
Cниппеты¶
-
Войти в контейнер:
docker exec -ti {{ container name }} /bin/sh
-i – интерактивный режим, не закрываем STDIN при старте. -t – запуск псевдо-терменала. -
Удалить все контейнеры с статусом exited:
docker rm $(docker ps -a -q -f status=exited)
Как управлять ресурсами, доступными для контейнера (процессор, память)?¶
В случае с памятью все просто — ты можешь указать максимальный объем памяти, который будет доступен контейнеру:
docker run -d -m 256m ubuntu-nginx /usr/sbin/nginx
С процессором все несколько сложнее. Docker полагается на механизм cgroups для ограничения ресурсов процессора, а он оперирует понятием веса, которое может быть от 1 до 1024. Чем выше вес группы процессов (в данном случае контейнера), тем больше шансов у нее получить процессорные ресурсы. Другими словами, если у тебя будет два контейнера с весом 1024 и один с весом 512, то первые два будут иметь в два раза больше шансов получить ресурсы процессора, чем последний. Это нечто вроде приоритета. Значение по умолчанию всегда 1024, для изменения используется опция -c:
docker run -d -c 512 ubuntu-ssh /usr/sbin/sshd -D
Также доступна опция --cpuset, с помощью которой контейнер можно привязать к определенным ядрам процессора. Например, если указать --cpuset="0,1", то контейнеру будут доступны первые два ядра.
Просмотреть статистику использования ресурсов можно с помощью команды docker stats:
docker stats Имя/ID-контейнера