Как перезапустить контейнер docker
Войти Регистрация
Как перезапустить контейнер Docker ? и посмотреть логи
Для запуска контейнера выполните:
docker start $(docker ps -a -q)
Для остановке контейнера:
docker stop $(docker ps -a -q)
Просмотр запущенных контейнеров
docker ps -a
Что-бы посмотреть текущие логи Docker
docker logs $(docker ps -lq)
Шпаргалка с командами Docker
Прим. перев.: Неделю назад Aymen El Amri, руководящий компанией eralabs и создавший обучающий курс «Безболезненный Docker», опубликовал свой Docker Cheat Sheet — шпаргалку по основным командам Docker. Git-репозиторий этого документа на GitHub уже набрал 1000+ stars и несколько сторонних контрибьюторов, что подтвердило его актуальность и пользу.
Представленные здесь команды описаны минимально (с акцентом на читаемость как есть) и включают в себя установку Docker, работу с реестрами и репозиториями, контейнерами, образами, сетью, Docker Swarm. Ниже представлен перевод шпаргалки в её состоянии на 2 сентября с дополнениями из комментариев ниже.
Установка
Linux
curl -sSL https://get.docker.com/ | sh
Mac
Скачайте dmg по этой ссылке:
https://download.docker.com/mac/stable/Docker.dmg
Windows
Используйте MSI-инсталлятор:
https://download.docker.com/win/stable/InstallDocker.msi
Реестры и репозитории Docker
Вход в реестр
docker login
docker login localhost:8080
Выход из реестра
docker logout
docker logout localhost:8080
Поиск образа
docker search nginx
docker search nginx -- filter stars=3 --no-trunc busybox
Pull (выгрузка из реестра) образа
docker pull nginx
docker pull eon01/nginx localhost:5000/myadmin/nginx
Push (загрузка в реестр) образа
docker push eon01/nginx
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 ps -a
Логи контейнера
docker logs infinite
Информация о контейнере
docker inspect infinite
docker inspect --format '>' $(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
Удаление всех контейнеров со статусом exited
docker rm $(docker ps -a -f status=exited -q)
Удаление всех остановленных контейнеров
docker container prune
docker rm `docker ps -a -q`
Удаление контейнеров, остановленных более суток назад
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 "^" | awk "")
Остановка и удаление всех контейнеров
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
Установка Docker Swarm
curl -ssl https://get.docker.com | bash
Прим. перев.: в Docker версий 1.12.0+ ничего дополнительно устанавливать не требуется, т.к. Docker Swarm встроен в Docker Engine в виде специального режима (Swarm mode).
Инициализация 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
P.S.
Прим. перев.: Напомню, что оригинальная (англоязычная) версия Docker Cheat Sheet доступна и обновляется в Git-репозитории. Автор будет рад исправлениям/пополнениям от сообщества.
Читайте также в нашем блоге:
- «Play with Docker — онлайн-сервис для практического знакомства с Docker».
- «В чём суть проекта Moby и почему главным репозиторием Docker вдруг стал moby/moby?»
- «Собираем Docker-образы для CI/CD быстро и удобно вместе с dapp (обзор и видео)».
- Блог компании Флант
- Системное администрирование
- Серверное администрирование
- DevOps
Перезапустите один контейнер с помощью Docker Compose
В этом руководстве мы узнаем, как перезапустить один контейнер Docker с помощью Docker Compose .
2. Команда перезапуска Docker Compose
Docker Compose — это инструмент для управления несколькими контейнерами как одной службой. Однако интерфейс командной строки Docker Compose включает команды, которые можно применять к одному контейнеру. Например, команда перезапуска позволяет указать имя службы, которую мы хотим перезапустить, не затрагивая другие запущенные службы:
docker-compose restart service-name
Прежде чем углубиться в выполнение команды перезагрузки , давайте настроим рабочую среду.
3. Настройка
У нас должен быть контейнер Docker для запуска команд Docker Compose. Мы будем использовать предыдущий проект ForEach, spring-cloud-docker , который представляет собой докеризованное приложение Spring Boot. В этом проекте есть два контейнера Docker, которые помогут нам доказать, что мы можем перезапустить одну службу, не затрагивая другую.
Во-первых, мы должны подтвердить, что можем запустить оба контейнера, выполнив следующую команду из корня проекта:
docker-compose up --detach --build
Теперь мы должны увидеть обе службы, выполнив команду docker-compose ps :
$ docker ps Name Command State Ports -------------------------------------------------------------------------------- message-server java -jar /message-server.jar Up 0.0.0.0:18888->8888/tcp product-server java -jar /product-server.jar Up 0.0.0.0:19999->9999/tcp
Кроме того, мы можем перейти на localhost:18888 или localhost:19999 в нашем браузере и убедиться, что мы видим сообщения, отображаемые службами приложений.
4. Перезапуск одного контейнера
На данный момент у нас есть два работающих контейнера, которыми Docker Compose управляет как единая служба. Теперь давайте посмотрим, как мы можем использовать команду перезапуска , чтобы остановить и запустить только один из двух контейнеров.
Во-первых, мы рассмотрим, как этого добиться без пересборки контейнера. Однако это решение не будет обновлять службу последним кодом. Затем мы увидим другой подход, при котором мы создаем контейнер с последним кодом перед запуском .
4.1. Перезагрузка без восстановления
Когда оба контейнера запущены, мы выбираем одну из служб для перезапуска. В этом случае мы будем использовать контейнер сервера сообщений :
docker-compose restart message-server
После запуска команды в терминале мы должны увидеть следующее сообщение:
Restarting message-server . done
Как только терминал запросит другую команду, мы можем подтвердить, что сервер сообщений был успешно перезапущен, выполнив команду Docker ps для проверки состояния всех запущенных процессов:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b6541d1c4ddf product-server:latest "java -jar /product-…" 10 minutes ago Up 42 seconds 0.0.0.0:19999->9999/tcp product-server 1d07d2a7ed7d message-server:latest "java -jar /message-…" 10 minutes ago Up 15 seconds 0.0.0.0:18888->8888/tcp message-server
Наконец, мы можем определить, что команда успешно перезапустила контейнер сервера сообщений , просмотрев столбец STATUS . Мы можем видеть, что служба сервера сообщений была запущена и работала в течение меньшего периода времени, чем служба сервера продукта , которая была запущена с тех пор, как мы выполнили команду docker-compose up в предыдущем разделе.
4.2. Восстановление и перезапуск
Если контейнер необходимо обновить с помощью последнего кода, выполнения команды перезагрузки недостаточно, поскольку служба должна сначала собраться, чтобы принять изменения кода.
Когда оба контейнера запущены, давайте сначала изменим код, чтобы подтвердить, что мы обновим службу последним кодом перед перезапуском. В классе DockerProductController давайте изменим оператор return , чтобы он выглядел следующим образом:
public String getMessage() return "This is a brand new product"; >
Теперь давайте соберем пакет Maven:
Как в docker-compose перезапустить запущенный контейнер с пересборкой
После редактирования Dockerfile или docker-compose.yml файла, например, прообрасывания порта или добавления волюма, изменения не вступают автоматически! Даже если сделать restart контейнера то всё-равно ничего не изменится. Чтобы применить изменения к контейнеру его нужно пересобрать (build).
How to rebuild docker container in docker-compose.yml?
Проще всего сделать это одной командой:
docker-compose up -d --no-deps --build nginx
На экран будет выведено что-то типа:
Recreating balancer_nginx_1 . Recreating balancer_nginx_1 . done
И через несколько секунд контейнер с нужными свойствами будет запущен. Эта команда выполняет несколько действий: пересобирает образ, создаёт новый контейнер на основе нового образа, останавливает старый контейнер, запускает новый контейнер, удаляет старый контейнер.
Обратите внимание, т.к. контейнер будет пересоздан, все изменения в нём не сохранённые во внешние хранилища будут утеряны!
Если нужно будет пересобрать все сервисы, то можно запустить ту же команду без указания сервиса:
docker-compose up -d --no-deps --build
Принудительно пересобрать docker-контейнер
Если вы не делали никаких изменений в файлах Dockerfile или docker-compose.yml, но при этом поменяли содержимое файлов, которые добавляются в образ с помощью ADD, COPY или VOLUME во время сборки контейнера вы получите такое сообщение при попытке пересборки:
project_service_1 is up-to-date
Если действительно нужно перезапустить контейнер потеряв всё его состояние не сохранённое во внешние источники, например, в волюмы, то достаточно добавить в команду аргумент —force-recreate:
docker-compose up --force-recreate -d php
Post Views: 27 487
Читайте также
Основы Docker И ещё одна интересная выжимка фактов о докере, которая поможет в кратчайшие сроки начать его продуктивное использование. Цель данной статьи…
Ротация логов docker контейнеров В продолжение прошлой статьи рассмотрим пример настройки ротации логов контейнеров на примере CentOs 7. В моём случае stdout и stderr контейнеров…
Portainer — web-ui для управления Docker Короткая заметка о том, как упростить себе жизнь при работе с докером. Если честно, это это единственная админка, которую я…