Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
howto:docker [2017/12/04 16:26] Алексей Кожевников |
— (текущий) | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== docker ====== | ||
- | |||
- | ===== Пример php приложения ===== | ||
- | |||
- | Dockerfile | ||
- | <code> | ||
- | FROM centos:7 | ||
- | |||
- | ENV ORACLE_HOME=/usr/lib/oracle/12.1/client64 | ||
- | ENV LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib | ||
- | ENV LD_LIBRARY_PATH64=/usr/lib/oracle/12.1/client64/lib | ||
- | ENV NSS_SDB_USE_CACHE=yes | ||
- | |||
- | COPY oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm /tmp/ | ||
- | RUN yum install -y /tmp/oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm \ | ||
- | && rm -f /tmp/*.rpm | ||
- | |||
- | RUN yum clean all \ | ||
- | && yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \ | ||
- | && yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm \ | ||
- | && yum-config-manager --enable remi-php56 \ | ||
- | && yum install -y php-cli php-fpm php-gd php-mbstring php-mysqlnd php-oci8 php-pecl-memcache php-soap \ | ||
- | && yum install -y curl net-tools tcpdump telnet \ | ||
- | && yum clean all | ||
- | |||
- | COPY etc/php.ini etc/php-fpm.conf /etc/ | ||
- | COPY etc/php-fpm.d/www.conf /etc/php-fpm.d/ | ||
- | |||
- | CMD ["/usr/sbin/php-fpm", "--nodaemonize"] | ||
- | </code> | ||
- | |||
- | Создание образа | ||
- | <code> | ||
- | docker build --no-cache -t php56 . | ||
- | </code> | ||
- | |||
- | Добавление образа в репозиторий | ||
- | <code> | ||
- | docker tag php56 ak831/php56 | ||
- | docker push ak831/php56 | ||
- | </code> | ||
- | |||
- | Создание томов | ||
- | <code> | ||
- | docker volume create pe-data | ||
- | docker volume create pe-logs | ||
- | </code> | ||
- | |||
- | Запуск контейнера | ||
- | <code> | ||
- | docker run --name pe -d \ | ||
- | -p 127.0.0.1:9009:9000 \ | ||
- | --mount source=pe-data,target=/usr/local/pe \ | ||
- | --mount source=pe-logs,target=/var/log/php-fpm \ | ||
- | --restart unless-stopped \ | ||
- | ak831/php56:latest | ||
- | </code> | ||
- | |||
- | Подключение к контейнеру | ||
- | <code> | ||
- | docker exec -i -t pe2 bash | ||
- | </code> | ||
- | |||
- | ===== Реестры и репозитории Docker ===== | ||
- | |||
- | ==== Вход в реестр ==== | ||
- | |||
- | <code> | ||
- | docker login | ||
- | |||
- | docker login localhost:8080 | ||
- | </code> | ||
- | |||
- | ==== Выход из реестра ==== | ||
- | |||
- | <code> | ||
- | docker logout | ||
- | |||
- | docker logout localhost:8080 | ||
- | </code> | ||
- | |||
- | ==== Поиск образа ==== | ||
- | |||
- | <code> | ||
- | docker search nginx | ||
- | |||
- | docker search nginx --filter stars=3 --no-trunc busybox | ||
- | </code> | ||
- | |||
- | ==== Pull (выгрузка из реестра) образа ==== | ||
- | |||
- | <code> | ||
- | docker pull nginx | ||
- | |||
- | docker pull eon01/nginx localhost:5000/myadmin/nginx | ||
- | </code> | ||
- | |||
- | ==== Push (загрузка в реестр) образа ==== | ||
- | |||
- | <code> | ||
- | docker push eon01/nginx | ||
- | |||
- | 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 | ||
- | |||
- | docker ps -a | ||
- | </code> | ||
- | |||
- | ==== Логи контейнера ==== | ||
- | |||
- | <code> | ||
- | docker logs infinite | ||
- | </code> | ||
- | |||
- | ==== Информация о контейнере ==== | ||
- | |||
- | <code> | ||
- | docker inspect infinite | ||
- | |||
- | 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 . | ||
- | |||
- | 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 - . | ||
- | </code> | ||
- | |||
- | ==== Удаление образа ==== | ||
- | |||
- | <code> | ||
- | docker rmi nginx | ||
- | </code> | ||
- | |||
- | ==== Загрузка репозитория в tar (из файла или стандартного ввода) ==== | ||
- | |||
- | <code> | ||
- | docker load <ubuntu.tar.gz | ||
- | |||
- | 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 ===== | ||
- | |||
- | ==== Инициализация 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 }} | ||