Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
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 }} | ||
- | |||