Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
howto:docker [2017/12/02 13:40] Алексей Кожевников |
— (текущий) | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== docker ====== | ||
- | |||
- | Dockerfile | ||
- | |||
- | <code> | ||
- | FROM centos:6 | ||
- | RUN yum clean all | ||
- | && yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm | ||
- | |||
- | && yum install -y bash-completion createrepo curl git htop lsof mc nano openssh-server rsync sysstat tcpdump telnet traceroute unzip wget | ||
- | && yum clean all | ||
- | RUN rm -rf | ||
- | |||
- | CMD ["/bin/bash"] | ||
- | </code> | ||
- | |||
- | <code> | ||
- | docker run -p 8083:8083 -p 8086:8086 -p 2003:2003 | ||
- | -e INFLUXDB_GRAPHITE_ENABLED=true | ||
- | influxdb | ||
- | </code> | ||
- | |||
- | ===== Реестры и репозитории Docker ===== | ||
- | |||
- | ==== Вход в реестр ==== | ||
- | |||
- | <code> | ||
- | ''docker login'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker login localhost:8080'' | ||
- | </code> | ||
- | |||
- | ==== Выход из реестра ==== | ||
- | |||
- | <code> | ||
- | ''docker logout'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker logout localhost:8080'' | ||
- | </code> | ||
- | |||
- | ==== Поиск образа ==== | ||
- | |||
- | <code> | ||
- | ''docker search nginx'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker search nginx -- filter stars=3 --no-trunc busybox'' | ||
- | </code> | ||
- | |||
- | ==== Pull (выгрузка из реестра) образа ==== | ||
- | |||
- | <code> | ||
- | ''docker pull nginx'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker pull eon01/nginx localhost:5000/myadmin/nginx'' | ||
- | </code> | ||
- | |||
- | ==== Push (загрузка в реестр) образа ==== | ||
- | |||
- | <code> | ||
- | ''docker push eon01/nginx'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker push eon01/nginx localhost:5000/myadmin/nginx'' | ||
- | </code> | ||
- | |||
- | ===== Первые действия с контейнерами ===== | ||
- | |||
- | ==== Создание контейнера ==== | ||
- | |||
- | <code> | ||
- | ''docker create -t -i eon01/infinite --name infinite'' | ||
- | </code> | ||
- | |||
- | ==== Первый запуск контейнера ==== | ||
- | |||
- | <code> | ||
- | ''docker run -it --name infinite -d eon01/infinite'' | ||
- | </code> | ||
- | |||
- | ==== Переименование контейнера ==== | ||
- | |||
- | <code> | ||
- | ''docker rename infinite infinity'' | ||
- | </code> | ||
- | |||
- | ==== Удаление контейнера ==== | ||
- | |||
- | <code> | ||
- | ''docker rm infinite'' | ||
- | </code> | ||
- | |||
- | ==== Обновление контейнера ==== | ||
- | |||
- | <code> | ||
- | ''docker update --cpu-shares 512 -m 300M infinite'' | ||
- | </code> | ||
- | |||
- | ===== Запуск и остановка контейнеров ===== | ||
- | |||
- | ==== Запуск остановленного контейнера ==== | ||
- | |||
- | <code> | ||
- | ''docker start nginx'' | ||
- | </code> | ||
- | |||
- | ==== Остановка ==== | ||
- | |||
- | <code> | ||
- | ''docker stop nginx'' | ||
- | </code> | ||
- | |||
- | ==== Перезагрузка ==== | ||
- | |||
- | <code> | ||
- | ''docker restart nginx'' | ||
- | </code> | ||
- | |||
- | ==== Пауза (приостановка всех процессов контейнера) ==== | ||
- | |||
- | <code> | ||
- | ''docker pause nginx'' | ||
- | </code> | ||
- | |||
- | ==== Снятие паузы ==== | ||
- | |||
- | <code> | ||
- | ''docker unpause nginx'' | ||
- | </code> | ||
- | |||
- | ==== Блокировка (до остановки контейнера) ==== | ||
- | |||
- | <code> | ||
- | ''docker wait nginx'' | ||
- | </code> | ||
- | |||
- | ==== Отправка SIGKILL (завершающего сигнала) ==== | ||
- | |||
- | <code> | ||
- | ''docker kill nginx'' | ||
- | </code> | ||
- | |||
- | ==== Отправка другого сигнала ==== | ||
- | |||
- | <code> | ||
- | ''docker kill -s HUP nginx'' | ||
- | </code> | ||
- | |||
- | ==== Подключение к существующему контейнеру ==== | ||
- | |||
- | <code> | ||
- | ''docker attach nginx'' | ||
- | </code> | ||
- | |||
- | ===== Получение информации о контейнерах ===== | ||
- | |||
- | ==== Работающие контейнеры ==== | ||
- | |||
- | <code> | ||
- | ''docker ps'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker ps -a'' | ||
- | </code> | ||
- | |||
- | ==== Логи контейнера ==== | ||
- | |||
- | <code> | ||
- | ''docker logs infinite'' | ||
- | </code> | ||
- | |||
- | ==== Информация о контейнере ==== | ||
- | |||
- | <code> | ||
- | ''docker inspect infinite'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -q)'' | ||
- | </code> | ||
- | |||
- | ==== События контейнера ==== | ||
- | |||
- | <code> | ||
- | ''docker events infinite'' | ||
- | </code> | ||
- | |||
- | ==== Публичные порты ==== | ||
- | |||
- | <code> | ||
- | ''docker port infinite'' | ||
- | </code> | ||
- | |||
- | ==== Выполняющиеся процессы ==== | ||
- | |||
- | <code> | ||
- | ''docker top infinite'' | ||
- | </code> | ||
- | |||
- | ==== Использование ресурсов ==== | ||
- | |||
- | <code> | ||
- | ''docker stats infinite'' | ||
- | </code> | ||
- | |||
- | ==== Изменения в файлах или директориях файловой системы контейнера ==== | ||
- | |||
- | <code> | ||
- | ''docker diff infinite'' | ||
- | </code> | ||
- | |||
- | ===== Управление образами ===== | ||
- | |||
- | ==== Список образов ==== | ||
- | |||
- | <code> | ||
- | ''docker images'' | ||
- | </code> | ||
- | |||
- | ==== Создание образов ==== | ||
- | |||
- | <code> | ||
- | ''docker build .'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker build github.com/creack/docker-firefox'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker build - <Dockerfile'' | ||
- | </file><code>''docker build - <context.tar.gz'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker build -t eon/infinite .'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker build -f myOtherDockerfile .'' | ||
- | </file><code>''curl example.com/remote/Dockerfile | docker build -f - .'' | ||
- | </file>==== Удаление образа ==== | ||
- | |||
- | <code>''docker rmi nginx'' | ||
- | </code> | ||
- | |||
- | ==== Загрузка репозитория в tar (из файла или стандартного ввода) ==== | ||
- | |||
- | <code> | ||
- | ''docker load <ubuntu.tar.gz'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker load --input ubuntu.tar'' | ||
- | </code> | ||
- | |||
- | ==== Сохранение образа в tar-архив ==== | ||
- | |||
- | <code> | ||
- | ''docker save busybox> ubuntu.tar'' | ||
- | </code> | ||
- | |||
- | ==== Просмотр истории образа ==== | ||
- | |||
- | <code> | ||
- | ''docker history'' | ||
- | </code> | ||
- | |||
- | ==== Создание образа из контейнера ==== | ||
- | |||
- | <code> | ||
- | ''docker commit nginx'' | ||
- | </code> | ||
- | |||
- | ==== Тегирование образа ==== | ||
- | |||
- | <code> | ||
- | ''docker tag nginx eon01/nginx'' | ||
- | </code> | ||
- | |||
- | ==== Push (загрузка в реестр) образа ==== | ||
- | |||
- | <code> | ||
- | ''docker push eon01/nginx'' | ||
- | </code> | ||
- | |||
- | ===== Сеть ===== | ||
- | |||
- | ==== Создание сети ==== | ||
- | |||
- | <code> | ||
- | ''docker network create -d overlay MyOverlayNetwork'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker network create -d bridge MyBridgeNetwork'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''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'' | ||
- | </code> | ||
- | |||
- | ==== Удаление сети ==== | ||
- | |||
- | <code> | ||
- | ''docker network rm MyOverlayNetwork'' | ||
- | </code> | ||
- | |||
- | ==== Список сетей ==== | ||
- | |||
- | <code> | ||
- | ''docker network ls'' | ||
- | </code> | ||
- | |||
- | ==== Получение информации о сети ==== | ||
- | |||
- | <code> | ||
- | ''docker network inspect MyOverlayNetwork'' | ||
- | </code> | ||
- | |||
- | ==== Подключение работающего контейнера к сети ==== | ||
- | |||
- | <code> | ||
- | ''docker network connect MyOverlayNetwork nginx'' | ||
- | </code> | ||
- | |||
- | ==== Подключение контейнера к сети при его запуске ==== | ||
- | |||
- | <code> | ||
- | ''docker run -it -d --network=MyOverlayNetwork nginx'' | ||
- | </code> | ||
- | |||
- | ==== Отключение контейнера от сети ==== | ||
- | |||
- | <code> | ||
- | ''docker network disconnect MyOverlayNetwork nginx'' | ||
- | </code> | ||
- | |||
- | ===== Очистка Docker ===== | ||
- | |||
- | ==== Удаление работающего контейнера ==== | ||
- | |||
- | <code> | ||
- | ''docker rm nginx'' | ||
- | </code> | ||
- | |||
- | ==== Удаление контейнера и его тома (volume) ==== | ||
- | |||
- | <code> | ||
- | ''docker rm -v nginx'' | ||
- | </code> | ||
- | |||
- | ==== Удаление всех контейнеров со статусом exited ==== | ||
- | |||
- | <code> | ||
- | ''docker rm $(docker ps -a -f status=exited -q)'' | ||
- | </code> | ||
- | |||
- | ==== Удаление всех остановленных контейнеров ==== | ||
- | |||
- | <code> | ||
- | ''docker container prune'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker rm `docker ps -a -q`'' | ||
- | </code> | ||
- | |||
- | ==== Удаление контейнеров, остановленных более суток назад ==== | ||
- | |||
- | <code> | ||
- | ''docker container prune --filter "until=24h"'' | ||
- | </code> | ||
- | |||
- | ==== Удаление образа ==== | ||
- | |||
- | <code> | ||
- | ''docker rmi nginx'' | ||
- | </code> | ||
- | |||
- | ==== Удаление неиспользуемых (dangling) образов ==== | ||
- | |||
- | <code> | ||
- | ''docker image prune'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker rmi $(docker images -f dangling=true -q)'' | ||
- | </code> | ||
- | |||
- | ==== Удаление неиспользуемых (dangling) образов даже с тегами ==== | ||
- | |||
- | <code> | ||
- | ''docker image prune -a'' | ||
- | </code> | ||
- | |||
- | ==== Удаление всех образов ==== | ||
- | |||
- | <code> | ||
- | ''docker rmi $(docker images -a -q)'' | ||
- | </code> | ||
- | |||
- | ==== Удаление всех образов без тегов ==== | ||
- | |||
- | <code> | ||
- | ''docker rmi -f $(docker images | grep "^<none>" | awk "{print $3}")'' | ||
- | </code> | ||
- | |||
- | ==== Остановка и удаление всех контейнеров ==== | ||
- | |||
- | <code> | ||
- | ''docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)'' | ||
- | </code> | ||
- | |||
- | ==== Удаление неиспользуемых (dangling) томов ==== | ||
- | |||
- | <code> | ||
- | ''docker volume prune'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker volume rm $(docker volume ls -f dangling=true -q)'' | ||
- | </code> | ||
- | |||
- | ==== Удаление неиспользуемых (dangling) томов по фильтру ==== | ||
- | |||
- | <code> | ||
- | ''docker volume prune --filter "label!=keep"'' | ||
- | </code> | ||
- | |||
- | ==== Удаление неиспользуемых сетей ==== | ||
- | |||
- | <code> | ||
- | ''docker network prune'' | ||
- | </code> | ||
- | |||
- | ==== Удаление всех неиспользуемых объектов ==== | ||
- | |||
- | <code> | ||
- | ''docker system prune'' | ||
- | </code> | ||
- | |||
- | По умолчанию для Docker 17.06.1+ тома не удаляются. Чтобы удалились и они тоже: | ||
- | |||
- | <code> | ||
- | ''docker system prune --volumes'' | ||
- | </code> | ||
- | |||
- | ===== Docker Swarm ===== | ||
- | |||
- | ==== Установка Docker Swarm ==== | ||
- | |||
- | <code> | ||
- | ''curl -ssl https://get.docker.com | bash'' | ||
- | </code> | ||
- | |||
- | \\ | ||
- | //**Прим. перев.**: в Docker версий 1.12.0+ ничего дополнительно устанавливать не требуется, т.к. Docker Swarm встроен в Docker Engine в виде специального режима (Swarm mode).// | ||
- | ==== Инициализация Swarm ==== | ||
- | |||
- | <code> | ||
- | ''docker swarm init --advertise-addr 192.168.10.1'' | ||
- | </code> | ||
- | |||
- | ==== Подключение рабочего узла (worker) к Swarm ==== | ||
- | |||
- | <code> | ||
- | ''docker swarm join-token worker'' | ||
- | </code> | ||
- | |||
- | ==== Подключение управляющего узла (manager) к Swarm ==== | ||
- | |||
- | <code> | ||
- | ''docker swarm join-token manager'' | ||
- | </code> | ||
- | |||
- | ==== Список сервисов ==== | ||
- | |||
- | <code> | ||
- | ''docker service ls'' | ||
- | </code> | ||
- | |||
- | ==== Список узлов ==== | ||
- | |||
- | <code> | ||
- | ''docker node ls'' | ||
- | </code> | ||
- | |||
- | ==== Создание сервиса ==== | ||
- | |||
- | <code> | ||
- | ''docker service create --name vote -p 8080:80 instavote/vote'' | ||
- | </code> | ||
- | |||
- | ==== Список заданий Swarm ==== | ||
- | |||
- | <code> | ||
- | ''docker service ps'' | ||
- | </code> | ||
- | |||
- | ==== Масштабирование сервиса ==== | ||
- | |||
- | <code> | ||
- | ''docker service scale vote=3'' | ||
- | </code> | ||
- | |||
- | ==== Обновление сервиса ==== | ||
- | |||
- | <code> | ||
- | ''docker service update --image instavote/vote:movies vote'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker service update --force --update-parallelism 1 --update-delay 30s nginx'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker service update --update-parallelism 5--update-delay 2s --image instavote/vote:indent vote'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker service update --limit-cpu 2 nginx'' | ||
- | </code> | ||
- | |||
- | <code> | ||
- | ''docker service update --replicas=5 nginx'' | ||
- | </code> | ||
- | |||
- | {{tag> docker }} | ||
- | |||