Список контейнеров docker: Шпаргалка с командами Docker / undefined / Хабр

Содержание

Шпаргалка с командами Docker / undefined / Хабр

Прим. перев.: Неделю назад 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 '{{ .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

Удаление всех контейнеров со статусом 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 "^<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


Установка 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-репозитории. Автор будет рад исправлениям/пополнениям от сообщества.

Читайте также в нашем блоге:

Список контейнеров Docker | Losst

Продолжение серии статей про Docker. В прошлой мы разбирали, как создать контейнер на основе образа. Сегодня же хочу более подробно рассказать, как посмотреть список контейнеров, чтобы понять, какие из них запущены, какие упали, а какие вообще следовало бы удалить, чтобы они не занимали места на диске.

Для просмотра списка контейнеров используется команда docker ps. Она позволяет смотреть как запущенные контейнеры Docker, так и все контейнеры, которые есть в системе.

Содержание статьи:

Синтаксис команды docker ps

В синтаксисе команды вообще нет ничего сложного:

$ docker ps опции

Вот её основные опции:

  • —all , -a — вывести все контейнеры, и запущенные и не запущенные;
  • —filter , -f — фильтровать контейнеры при выводе;
  • —format — более красивый вывод списка контейнеров;
  • —last , -n — показать только N последних созданных контейнеров;
  • —latest , -l — вывести только последний контейнер;
  • —no-trunc — не обрезать вывод программы;
  • —quiet , -q — отображать только цифровые идентификаторы контейнеров;
  • —size , -s — отображать размер контейнера.

А теперь разберёмся более подробно, как посмотреть контейнеры Docker.

Запущенные контейнеры Docker

По умолчанию docker ps выводит только запущенные контейнеры и при этом обрезает слишком длинные поля:

docker ps

Чтобы вывести контейнеры, не обрезая информацию, используйте параметр —no-trunc:

docker ps --no-trunc

Для того чтобы посмотреть не только запущенные контейнеры, а все, используйте опцию -a:

docker ps -a

Вы можете фильтровать контейнеры по имени, например, вывести только те, в имени которых содержится Ubuntu1804:

docker ps --filter name=Ubuntu1804

Есть и другие фильтры, но я не буду здесь их описывать, если они вам нужны, посмотрите официальную документацию. Для того чтобы вывести в список контейнеров Docker дополнительно размер контейнера, используйте опцию -s:

docker ps -a -s

Команда показывает два размера. Первый из них — это объём, занимаемый записываемой частью контейнера. Второй размер -виртуальный, это общее пространство, занимаемое и записываемой частью контейнера, и доступными только для чтения данными образа.

Опция -l может использоваться для просмотра только последнего созданного образа. Это может быть полезно, например, чтобы узнать его идентификатор:

docker ps -l

Если вас интересует, где хранятся контейнеры docker , то тут вам поможет команда docker inspect. Она позволяет смотреть подробную информацию про контейнер. У контейнера есть несколько папок для различных целей, давайте посмотрим MergedDir:

docker inspect --format='{{json .GraphDriver.Data.MergedDir}}' PhpMyAdmin

С тем же успехом вы можете смотреть LogPath или другие директории контейреа.

Выводы

Из этой статьи вы узнали, как выполнить просмотр контейнеров Docker. Это довольно простая задача по сравнению с созданием контейнера, но тоже не менее важная.

Установка Docker Portainer | Losst

В последнее время Docker набирает всё больше и больше популярности благодаря возможности быстро развертывать сложные приложения, состоящие из большого количества сервисов. Portainer — это система управления docker контейнерами в Linux. Она позволяет управлять как локальными контейнерами, так и удалёнными с помощью Docker API.

С помощью Portainer вы сможете отслеживать состояние контейнеров, запускать, останавливать и удалять их, развертывать новые приложения, а также многое другое. Сегодня мы поговорим как выполняется установка Docker Portainer на ваш компьютер, а также как пользоваться программой

Содержание статьи:

Как установить Docker Portainer

Для выполнения этой статьи вам понадобится уже установленный в вашей системе Docker. Я не буду подробно рассказывать как установить docker и docker-compose. Для этого воспользуйтесь этой статьей для Ubuntu или этой для CentOS.

После того, как Docker будет установлен, можно развернуть контейнер с Portainer. Было бы странно, если бы программа поставлялась в каком-либо другом виде. Создайте хранилище данных для Portainer:

docker volume create portainer_data

Для установки и запуска контейнера выполните:

docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Эта команда настраивает автоматический запуск Portainer после перезагрузки, а также постоянное хранилище, чтобы ваши настройки не потерялись при удалении и повторном разворачивании контейнера. Чтобы убедится, что Portainer запущен выполните такую команду:

docker ps

Настройка Portainer

1. Вход

Получить доступ к программе вы можете через веб-интерфейс на порту 9000. Откройте его в браузере. На первом шаге надо будет ввести имя пользователя и пароль, под которым вы будете входить в систему:

Затем выберите метод подключения к Docker. Для начала можно подключиться к локальному сервису Docker. Для этого выберите Local:

2. Список узлов и контейнеров

После нажатия кнопки Connect вы попадите в панель управления контейнерами:

Сначала вам надо выбрать узел, на котором вы будете управлять контейнерами, в данном случае, это local. Здесь вы можете уже управлять вашими контейнерами. Например, в разделе Containers можно посмотреть все доступные контейнеры:

А в разделе Stacks — все доступные приложения:

3. Разворачивание приложения

В разделе App Templates вы можете развернуть новое приложение на основе одного из существующих шаблонов. Например, давайте развернем WordPress. Для этого найдите его в списке:

Затем шаблон надо настроить. В данном случае, надо указать пароль для базы данных и имя приложения:

После этого нажмите кнопку Deploy the stack и новое приложение появится в списке раздела Stasks. Как видите, теперь программа сообщает, что у неё есть полный контроль над этим приложением, потому что она его создала:

 

4. Управление приложением

Если вы откроете приложение, там будут отображены его контейнеры. По каждому контейнеру можно посмотреть логи, открытые порты и даже подключится через терминал. Чтобы увидеть логи нажмите на иконку похожую на записную книжку возле состояния контейнера:

Для командной строки рядом есть значок с символом приглашения ввода. Вот так выглядит командная строка:

А открытые порты находятся в самом конце характеристик контейнера в разделе Published ports:

Если вы кликните по ссылке с надписью 32768:80 для контейнера WordPress, то попадёте на сайт WordPress:

Как обновить Portainer

Чтобы обновить Portainer надо удалить текущий образ и запустить его снова. Это не вызовет никаких проблем, так как при создании предыдущего образа мы использовали внешнее хранилище для хранения данных. Остановите образ и удалите его:

docker stop portainer
docker rm portainer

Скачайте новую версию:

docker pull portainer/portainer

Затем осталось снова установить Portainer:

docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Выводы

Как видите установка Portainer очень простая, если у вас есть уже установленный docker, а далее программа только помогает пользоваться контейнерами. Вы можете подключить к ней и удалённые узлы, однако для этого надо, чтобы у них был публичный IP адрес, потому что в локальной сети взаимодействовать с ними вы не сможете. А вы используете Portainer или пользуетесь другим интерфейсом для управления Docker? Напишите в комментариях!

Как вывести список контейнеров в Docker

Docker – это платформа для контейнеризации, которая позволяет быстро создавать, тестировать и развертывать приложения в виде переносимых самодостаточных контейнеров, которые могут работать практически везде. Это де-факто стандарт для развертывания контейнеров, и это важный инструмент для инженеров DevOps и их непрерывной интеграции и конвейера доставки.

В этой статье мы расскажем, как составить список контейнеров Docker.

 

Команда Docker для вывода списка контейнеров имеет следующий вид:

docker container ls [options]

Старые версии Docker до 1.13 используют другую команду для вывода списка контейнеров:

Приведенная выше команда все еще поддерживается в более новых версиях Docker, где команда ps является псевдонимом container ls.

Для просмотра списка запущенных контейнеров выполните команду docker container ls без каких-либо опций:

Вывод будет выглядеть примерно так:

CONTAINER ID    IMAGE        COMMAND                  CREATED        STATUS        PORTS       NAMES
c8bded53da86    postgres     "docker-entrypoint.s…"   2 hours ago    Up 2 hours    5432/tcp    pg
571c3a115fcf    redis        "docker-entrypoint.s…"   4 hours ago    Up 4 hours    6379/tcp    cache
05ef6d8680ba    nginx        "nginx -g 'daemon of…"   2 hours ago    Up 2 hours    80/tcp      web

Каждая строка вывода включает в себя следующие столбцы:

  • Container ID – Уникальная буквенно-цифровая строка, которая идентифицирует каждый контейнер.
  • Image – Образ Docker, используемый для создания контейнера.
  • Command – Команда, которая выполняется при запуске контейнера.
  • Created – Время создания контейнера.
  • Status – Статус контейнера.
  • Ports – Опубликованные порты контейнера.
  • Name – название контейнера.

Если запущенных контейнеров нет, отображается только строка заголовка.

Опция -a, –all указывает docker container ls распечатать список всех контейнеров:

CONTAINER ID    IMAGE        COMMAND                  CREATED        STATUS                    PORTS       NAMES
b28cbaa91f15    couchbase    "/entrypoint.sh couc…"   5 hours ago    Exited (0) 3 hours ago                db
c8bded53da86    postgres     "docker-entrypoint.s…"   2 hours ago    Up 2 hours                5432/tcp    pg
571c3a115fcf    redis        "docker-entrypoint.s…"   4 hours ago    Up 4 hours                6379/tcp    cache
05ef6d8680ba    nginx        "nginx -g 'daemon of…"   2 hours ago    Up 2 hours                80/tcp      web

По умолчанию столбцы с длиной, превышающей указанный предел, усекаются. Используйте опцию –no-trunc, чтобы отключить усечение:

docker container ls --no-trunc

Чтобы отображались только идентификаторы контейнеров, передайте опция -q, –quiet:

c8bded53da86
571c3a115fcf
05ef6d8680ba

–format позволяет форматировать вывод, используя шаблон Go. Например, чтобы напечатать только имена и статус контейнеров, включая заголовок, который вы запустите:

docker container ls --format 'table {{.Names}}\t{{.Status}}'
NAMES    STATUS
pg       Up 2 hours
cache    Up 4 hours
web      Up 2 hours

Используйте -s, –size для просмотра размера контейнеров:

Каждая строка будет содержать столбец с именем SIZE, который показывает размер контейнера:

CONTAINER ID    IMAGE        COMMAND                  CREATED        STATUS        PORTS       NAMES    SIZE
c8bded53da86    postgres     "docker-entrypoint.s…"   2 hours ago    Up 2 hours    5432/tcp    pg       63B (virtual 394MB)
571c3a115fcf    redis        "docker-entrypoint.s…"   4 hours ago    Up 4 hours    6379/tcp    cache    0B (virtual 98.2MB)
05ef6d8680ba    nginx        "nginx -g 'daemon of…"   2 hours ago    Up 2 hours    80/tcp      web      2B (virtual 126MB)

Опция –last, -n указывает команде отображать n последних созданных контейнеров, включая все состояния. Например, для просмотра последних двух созданных контейнеров вы должны запустить:

CONTAINER ID    IMAGE        COMMAND                  CREATED        STATUS                    PORTS       NAMES
b28cbaa91f15    couchbase    "/entrypoint.sh couc…"   5 hours ago    Exited (0) 3 hours ago                db
c8bded53da86    postgres     "docker-entrypoint.s…"   2 hours ago    Up 2 hours                5432/tcp    pg

Существует также возможность перечислить только последний созданный контейнер –latest, -l, который совпадает с -n 1:

Опция –filter, -f позволяет вам фильтровать выходные данные на основе определенных критериев. Например, чтобы просмотреть только контейнеры со статусом exited, вы должны запустить:

docker container ls -f "status=exited"
CONTAINER ID    IMAGE        COMMAND                  CREATED        STATUS                    PORTS       NAMES
b28cbaa91f15    couchbase    "/entrypoint.sh couc…"   5 hours ago    Exited (0) 3 hours ago                db

Список всех поддерживаемых фильтров можно найти в документации Docker.

Контейнер Docker – это автономный экземпляр образа во время выполнения.

Чтобы вывести список Docker-контейнеров, используйте команду docker container ls или ее псевдоним docker ps.

Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Команда запуска Docker с примерами

Docker – это платформа, которая позволяет вам разрабатывать, тестировать и развертывать приложения в виде переносимых самодостаточных контейнеров, которые работают практически везде.

Команда docker run создает контейнер из заданного изображения и запускает контейнер, используя данную команду. Это одна из первых команд, с которыми вам следует ознакомиться при начале работы с Docker.

В этой статье мы будем использовать официальный образ Nginx, чтобы показать различные способы запуска контейнера Docker.

 

Команда docker run принимает следующую форму:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Имя образа, из которого должен быть создан контейнер, является единственным обязательным аргументом для команды docker run. Если образ отсутствует в локальной системе, он извлекается из реестра.

Если команда не указана, при запуске контейнера выполняется команда, указанная в файле Dockerfile инструкциях CMD или ENTRYPOINT.

Начиная с версии 1.13, интерфейс командной строки Docker был реструктурирован, и все команды были сгруппированы по объекту, с которым они взаимодействуют.

Поскольку команда run взаимодействует с контейнерами, теперь она является подкомандой docker container. Синтаксис новой команды следующий:

docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

Старый, до 1.13 синтаксис все еще поддерживается. Под капотом команда docker run является псевдонимом docker container run. Пользователям рекомендуется использовать новый командный синтаксис.

Список всех опций docker container run можно найти на странице документации Docker.

 

По умолчанию, когда команда docker run не предоставляет никаких опций, корневой процесс запускается на переднем плане. Это означает, что стандартный ввод, вывод и ошибка корневого процесса привязаны к сеансу терминала.

docker container run nginx

Вывод процесса nginx будет отображаться на вашем терминале. Поскольку нет никаких подключений к веб-серверу, терминал пуст.

Чтобы остановить контейнер, завершите запущенный процесс Nginx, нажав CTRL+C.

 

Чтобы контейнер продолжал работать при выходе из сеанса терминала, запустите его в отдельном режиме. Это похоже на запуск процесса Linux в фоновом режиме.

Используйте опцию -d для запуска отдельного контейнера:

docker container run -d nginx
050e72d8567a3ec1e66370350b0069ab5219614f9701f63fcf02e8c8689f04fa

Отсоединенный контейнер остановится после завершения корневого процесса.

Вы можете просмотреть список запущенных контейнеров, используя команду docker container ls.

Чтобы подключить свой терминал к корневому процессу отсоединенного контейнера, используйте команду docker container attach.

 

По умолчанию при выходе из контейнера его файловая система сохраняется в хост-системе.

Команда –rm options говорит команде docker запустить удаление контейнера при его автоматическом выходе:

docker container run --rm nginx

Изображение Nginx может быть не лучшим примером для очистки файловой системы контейнера после выхода из контейнера. Этот параметр обычно используется в контейнерах переднего плана, которые выполняют краткосрочные задачи, такие как тестирование или резервное копирование базы данных.

 

В Docker каждый контейнер идентифицируется своим именем UUID. По умолчанию, если не указано иное, имя контейнера автоматически генерируется демоном Docker.

Используйте опцию –name, чтобы назначить пользовательское имя для контейнера:

docker container run -d --name my_nginx nginx

Имя контейнера должно быть уникальным. Если вы попытаетесь запустить другой контейнер с тем же именем, вы получите ошибку, подобную этой:

docker: Error response from daemon: Conflict. The container name "/my_nginx" is already in use by container "9...c". You have to remove (or rename) that container to be able to reuse that name.

Запустите команду docker container ls -a, чтобы вывести список всех контейнеров и посмотрите их названия:

CONTAINER ID  IMAGE  COMMAND                 CREATED         STATUS         PORTS   NAMES
9d695c1f5ef4  nginx  "nginx -g 'daemon of…"  36 seconds ago  Up 35 seconds  80/tcp  my_nginx

Значимые имена полезны для ссылки на контейнер в сети Docker или при выполнении команд командной строки Docker.

 

По умолчанию, если порты не опубликованы, процесс, запущенный в контейнере, доступен только внутри контейнера.

Публикация портов означает сопоставление портов контейнера с портами хост-машины, чтобы порты были доступны для служб за пределами Docker.

Чтобы опубликовать порт, используйте следующий параметр -p:

-p host_ip:host_port:container_port/protocol
  • Если не указан host_ip, по умолчанию 0.0.0.0.
  • Если не указан protocol, по умолчанию используется TCP.
  • Чтобы опубликовать несколько портов, используйте несколько параметров -p.

Чтобы сопоставить порт TCP 80 (nginx) в контейнере с портом 8080 на интерфейсе локального хоста, вы должны выполнить:

docker container run --name web_server -d -p 8080:80 nginx

Вы можете убедиться, что порт опубликован, открыв http://localhost:8080 в браузере или выполнив команду curl на хосте Docker:

curl -I http://localhost:8080

Вывод будет выглядеть примерно так:

HTTP/1.1 200 OK
Server: nginx/1.17.6
Date: Tue, 27 Nov 2019 07:35:21 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 24 Nov 2019 15:45:22 GMT
Connection: keep-alive
ETag: "5dd3e500-264"
Accept-Ranges: bytes

Когда контейнер останавливается, все данные, сгенерированные контейнером, удаляются. Тома Docker являются предпочтительным способом сохранения данных и их совместного использования в нескольких контейнерах.

Для создания томов и управления ими используйте следующий параметр -p:

-v host_src:container_dest:options
  • host_src – Может быть абсолютный путь к файлу или каталогу на хосте или имени тома.
  • container_dest – Абсолютный путь к файлу или директории на контейнере.
  • Варианты могут быть rw (чтение-запись) и ro (только чтение). Если опция не указана, по умолчанию rw.

Чтобы объяснить, как это работает, давайте создадим каталог на хосте и поместим index.html в него файл:

mkdir public_html
echo "Testing Docker Volumes" > public_html/index.html

Затем подключите каталог public_html в контейнере /usr/share/nginx/html:

docker run --name web_server -d -p 8080:80 -v $(pwd)/public_html:/usr/share/nginx/html nginx

Вместо указания абсолютного пути к каталогу public_html мы используем команду $(pwd), которая печатает текущий рабочий каталог.

Теперь, если вы наберете http://localhost:8080 в своем браузере, вы должны увидеть содержимое файла index.html. Вы также можете использовать curl:

curl http://localhost:8080

При работе с такими интерактивными процессами, как bash, используйте параметры -i и -t для запуска контейнера.

Опции -it говорят DOCKER держать стандартный ввод, прикрепленный к терминалу и выделить псевдо-терминал:

docker container run -it nginx /bin/bash

Оболочка Bash контейнера будет присоединена к терминалу, и командная строка изменится:

Теперь вы можете взаимодействовать с оболочкой контейнера и выполнять любую команду внутри него.

В этом примере мы предоставили command ( /bin/bash) в качестве аргумента для команды docker run, которая была выполнена вместо той, которая указана в Dockerfile.

 

Docker является стандартом для упаковки и развертывания приложений и важным компонентом CI/CD, автоматизации и DevOps.

Команда docker container run используется для создания и запуска контейнеров Docker.

Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Как остановить Docker контейнеры | ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

В этой статье по Docker обсуждаются способы остановки одного Docker-контейнера, нескольких Docker-контейнеров или всех запущенных Docker-контейнеров одновременно. Вы также научитесь грациозно останавливать Docker контейнер.

Чтобы остановить контейнер Docker, все, что вам нужно сделать, это использовать идентификатор контейнера или имя контейнера следующим образом:

docker stop container_ID_or_name

Вы также можете использовать команду docker container stop container_id_or_name, но это еще одно слово в команде, которое не дает никаких дополнительных преимуществ, поэтому придерживайтесь docker stop.

Но есть еще кое-что, что нужно знать об остановке Docker-контейнера, особенно если вы новичок в Docker.

 

Практические примеры остановки Docker-контейнера

В этой статье мы расскажем о различных аспектах остановки Docker-контейнера:

  • Остановка Docker-контейнера
  • Остановка нескольких Docker-контейнеров одновременно
  • Остановка всех Docker-контейнеров с определенным изображением
  • Остановка всех запущенных Docker-контейнеров сразу
  • Изящная остановка Docker контейнера

Прежде чем вы увидите это, вы должны знать, как получить имя контейнера или идентификатор.

Вы можете получить список всех запущенных контейнеров Docker с помощью команды docker ps. Без каких-либо опций команда docker ps показывает только запущенные контейнеры.

[email protected]:~$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
1bcf775d8cc7        ubuntu              "bash"              8 minutes ago       Up About a minute                       container-2
94f92052f55f        debian              "bash"              10 minutes ago      Up 10 minutes                           container-1

Вывод также дает вам имя контейнера и идентификатор контейнера. Вы можете использовать любой из этих двух, чтобы остановить контейнер.

Теперь давайте остановимся на контейнерах.

 

1. Остановка Docker контейнера

Чтобы остановить определенный контейнер, используйте его идентификатор или имя с командой docker stop:

docker stop container_name_or_ID

 

Вывод должен быть более описательным, но он просто показывает имя контейнера или идентификатор, какой бы вы ни указали:

[email protected]:~$ docker stop 1bcf775d8cc7
1bcf775d8cc7

Вы можете использовать команду docker stop для уже остановленного контейнера. Он не будет выдавать никаких ошибок или другого выхода.

Вы можете проверить, остановлен ли контейнер, с помощью команды docker ps -a. Опция -a показывает все контейнеры, запущены они или остановлены.

[email protected]:~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
1bcf775d8cc7        ubuntu              "bash"              19 minutes ago      Exited (0) About a minute ago                       container-2
94f92052f55f        debian              "bash"              29 minutes ago      Up 29 minutes                                   container-1

 

Если статус «Выход», это означает, что контейнер больше не работает.

 

2. Остановка несколько Docker-контейнеров

Вы также можете остановить несколько Docker-контейнеров одновременно. Вы просто должны предоставить имена контейнеров и идентификаторы.

docker stop container_id_or_name_1 container_id_or_name_2 container_id_or_name_3

 

Как и ранее, вывод будет просто отображать имя или идентификатор контейнеров:

[email protected]:~$ docker stop container-1 container-2 container-3
container-1
container-2
container-3

 

3. Остановка всех контейнеров, связанные с изображением

До сих пор вы видели, как останавливали контейнеры, явно указав их имя или идентификатор.

Что если вы хотите остановить все запущенные контейнеры определенного образа Docker? Представьте себе сценарий, в котором вы хотите удалить образ докера, но вам придется остановить все связанные запущенные контейнеры.

Вы можете предоставить имена контейнеров или идентификаторы один за другим, но это отнимает много времени. Что вы можете сделать, так это отфильтровать все работающие контейнеры на основе их базового образа.

Просто замените IMAGE_NAME именем вашего образа докера, и вы сможете остановить все запущенные контейнеры, связанные с этим образом.

docker ps -q --filter ancestor=IMAGE_NAME | xargs docker stop

Опция -q показывает только идентификатор контейнера. Благодаря замечательной команде xargs эти идентификаторы контейнера передаются в качестве аргумента до остановки докера.

 

4. Остановка всех работающих docker -контейнеров.

Вы можете столкнуться с ситуацией, когда вам необходимо остановить все работающие контейнеры.

Для этого вы можете использовать нечто похожее на то, что вы видели в предыдущем разделе. Просто удалите часть изображения.

docker ps -q | xargs docker stop

 

5. Изящная остановка контейнера

Если честно, docker по умолчанию корректно останавливает контейнер. Когда вы используете команду docker stop, она дает контейнеру 10 секунд, прежде чем принудительно убить его.

Это не значит, что для остановки контейнера всегда требуется 10 секунд. Просто если в контейнере запущены некоторые процессы, у него есть 10 секунд, чтобы остановить процесс и выйти.

Команда остановки Docker сначала отправляет команду SIGTERM. Если конейнер останавливается в этот период, он отправляет команду SIGKILL.

Процесс может игнорировать SIGTERM, но SIGKILL немедленно завершит процесс.

Вы можете изменить этот льготный период в 10 секунд с помощью опции -t. Предположим, вы хотите подождать 30 секунд, прежде чем остановить контейнер:

docker stop -t 30 container_name_or_id

 

В конце…

Мы думаем, что эта большая информация охватывает тему очень хорошо. Вы знаете много вещей об остановке контейнера докера.

Следите за новыми статьями по docker. Если у вас есть вопросы или предложения, пожалуйста, дайте нам знать в разделе комментариев.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

док-контейнер | Документация Docker

docker container attach Присоединить локальные стандартные потоки ввода, вывода и ошибок к работающему контейнеру
фиксация контейнера докеров Создать новый образ из изменений контейнера
док-контейнер CP Копирование файлов / папок между контейнером и локальной файловой системой
контейнер докеров создать Создать новый контейнер
докер контейнер diff Проверять изменения файлов или каталогов в файловой системе контейнера
docker container exec Выполнить команду в работающем контейнере
докер контейнер экспорт Экспорт файловой системы контейнера в виде архива tar
докер-контейнер осмотр Показать подробную информацию об одном или нескольких контейнерах
Докер контейнер убивает Убить один или несколько работающих контейнеров
журналы контейнеров докеров Получить журналы контейнера
док-контейнер ls Список контейнеров
докер контейнер пауза Приостановить все процессы в одном или нескольких контейнерах
порт контейнера докеров Список сопоставлений портов или конкретное сопоставление для контейнера
докер контейнер prune Удалить все остановленные контейнеры
переименование контейнера докеров Переименовать контейнер
перезапуск док-контейнера Перезапустить один или несколько контейнеров
док-контейнер RM Удалить один или несколько контейнеров
докер контейнерный запуск Запустить команду в новом контейнере
начало контейнера докеров Запуск одного или нескольких остановленных контейнеров
статистика контейнера докеров Отображение реального потока статистики использования ресурсов контейнера (ов)
докер-контейнеровоз Остановить один или несколько работающих контейнеров
док-контейнер сверху Показать запущенные процессы контейнера
докер контейнер unpause Остановить все процессы в одном или нескольких контейнерах
обновление контейнера докеров Обновление конфигурации одного или нескольких контейнеров
докер-контейнер ожидание Блокируйте, пока не остановятся один или несколько контейнеров, затем распечатайте их коды выхода

докер пс | Документация Docker

Описание

Список контейнеров

Использование

Примеры использования этой команды см. В разделе примеров ниже.

Опции

Сокращенное наименование По умолчанию Описание
--all, -a Показать все контейнеры (по умолчанию показаны только запущенные)
--фильтр, -f Выход фильтра на основе заданных условий
--формат Контейнеры Pretty-print с использованием шаблона Go
--последний, -n –1 Показать n последних созданных контейнеров (включая все состояния)
- последний, -l Показать последний созданный контейнер (включает все состояния)
- без усечения Не обрезать вывод
- тихий, -q Отображать только числовые идентификаторы
--размер, -s Показать общий размер файлов

Примеры

Предотвратить усечение вывода

Запуск docker ps --no-trunc , показывающий 2 связанных контейнера.

  $ докер пс

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЯ ПОРТОВ
4c01db0b339c ubuntu: 12.04 bash 17 секунд назад вверх на 16 секунд 3300-3310 / tcp webapp
d7886598dbe2 crossbymichael / redis: latest / redis-server --dir 33 минуты назад Вверх 33 минуты 6379 / tcp redis, webapp / db
  

Показать как работающие, так и остановленные контейнеры

Команда docker ps по умолчанию показывает только запущенные контейнеры.Чтобы увидеть все контейнеров используйте флаг -a (или --all ):

docker ps по возможности группирует открытые порты в один диапазон. Например, a контейнер, который предоставляет TCP-порты 100, 101, 102 , отображает 100-102 / tcp в колонка ПОРТЫ .

Показать использование диска контейнером

Команда docker ps -s отображает два разных размера на диске для каждого контейнера:

  $ докер ps -s

КОНТЕЙНЕР ID ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ПОРТЫ ИМЯ РАЗМЕР РАЗМЕР
e90b8831a4b8 nginx "/ bin / bash -c 'mkdir" 11 недель назад Вверх на 4 часа my_nginx 35.58 кБ (виртуальный 109,2 МБ)
00c6131c5e30 telegraf: 1.5 "/entrypoint.sh" 11 недель назад Up 11 недель my_telegraf 0 Б (виртуальный 209,5 МБ)
  
  • Информация «размер» показывает объем данных (на диске), который используется для уровня с возможностью записи каждого контейнера
  • «Виртуальный размер» — это общий объем дискового пространства, используемого для данных изображения только для чтения, данных, используемых контейнером и доступным для записи слоем.

Дополнительные сведения см. В разделе о размере контейнера на диске.

Фильтрация

Формат флага фильтрации ( -f или --filter ) представляет собой пару ключ = значение . Если есть еще чем один фильтр, затем передайте несколько флагов (например, --filter "foo = bar" --filter "bif = baz" )

В настоящее время поддерживаются следующие фильтры:

Фильтр Описание
id ID контейнера
наименование Наименование контейнера
этикетка Произвольная строка, представляющая либо ключ, либо пару «ключ-значение».Выражается как <ключ> или <ключ> = <значение>
выход Целое число, представляющее код выхода контейнера. Полезно только с - все .
статус Один из создан , перезапущен , запущен , удален , приостановлен , завершен или мертв
предок Фильтрует контейнеры, которые используют данное изображение в качестве предка.Выражается как <имя-изображения> [: <тег>] , <идентификатор изображения> или <изображение @ дайджест>
до или с Фильтрует контейнеры, созданные до или после данного идентификатора или имени контейнера
объем Фильтрует запущенные контейнеры, которые смонтировали данный том или привязку.
сеть Фильтрует запущенные контейнеры, подключенные к данной сети.
опубликовать или раскрыть Фильтрует контейнеры, которые публикуют или раскрывают данный порт. Выражается как <порт> [/ <протокол>] или <порт-конец-порт> / [<протокол>]
здоровье Фильтрует контейнеры на основе их статуса проверки работоспособности. Один из , начиная с , здоровый , нездоровый или нет .
изоляция Только для демона Windows.Один из по умолчанию , процесс или hyperv .
задача Фильтрует контейнеры, которые являются «задачей» для службы. Логическая опция ( истина или ложь )
этикетка

Фильтр ярлыка подбирает контейнеры на основе наличия только ярлыка или ярлыка и значение.

Следующий фильтр соответствует контейнерам с ярлыком color независимо от его значения.

  $ docker ps --filter "label = color"

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
673394ef1d4c busybox "top" 47 секунд назад Вверх 45 секунд nostalgic_shockley
d85756f57265 busybox "top" 52 секунды назад Вверх на 51 секунду high_albattani
  

Следующий фильтр сопоставляет контейнеры с меткой цвет со значением синий .

  $ docker ps --filter "label = color = blue"

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
d85756f57265 busybox "вверху" Около минуты назад вверх Около минуты high_albattani
  
название

Имя Фильтр соответствует всему или части имени контейнера.

Следующий фильтр соответствует всем контейнерам с именем, содержащим строку nostalgic_stallman .

  $ docker ps --filter "name = nostalgic_stallman"

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
9b6247364a03 busybox "top" 2 минуты назад Вверх 2 минуты nostalgic_stallman
  

Вы также можете отфильтровать подстроку в имени, как показано ниже:

  $ docker ps --filter "name = nostalgic"

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
715ebfcee040 busybox "top" 3 секунды назад вверх на 1 секунду i_am_nostalgic
9b6247364a03 busybox "top" 7 минут назад Вверх 7 минут nostalgic_stallman
673394ef1d4c busybox "top" 38 минут назад Вверх на 38 минут nostalgic_shockley
  
вышел

завершил фильтр соответствует контейнерам по существующему коду состояния.Например, чтобы фильтр для контейнеров, которые успешно завершились:

  $ docker ps -a --filter 'exited = 0'

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
ea09c3c82f6e реестр: последний /srv/run.sh 2 недели назад Завершился (0) 2 недели назад 127.0.0.1:5000->5000/tcp desperate_leakey
106ea823fe4e fedora: latest / bin / sh -c 'bash -l' 2 недели назад Завершился (0) 2 недели назад defined_albattani
48ee228c9464 fedora: 20 bash 2 недели назад Выход (0) 2 недели назад тендер_torvalds
  
Фильтр по выходному сигналу

Вы можете использовать фильтр, чтобы найти контейнеры, которые завершились со статусом 137 то есть SIGKILL (9) убил их.

  $ docker ps -a --filter 'exited = 137'

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНА СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
b3e1c0ed5bfe ubuntu: последний "сон 1000" 12 секунд назад Завершился (137) 5 секунд назад grave_kowalevski
a2eb5558d669 redis: latest "/entrypoint.sh redi 2 часа назад Завершился (137) 2 часа назад sharp_lalande
  

Любое из этих событий приводит к статусу 137 :

  • init процесс контейнера остановлен вручную
  • docker kill убивает контейнер
  • Демон Docker перезапускается, что убивает все запущенные контейнеры
статус

Статус Фильтр соответствует контейнерам по статусу.Вы можете фильтровать, используя создан , перезапущен , запущен , удален , приостановлен , завершен, и мертв . Например, к фильтру для ходовых контейнеров:

  $ docker ps --filter status = running

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЯ ПОРТОВ
715ebfcee040 busybox "top" 16 минут назад Вверх 16 минут i_am_nostalgic
d5c976d3c462 busybox "вверху" 23 минуты назад вверх на 23 минуты вверх
9b6247364a03 busybox "top" 24 минуты назад Вверх 24 минуты nostalgic_stallman
  

Чтобы отфильтровать приостановленных контейнеров :

  $ docker ps --filter status = приостановлено

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНА СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
673394ef1d4c busybox "top" Около часа назад Вверх Около часа (Приостановлено) nostalgic_shockley
  
предок

Фильтр предка подбирает контейнеры на основе его образа или потомка Это.Фильтр поддерживает следующее представление изображения:

  • изображение
  • изображение: тег
  • изображение: tag @ digest
  • короткий идентификатор
  • полный идентификатор

Если вы не укажете тег , будет использоваться последний тег . Например, чтобы отфильтровать для контейнеров, использующих последний образ ubuntu :

  $ docker ps --filter ancestor = ubuntu

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
919e1179bdb8 ubuntu-c1 "вверху" Около минуты назад Вверх Около минуты admiring_lovelace
5d1e4a540723 ubuntu-c2 "вверху" Около минуты назад Вверх Около минуты admiring_sammet
82a598284012 ubuntu "вверху" 3 минуты назад Вверх на 3 минуты sleepy_bose
bab2a34ba363 ubuntu "top" 3 минуты назад Вверх на 3 минуты focus_yonath
  

Соответствие контейнерам на основе образа ubuntu-c1 , который в данном случае является дочерним из ubuntu :

  $ docker ps --filter ancestor = ubuntu-c1

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
919e1179bdb8 ubuntu-c1 "вверху" Около минуты назад Вверх Около минуты admiring_lovelace
  

Соответствие контейнерам на основе ubuntu версии 12.04.5 образ:

  $ docker ps --filter ancestor = ubuntu: 12.04.5

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
82a598284012 ubuntu: 12.04.5 "вверху" 3 минуты назад Вверх на 3 минуты sleepy_bose
  

Следующее соответствует контейнерам на основе слоя d0e008c6cf02 или изображения которые имеют этот слой в своем стеке слоев.

  $ docker ps --filter ancestor = d0e008c6cf02

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
82a598284012 ubuntu: 12.04.5 "вверху" 3 минуты назад Вверх на 3 минуты sleepy_bose
  
Время создания
до

Фильтр до показывает только контейнеры, созданные до контейнера с данный идентификатор или имя.Например, создав эти контейнеры:

  $ докер пс

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
9c3527ed70ce busybox "top" 14 секунд назад Вверх 15 секунд desperate_dubinsky
4aace5031105 busybox "top" 48 секунд назад Вверх на 49 секунд focus_hamilton
6e63f6ff38b0 busybox "top" Минуту назад Вверх Около минуты distracted_fermat
  

Фильтрация с до даст:

  $ docker ps -f before = 9c3527ed70ce

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
4aace5031105 busybox "вверху" Около минуты назад Вверх Около минуты focus_hamilton
6e63f6ff38b0 busybox "вверху" Минуту назад Вверх Около минуты distracted_fermat
  
с

Фильтр с показывает только контейнеры, созданные после контейнера с заданным id или имя.Например, с теми же контейнерами, что и в перед фильтром :

  $ docker ps -f с = 6e63f6ff38b0

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
9c3527ed70ce busybox "top" 10 минут назад вверх 10 минут desperate_dubinsky
4aace5031105 busybox "вверху" 10 минут назад вверх 10 минут Focus_hamilton
  
том

Фильтр объема показывает только контейнеры, которые устанавливают определенный объем или имеют том, смонтированный по определенному пути:

  $ docker ps --filter volume = remote-volume --format "table {{.ID}} \ t {{. Mounts}} "

КРЕПЛЕНИЯ КОНТЕЙНЕРА ID
9c3527ed70ce удаленный том

$ docker ps --filter volume = / data --format "table {{.ID}} \ t {{. Mounts}}"

КРЕПЛЕНИЯ КОНТЕЙНЕРА ID
9c3527ed70ce удаленный том
  
сеть

Сетевой фильтр показывает только контейнеры, подключенные к сети с данное имя или идентификатор.

Следующий фильтр соответствует всем контейнерам, подключенным к сети. с именем, содержащим net1 .

  $ docker run -d --net = net1 --name = test1 верхняя часть ubuntu
$ docker run -d --net = net2 --name = test2 верхняя часть ubuntu

$ docker ps --filter network = net1

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
9d4893ed80fe ubuntu "вверху" 10 минут назад Вверх 10 минут test1
  

Сетевой фильтр соответствует как имени, так и идентификатору сети. Продолжение пример показывает все контейнеры, которые подключены к сети net1 , используя идентификатор сети как фильтр;

  $ docker network inspect --format "{{.ID}} "net1

8c0b4110ae930dbe26b258de9bc34a03f98056ed6f27f991d32919bfe401d7c5

$ docker ps --filter network = 8c0b4110ae930dbe26b258de9bc34a03f98056ed6f27f991d32919bfe401d7c5

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
9d4893ed80fe ubuntu "вверху" 10 минут назад Вверх 10 минут test1
  
опубликовать и разоблачить

Публикация и предоставляют фильтры показывают только контейнеры, которые опубликовали или предоставили порт с данным портом номер, диапазон портов и / или протокол.Протокол по умолчанию — tcp , если не указан.

Следующий фильтр соответствует всем контейнерам, для которых опубликован порт 80:

  $ docker run -d --publish = 80 busybox вверх
$ docker run -d --expose = 8080 busybox вверх

$ docker ps -a

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНА СОСТОЯНИЕ НАЗВАНИЯ ПОРТОВ
9833437217a5 busybox "top" 5 секунд назад Вверх на 4 секунды 8080 / tcp dreamy_mccarthy
fc7e477723b7 busybox "вверху" 50 секунд назад вверх на 50 секунд 0.0.0.0: 32768-> 80 / tcp admiring_roentgen

$ docker ps --filter publish = 80

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
fc7e477723b7 busybox "вверху" Около минуты назад Вверх Около минуты 0.0.0.0:32768->80/tcp admiring_roentgen
  

Следующий фильтр соответствует всем контейнерам с открытым TCP-портом в диапазоне 8000-8080 :

  $ docker ps --filter expose = 8000-8080 / tcp

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
9833437217a5 busybox "top" 21 секунду назад вверх на 19 секунд 8080 / tcp dreamy_mccarthy
  

Следующий фильтр соответствует всем контейнерам с открытым UDP-портом 80 :

  $ docker ps --filter publish = 80 / udp

КОНТЕЙНЕР ИДЕНТИФИКАЦИЯ ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СОСТОЯНИЕ ИМЕНА ПОРТОВ
  

Форматирование

Параметр форматирования ( --format ) красиво печатает вывод контейнера с помощью Go шаблон.

Допустимые заполнители для шаблона Go перечислены ниже:

Заполнитель Описание
.ID ID контейнера
. Изображение ID изображения
. Команда Цитированная команда
.CreatedAt Время создания контейнера.
.RunningFor Время, прошедшее с момента запуска контейнера.
. Порты Открытые порты.
. Статус Состояние контейнера.
. Размер Размер диска контейнера.
. Наименования Названия контейнеров.
.Этикетки Все метки, присвоенные контейнеру.
. Этикетка Значение конкретной метки для этого контейнера. Например, '{{.Label "com.docker.swarm.cpu"}}'
. Крепления Имена томов, смонтированных в этом контейнере.
. Сети Имена сетей, подключенных к этому контейнеру.

При использовании параметра --format команда ps выводит данные точно так, как объявляет шаблон, или, при использовании директивы table , включает заголовки столбцов.

В следующем примере используется шаблон без заголовков и выводится ID и Команда записей, разделенных двоеточием (: ) для всех работающих контейнеров:

  $ docker ps --format "{{.ID}}: {{.Command}}"

a87ecb4f327c: / bin / sh -c # (nop) MA
01946d9d34d8: / bin / sh -c # (nop) MA
c1d3b0166030: / bin / sh -c yum -y up
41d50ecd2f57: / bin / sh -c # (nop) MA
  

Чтобы перечислить все запущенные контейнеры с их метками в формате таблицы, вы можете использовать:

  $ docker ps --format "table {{.ID}} \ t {{. Labels}} "

ЭТИКЕТКИ КОНТЕЙНЕРА
a87ecb4f327c com.docker.swarm.node = ubuntu, com.docker.swarm.storage = ssd
01946d9d34d8
c1d3b0166030 com.docker.swarm.node = debian, com.docker.swarm.cpu = 6
41d50ecd2f57 com.docker.swarm.node = fedora, com.docker.swarm.cpu = 3, com.docker.swarm.storage = ssd
  

Родительская команда

Команда Описание
докер Базовая команда для Docker CLI.

Контейнеры — Docker SDK для Python 4.3.1 документация

Запускать контейнеры на сервере и управлять ими.

Методы, доступные на client.containers :

class ContainerCollection ( client = None )
run ( image , command = None , ** kwargs )

Запустить контейнер. По умолчанию он будет ждать завершения контейнера и вернуть его журналы, аналогично запуску докера .

Если аргумент отсоединения равен Истина , он запустит контейнер и немедленно вернуть объект Container , аналогично docker run -d .

Пример

Запустите контейнер и получите его вывод:

 >>> импортный докер
>>> client = docker.from_env ()
>>> client.containers.run ('alpine', 'echo hello world')
привет мир \ n '
 

Запустить контейнер и отсоединить:

 >>> контейнер = клиент.container.run ('bfirsh / reticulate-splines',
                                      detach = True)
>>> container.logs ()
'Ретикулирующий шлиц 1 ... \ nРетикуляционный шлиц 2 ... \ n'
 
Параметры:
  • image ( str ) — Образ для запуска.
  • command ( str или list ) — Команда для запуска в контейнере.
  • auto_remove ( bool ) — включить автоматическое удаление контейнера на демоне сторона, когда процесс контейнера завершается.
  • blkio_weight_device — Вес блока IO (относительный вес устройства) в форма: [{"Путь": "путь_устройства", "Вес": вес}] .
  • blkio_weight — Вес блока ввода-вывода (относительный вес), принимает вес значение от 10 до 1000.
  • cap_add ( список str ) — Добавить возможности ядра. Например, ["SYS_ADMIN", "MKNOD"]

Что такое контейнер Docker? | Контейнеризуйте свое приложение с помощью Docker

Что ж, я надеюсь, что вы читали мои предыдущие блоги о Docker , где я рассказал об основах Docker.В этом блоге о контейнерах Docker я буду обсуждать, что такое контейнеры Docker и как они работают. В основном мы сосредоточимся на практических примерах и вариантах использования Docker.

Я перечислил темы этого блога о контейнерах Docker:

  • Зачем нам нужны контейнеры Docker?
  • Как работают контейнеры Docker?
  • Сценарии использования контейнера Docker

Зачем нам нужны контейнеры Docker?

До сих пор правильно помню, работал над проектом.В этом проекте мы следовали архитектуре микросервисов. Для тех из вас, кто не знает, что такое микросервис, не беспокойтесь, я расскажу вам о нем.

Идея микросервисов заключается в том, что определенные типы приложений становится проще создавать и поддерживать, когда они разбиты на более мелкие, составляемые части, которые работают вместе. Каждый компонент разрабатывается отдельно, и тогда приложение представляет собой просто сумму составляющих его компонентов.

Рассмотрим пример ниже:

На приведенной выше диаграмме показан интернет-магазин с отдельными микросервисами для учетной записи пользователя, каталога продуктов, обработки заказов и тележек для покупок.

Что ж, у этой архитектуры много преимуществ:

  • Даже если один из ваших микросервисов выйдет из строя, все ваше приложение в значительной степени не пострадает.
  • Легче управлять

Есть много других преимуществ, я не буду вдаваться в подробности о микросервисах в этом посте. Но скоро я напишу и пару блогов о микросервисах.

В этой архитектуре мы использовали виртуальные машины CentOS. Эти виртуальные машины были настроены путем написания длинных сценариев.Что ж, настройка этих виртуальных машин была не единственной проблемой.

Разработка таких приложений требует запуска нескольких микросервисов на одной машине. Итак, если вы запускаете пять из этих служб, вам потребуется пять виртуальных машин на этой машине. Рассмотрим диаграмму ниже:

Several Virtual Machines - Docker Container - Edureka

Другая проблема довольно распространена, я знаю, что многие из вас могут иметь к ней отношение. Приложение работает на портативном компьютере разработчика, но не в стадии тестирования или производства. Это может быть из-за несогласованности вычислительной среды.Рассмотрим диаграмму ниже:

Dev VS Prod - Docker Container - Edureka

Было много других проблем, помимо этой, но я чувствую, что этих проблем мне достаточно, чтобы объяснить вам необходимость контейнеров Docker.

Узнайте, чем контейнеры Docker лучше виртуальных машин

Итак, представьте, что я даю 8 ГБ ОЗУ всем своим виртуальным машинам, и у меня есть 5 микросервисов, работающих на разных виртуальных машинах. В этом случае этим виртуальным машинам потребуется 40 ГБ ОЗУ. Что ж, теперь мне нужно, чтобы конфигурация моей хост-машины была очень высокой, на моей хост-машине должно быть почти 44 ГБ ОЗУ.Очевидно, что это не жизнеспособное решение для такой архитектуры, потому что я зря трачу здесь много ресурсов.

Хорошо, у меня много ресурсов, которые можно тратить впустую, но все же у меня есть проблема несогласованности в моем жизненном цикле доставки программного обеспечения (SDLC). Я должен настроить эти виртуальные машины как в тестовой, так и в производственной среде. Где-то в этом процессе какое-то программное обеспечение не было обновлено на тестовом сервере, и команда разработчиков использует обновленную версию программного обеспечения. Это приводит к конфликтам.

Что делать, если я использую 100 виртуальных машин, тогда настройка каждой виртуальной машины займет много времени, и в то же время она также подвержена ошибкам.

Теперь давайте разберемся, что такое Docker Container и как он работает, и как он решил мою проблему.

Что такое контейнер Docker?

Docker — это инструмент, предназначенный для упрощения создания, развертывания и запуска приложений с использованием контейнеров.

Вы можете создавать контейнеры Docker, эти контейнеры будут содержать все двоичные файлы и библиотеки, необходимые для вашего приложения или микросервиса в моем случае. Итак, ваше приложение присутствует в контейнере, или вы поместили свое приложение в контейнер.Теперь этот же контейнер можно использовать в среде Test и Prod.

Контейнеры Docker — это облегченное решение для виртуальных машин, использующее ОС хоста. Самое приятное, что вам не нужно заранее выделять оперативную память для контейнера Docker, он будет использовать ее по мере необходимости. Таким образом, с Docker Container мне не нужно беспокоиться о потере ресурсов.

Давайте теперь разберемся, как работает Docker Container.

Как работает контейнер Docker?

На приведенной ниже диаграмме в основном показан способ использования Docker.И я предполагаю, что у вас есть представление о Docker Image и Dockerfile.

Ребята, я знаю, что диаграмма выглядит немного сложной, но поверьте, она не такая уж сложная. Ниже приведено объяснение схемы, даже после того, как вы почувствуете, что ее сложно понять, вы можете прокомментировать свои сомнения, я отвечу на эти вопросы как можно скорее.

  • Разработчик сначала напишет код проекта в файле Docker, а затем создаст образ из этого файла.
  • Это изображение будет содержать весь код проекта.
  • Теперь вы можете запустить этот образ Docker, чтобы создать столько контейнеров, сколько захотите.
  • Этот образ Docker можно загрузить в концентратор Docker (по сути, это облачный репозиторий для ваших образов Docker, вы можете оставить его публичным или частным).
  • Этот образ Docker в хабе Docker может быть загружен другими командами, такими как QA или Prod.

Это не только предотвращает бесполезную трату ресурсов, но также гарантирует, что вычислительная среда, которая есть в портативном компьютере разработчика, будет воспроизведена и в других командах.Теперь я чувствую, что мне не нужно объяснять, зачем нам Docker.

Это был один из способов его использования. Думаю, вам, ребята, должно быть интересно узнать, как я использовал Docker для решения моей проблемы с микросервисами. Позвольте мне дать вам обзор того же.

Ниже приводится пояснение к диаграмме:

  • Во-первых, мы написали сложные требования в файле Dockerfile.
  • Затем мы разместили его на GitHub.
  • После этого мы использовали CI-сервер (Jenkins).
  • Этот сервер Jenkins извлечет его из Git и создаст точную среду.Это будет использоваться на рабочих серверах, а также на тестовых серверах.
  • Мы развернули его в промежуточной среде (это относится к развертыванию вашего программного обеспечения на серверах в целях тестирования до их полного развертывания в производственной среде) для тестировщиков.
  • По сути, мы внедрили именно то, что у нас было в разработке, тестировании и постановке в производство.

Будет справедливо сказать, что Docker облегчил мне жизнь.

Ну, это была история моей компании, давайте посмотрим на тематическое исследование Университета Индианы.Как Докер решил свои проблемы.

Университет Индианы. Пример:

Университет Индианы — это система государственных университетов с несколькими кампусами в штате Индиана, США.

Заявление о проблеме

Они использовали настраиваемые сценарии для развертывания приложений в виртуальной машине.

Problem Statement Indiana University - Docker Container - Edureka

Их среда была оптимизирована для их устаревших приложений на основе Java. Их растущая среда включает новые продукты, основанные не только на Java.Чтобы предоставить студентам максимально возможный опыт, университету необходимо было начать модернизацию приложений.

Университет хотел улучшить способ проектирования приложений, перейдя на архитектуру на основе микросервисов для своих приложений.

Microsevice vs Monolithic - Docker Container - Edureka

Безопасность была необходима для данных учащихся, таких как SSN и данные о состоянии здоровья учащихся.

Решение:

Все проблемы были решены Центром обработки данных Docker (DDC), рассмотрите диаграмму ниже:

Надежный реестр Docker — Он хранит образы Docker.

UCP (универсальная плоскость управления) Веб-интерфейс — Помогает управлять всем кластером из одного места. Службы развертываются с использованием веб-интерфейса UCP с использованием образов Docker, которые хранятся в DTR (доверенный реестр Docker).

ИТ-операторы используют Universal Control Plane для подготовки программного обеспечения, установленного Docker, на хостах, а затем развертывают свои приложения без выполнения нескольких ручных шагов для настройки всей своей инфраструктуры.

UCP и DTR интегрируются с их сервером LDAP для быстрого предоставления доступа к своим приложениям.

Я надеюсь, что вы, ребята, прочитали предыдущие блоги, чтобы изучить основы Docker.

Теперь я объясню вам, как мы можем использовать Docker Compose для многоконтейнерного приложения.

Docker Практическое руководство:

Я предполагаю, что вы установили Docker. В этом посте я буду использовать Docker Compose, ниже я дал небольшое введение в Docker Compose.

Docker Compose: Это инструмент для определения и запуска многоконтейнерных приложений Docker.С помощью Docker Compose вы можете использовать файл Compose для настройки служб вашего приложения. Затем с помощью одной команды вы можете создать и запустить все службы из вашей конфигурации.

Предположим, у вас есть несколько приложений в разных контейнерах, и все эти контейнеры связаны вместе. Итак, вы не хотите выполнять каждый из этих контейнеров один за другим. Но вы хотите запускать эти контейнеры с помощью одной команды. Вот где на сцену выходит Docker Compose. С его помощью вы можете запускать несколько приложений в разных контейнерах с помощью одной команды.то есть docker-compose up.

Пример. Представьте, что у вас есть разные контейнеры, в одном из которых выполняется веб-приложение, в другом — postgres, а в другом — redis, в файле YAML. Это называется файлом docker compose, оттуда вы можете запускать эти контейнеры с помощью одной команды.

Docker Compose Example - Docker Container - Edureka Возьмем еще один пример:

Предположим, вы хотите опубликовать блог, для этого вы будете использовать CMS (систему управления контентом), а wordpress — наиболее широко используемая CMS. По сути, вам нужен один контейнер для WordPress, и вам нужен еще один контейнер в качестве MySQL для серверной части, этот контейнер MySQL должен быть связан с контейнером wordpress.Нам также понадобится еще один контейнер для Php Myadmin, который будет связан с базой данных MySQL, в основном, он используется для доступа к базе данных MySQL.

Как насчет того, чтобы выполнить приведенный выше пример практически.

Включенные шаги:

  1. Установить Docker Compose :
  2. Установить WordPress: Мы будем использовать официальные образы WordPress и MariaDB Docker.
  3. Установите MariaDB: Это один из самых популярных серверов баз данных в мире.Это сделано первыми разработчиками MySQL. MariaDB разрабатывается как программное обеспечение с открытым исходным кодом и как реляционная база данных предоставляет интерфейс SQL для доступа к данным.
  4. Установите PhpMyAdmin: Это бесплатный программный инструмент, написанный на PHP, предназначенный для администрирования MySQL через Интернет.
  5. Создайте сайт WordPress:

Приступим!

Установить Docker Compose:

Сначала установить Python Pip:

 sudo apt-get install python-pip 

Install Python Pip - Docker Container - Edureka

Теперь вы можете установить Docker Compose:

 sudo pip install docker-compose 

91

Установите WordPress:

Создайте каталог wordpress:

 mkdir wordpress
 

Войдите в этот каталог wordpress:

 cd wordpress / 

Wordpress Directory - Docker Container - Edureka

В этом каталоге создайте файл YAML Docker Compose, затем отредактируйте его с помощью gedit:

 sudo gedit docker-compose.yml
 

Docker Compose File - Docker Container - Edureka

Вставьте следующие строки кода в этот файл yaml:

wordpress:

изображение: wordpress

ссылки:

- wordpress_db: mysql

порты:

- 8080: 80

wordpress_db:

изображение: mariadb

Окружающая среда:

MYSQL_ROOT_PASSWORD: edureka

phpmyadmin:

изображение: corbinu / docker-phpmyadmin

ссылки:

- wordpress_db: mysql

порты:

- 8181: 80

Окружающая среда:

MYSQL_USERNAME: корень

MYSQL_ROOT_PASSWORD: edureka

 

Я знаю, что вы хотите, чтобы я объяснил этот код, поэтому, что я буду делать, я возьму небольшие участки этого кода и объясню вам, что происходит.

wordpress_db:
...
 Окружающая среда:
    MYSQL_ROOT_PASSWORD: edureka
...
 

Это установит переменную среды внутри контейнера wordpress_db с именем MYSQL_ROOT_PASSWORD с желаемым паролем. Образ MariaDB Docker настроен на проверку этой переменной среды при запуске и позаботится о настройке БД с учетной записью root с паролем, определенным как MYSQL_ROOT_PASSWORD.




wordpress:
...
 порты:
    - 8080: 80
...

 

Первый номер порта — это номер порта на хосте, а второй номер порта — это порт внутри контейнера.Таким образом, эта конфигурация перенаправляет запросы на порт 8080 хоста на порт 80 веб-сервера по умолчанию внутри контейнера.




phpmyadmin:
  изображение: corbinu / docker-phpmyadmin
  ссылки:
    - wordpress_db: mysql
  порты:
    - 8181: 80
  Окружающая среда:
    MYSQL_USERNAME: корень
    MYSQL_ROOT_PASSWORD: edureka

 

Это захватывает docker-phpmyadmin от члена сообщества corbinu, связывает его с нашим контейнером wordpress_db с именем mysql (то есть изнутри контейнера phpmyadmin ссылки на имя хоста mysql будут перенаправлены в наш контейнер wordpress_db), выставляет его порт 80 на порт 8181 хост-системы и, наконец, устанавливает пару переменных среды с нашим именем пользователя и паролем MariaDB.Это изображение не получает автоматически переменную окружения MYSQL_ROOT_PASSWORD из окружения wordpress_dbcontainer, как это делает изображение wordpress. На самом деле нам нужно скопировать строку MYSQL_ROOT_PASSWORD: edureka из контейнера wordpress_db и установить для имени пользователя значение root.

Теперь запустите группу приложений:

 docker-compose up -d 

Running Docker Compose - Docker Container - Edureka

Это все, что вам нужно сделать. Вы можете добавить столько контейнеров, сколько захотите, и связать их все любым способом.

Теперь в браузере перейдите на порт 8080, используя свой общедоступный IP-адрес или имя хоста, как показано ниже:

 localhost: 8080 

WordPress - Docker Container - Edureka

Заполните эту форму и нажмите «Установить WordPress».

WordPress Dashboard - Docker Container - Edureka

По завершении снова посетите IP-адрес вашего сервера (на этот раз используя порт 8181, например localhost: 8181). Вас приветствует экран входа в систему phpMyAdmin:

PhpMyadmin - Docker Container - Edureka

Идите вперед и войдите, используя имя пользователя root и пароль, которые вы установили в файле YAML, и вы сможете просматривать свою базу данных.Вы заметите, что на сервере есть база данных WordPress, которая содержит все данные из вашей установки WordPress.

PhpMyadmin Interface - Docker Container - Edureka

На этом я заканчиваю свой блог о контейнерах Docker. Надеюсь, вам понравился этот пост. Вы также можете проверить других блогов серии , которые посвящены основам Docker.

Если вы нашли этот блог Docker Container релевантным, ознакомьтесь с обучающим курсом DevOps DevOps от Edureka, надежной компании по онлайн-обучению с сетью из более чем 250 000 довольных учащихся по всему миру.Курс Edureka DevOps Certification Training помогает учащимся получить опыт работы с различными процессами и инструментами DevOps, такими как Puppet, Jenkins, Docker, Nagios, Ansible, Chef, Saltstack и GIT для автоматизации нескольких этапов в SDLC.

Есть вопросы? Пожалуйста, отметьте это в разделе комментариев, и я вернусь к вам.

Как остановить все контейнеры Docker — подсказка для Linux

В этой статье я покажу вам, как остановить все контейнеры Docker на вашем хосте Docker.Итак, приступим.

Требования:

У вас должен быть установлен Docker, чтобы запускать команды, показанные в этой статье.

Если у вас не установлен Docker, вы можете проверить следующие статьи по установке Docker, чтобы установить Docker в желаемый дистрибутив Linux.

Если у вас все еще есть проблемы с установкой Docker, вы можете связаться со мной через https://support.linuxhint.com. Я буду более чем счастлив помочь.

Остановка работающего контейнера:

Вы можете остановить любой запущенный контейнер Docker на хосте Docker.Чтобы остановить контейнер, вам нужен идентификатор или имя контейнера, который вы хотите остановить.

Чтобы получить идентификатор контейнера и имя всех запущенных контейнеров, выполните следующую команду:

Как видите, указаны идентификатор контейнера и имена всех работающих контейнеров.

Теперь, допустим, вы хотите остановить контейнер www1 или c52585c7a69b .

Для этого вы можете запустить одну из следующих команд:

$ докер контейнерная остановка www1

Или,

$ докер-контейнер остановка c52585c7a69b

Контейнер www1 или c52585c7a69b должен быть остановлен.

Остановка всех работающих контейнеров:

Вы также можете остановить все запущенные контейнеры Docker с помощью одной команды.

Чтобы остановить все запущенные контейнеры Docker, выполните следующую команду:

$ остановка контейнера докеров $ (список контейнеров докеров -q)

Все запущенные контейнеры Docker должны быть остановлены.

Здесь команда docker container list -q возвращает идентификатор контейнера всех запущенных контейнеров Docker.Затем команда docker container stop останавливает контейнеры, используя идентификаторы контейнеров.

Как видите, в списке нет запущенных контейнеров Docker.

Опять же, вы можете видеть, что все запущенные контейнеры Docker остановлены.

$ список контейнеров докеров -a

Остановка всех контейнеров Docker:

Вы также можете остановить любые контейнеры Docker независимо от их статуса (запущен, приостановлен и т. Д.).

Чтобы остановить все контейнеры Docker независимо от их статуса, выполните следующую команду:

$ docker container stop $ (список контейнеров докеров -qa)

Все контейнеры Docker, независимо от их статуса, должны быть остановлены.

Здесь команда docker container list -qa возвращает идентификатор контейнера всех контейнеров Docker независимо от их статуса. Затем команда docker container stop останавливает контейнеры, используя идентификаторы контейнеров.

Вы можете проверить, остановлены ли контейнеры, с помощью следующей команды:

$ список контейнеров докеров -a

Как видите, все контейнеры остановлены.

Итак, вот как вы останавливаете все контейнеры Docker на хосте Docker. Спасибо, что прочитали эту статью.

Запуск и оркестровка контейнеров Docker с помощью Docker Compose.

Введение

Узнайте, как установить и использовать Docker Compose.Docker Compose позволяет использовать несколько простых команд для запуска нескольких контейнеров с отдельными приложениями или компонентами. Docker Compose также можно использовать для автоматического связывания контейнеров и настройки томов контейнеров.

Если вы обнаружите, что используете длинную строку команд docker run для вызова набора контейнеров, Docker Compose сэкономит вам много работы.

Docker Compose против Fig

Docker Compose начинался как сторонний проект с открытым исходным кодом под названием Fig.Fig оказался настолько популярным, что команда Docker решила создать официальный инструмент на основе кодовой базы Fig.

Docker Compose заменяет Fig, а Fig официально устарела.

Требования
  • Сервер под управлением CentOS 7 или Ubuntu 14.04.
  • Докер установлен и запущен на вашем компьютере.
  • Базовые знания об использовании и командах Docker.
  • Базовое знакомство с использованием Dockerfile.
  • Docker Engine установлен и работает.

Установка Docker Compose

Чтобы установить Docker Compose, следуйте инструкциям для вашей операционной системы.

В Ubuntu 14.04

Установите Pip с помощью команды:

  sudo apt-get install python-pip  

Затем установите Docker Compose с помощью команды:

  sudo pip установить docker-compose  
На CentOS 7

Сначала проверьте страницу установки Docker Compose на Github, чтобы получить актуальный URL-адрес для загрузки.Команда будет выглядеть примерно так:

  sudo curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-ʻuname -s`-ʻuname -m` & gt; / USR / местные / бен / докер-составить  

После завершения загрузки сделайте двоичный исполняемый файл с помощью команды:

  sudo chmod + x / usr / local / bin / docker-compose  
В Mac OS X

В Mac OS X Docker Compose устанавливается как часть Docker Toolbox.Если у вас установлен Docker Toolbox, отдельно устанавливать Docker Compose не нужно.

Однако перед началом работы вы можете обновить двоичный файл Docker Compose до самой последней версии. Для этого проверьте страницу установки Docker Compose Github, чтобы получить актуальный URL-адрес для загрузки. Команда будет выглядеть примерно так:

  sudo curl -L https://github.com/docker/compose/releases/download/1.7.1/docker-compose-ʻuname -s`-ʻuname -m` & gt; / USR / местные / бен / докер-составить  

После завершения загрузки сделайте двоичный исполняемый файл с помощью команды:

  sudo chmod + x / usr / local / bin / docker-compose  

Использование Docker Compose

Использование Docker Compose — это четырехэтапный процесс:

  • Создайте каталог для файлов установки.

  • Создайте в этом каталоге файл YAML с именем docker-compose.yml .

  • Поместите команды запуска группы приложений в docker-compose.yml .

  • Изнутри этого каталога используйте команду docker-compose up для запуска контейнера (ов).

Например, вы можете начать с создания каталога для простого проекта под названием hello-world:

И перейдите в этот каталог:

Теперь создайте файл YAML с именем docker-compose.yml командой:

  sudo nano docker-compose.yml  

Этот файл будет содержать все директивы запуска для вашей группы приложений.

Первая строка файла должна читать:

Указывает, что файл будет использовать Docker Compose версии 2, более поздней версии. Версия 2 допускает тома, сети и аргументы построения. Это официальная рекомендуемая версия.

В целях тестирования мы начнем с службы (контейнера) под названием compose-test, запускаемой из официального образа CentOS 7. Поместите в файл docker-compose.yml следующее:

  версия: '2'

Сервисы:

  составить тест:
    изображение: centos  

Сохраните и закройте файл.

Примечание. Docker Compose чувствителен к пробелам. Убедитесь, что вы используете правильное количество пробелов. Первая строка каждого блока не должна иметь пробелов в начале.Остальные строки должны иметь отступ, обычно с двумя пробелами на уровень отступа.

Используйте Docker Compose для запуска этого тестового контейнера с помощью команды:

  sudo docker-compose up -d  

Эта команда запускает docker-compose в фоновом режиме. Если вы хотите увидеть весь вывод docker-compose , запустите эту команду без флага -d .

Помните, что вам нужно будет выполнить эту команду из каталога hello-world .

Убедитесь, что контейнер был создан с помощью команды:

Остановка и удаление контейнеров

Чтобы остановить все контейнеры в группе приложений, используйте команду:

После остановки контейнеров вы можете удалить все контейнеры, которые были запущены с помощью Docker Compose, с помощью команды:

Чтобы остановить все контейнеры в группе приложений и удалить их все с помощью одной команды, используйте:

Чтобы удалить все тома данных, добавьте флаг -v :

  sudo docker-compose down -v  

Команды Docker Compose

Есть много команд, которые вы можете указать в файле docker-compose.yml файл. На официальном сайте Docker есть полный список команд. Некоторые из самых популярных команд включают следующие.

Выполнить команду

Если есть команда, по которой контейнер запускается при запуске, добавьте в файл docker-compose.yml следующую строку:

  команда: [команда и аргументы]  
Пример: запуск и пинг

Чтобы наш тестовый контейнер проверял локальный хост 5 раз при запуске, создайте файл YAML с именем docker-compose.yml командой:

  sudo nano docker-compose.yml  

Добавьте в файл следующую строку:

  версия: '2'

Сервисы:

  составить тест:
    изображение: centos
    команда: ping -c 5 localhost  

Сохраните и закройте файл.

Чтобы увидеть результаты команды ping , запустите группу приложений с помощью команды:

Это запустит docker-compose на переднем плане, чтобы отобразился вывод ping .При необходимости используйте CTRL-c для выхода.

Связать контейнеры

Чтобы создать ссылку на другую службу, добавьте в файл docker-compose.yml следующую строку:

Пример: ссылка и пинг

Чтобы добавить службу с именем compose-db в нашу группу приложений и связать с ней наш тестовый контейнер, создайте файл YAML с именем docker-compose.yml с помощью команды:

  sudo nano docker-compose.yml  

Добавьте в файл следующую строку:

  версия: '2'

Сервисы:

  составить тест:
    изображение: centos
    ссылки:
      - compose-db
    команда: ping -c 5 compose-db

  compose-db:
    изображение: redis  

Это проверит связь с помощью команды compose-test container ping compose-db при запуске.

Сохраните и закройте файл.

Чтобы увидеть результаты команды ping , запустите группу приложений с помощью команды:

Это запустит docker-compose на переднем плане, чтобы отобразился вывод ping .Вы должны увидеть набор сообщений о запускаемых контейнерах, заканчивающийся выводом ping , который будет выглядеть примерно так:

  compose-test_1 | PING compose-db (172.19.0.2) 56 (84) байтов данных.
compose-test_1 | 64 байта из helloworld_compose-db_1.helloworld_default (172.19.0.2): icmp_seq = 1 ttl = 64 time = 0,078 мс
compose-test_1 | 64 байта из helloworld_compose-db_1.helloworld_default (172.19.0.2): icmp_seq = 2 ttl = 64 time = 0,049 мс
compose-test_1 | 64 байта из helloworld_compose-db_1.helloworld_default (172.19.0.2): icmp_seq = 3 ttl = 64 время = 0,052 мс
compose-test_1 | 64 байта из helloworld_compose-db_1.helloworld_default (172.19.0.2): icmp_seq = 4 ttl = 64 time = 0,062 мс
compose-test_1 | 64 байта из helloworld_compose-db_1.helloworld_default (172.19.0.2): icmp_seq = 5 ttl = 64 time = 0,047 мс
compose-test_1 |
compose-test_1 | --- compose-db статистика пинга ---
compose-test_1 | 5 пакетов передано, 5 получено, потеря пакетов 0%, время 3998 мс
compose-test_1 | rtt min / avg / max / mdev = 0.047 / 0,057 / 0,078 / 0,014 мс  

Используйте CTRL-c для выхода при необходимости.

Открыть порты

Открытие порта делает порт доступным для связанных служб, но не для хост-компьютера. Чтобы открыть порт, добавьте в файл docker-compose.yml следующую строку:

  выставить:
  - «[номер порта]»  
Пример: открыть порт

Чтобы наша тестовая база данных открывала порт 6379 (порт Redis по умолчанию) и проверяла это соединение с помощью простой команды curl из связанного контейнера compose-test , создайте файл YAML с именем docker-compose.yml командой:

  sudo nano docker-compose.yml  

Добавьте в файл следующую строку:

  версия: '2'

Сервисы:

  составить тест:
    изображение: centos
    ссылки:
      - compose-db
    команда: / usr / bin / curl compose-db: 6379

  compose-db:
    изображение: redis
    выставить:
      - «6379»  

Сохраните и закройте файл.

Чтобы увидеть результаты команды curl , запустите группу приложений с помощью команды:

Это запустит docker-compose на переднем плане, чтобы отобразился вывод curl .Вы должны увидеть набор сообщений о запускаемых контейнерах, заканчивающийся выводом curl , который будет выглядеть примерно так:

  compose-db_1 | 1: M 04 мая 20: 39: 12.009 * Теперь сервер готов принимать соединения через порт 6379
compose-test_1 | % Всего% Получено% Xferd Средняя скорость Время Время Время Текущее
compose-test_1 | Dload Upload Всего затрачено Скорость слева  

Это означает, что соединение curl с сервером было успешным.(Никакое содержимое не возвращается, потому что мы не настроили контейнер compose-db для его доставки.)

Используйте CTRL-c для выхода и возврата в командную строку.

Сборка из Dockerfile

Если вы хотите использовать Dockerfile для создания контейнера, поместите Dockerfile в тот же каталог, что и файл docker-compose.yml группы приложений. Затем используйте директиву build вместо image .

Пример: создание веб-сервера

Чтобы запустить тестовый контейнер, на котором запущен сервер Apache из файла Dockerfile, и протестировать его с помощью Curl из связанного контейнера, начните с создания каталога, из которого будут загружаться файлы HTML для веб-сайта:

Не забудьте выполнить эту команду из нашего каталога hello-world , так как все пути указаны относительно вашего местоположения.

Затем создайте простой файл «Hello world» с помощью команды:

  sudo nano public-html / index.html  

Поместите в этот файл следующее:

Сохраните и закройте файл.

Теперь создайте файл Dockerfile:

Поместите в этот файл следующее:

  С httpd: 2.4
КОПИЯ ./public-html/ / usr / local / apache2 / htdocs /  

Это указывает Docker загрузить содержимое каталога hello-world / public-html на хосте в / usr / local / apache2 / htdocs в контейнере.

Сохраните и закройте файл.

Поместите в файл docker-compose.yml следующую строку:

  версия: '2'

Сервисы:
  составить тест:
    изображение: centos
    ссылки:
      - веб-тест
    команда: / usr / bin / curl веб-тест: 80

  веб-тест:
    сборка:.
    выставить:
      - «80»  

Сохраните и закройте файл.

Чтобы увидеть результаты команды curl , запустите группу приложений с помощью команды:

Это запустит docker-compose на переднем плане, чтобы отобразить вывод curl .Вы должны увидеть набор сообщений о запускаемых контейнерах, заканчивающийся выводом curl , который будет выглядеть примерно так:

  web-test_1 | 172.19.0.3 - - [04 / May / 2016: 21: 12: 43 +0000] «GET / HTTP / 1.1» 200 20
compose-test_1 | % Всего% Получено% Xferd Средняя скорость Время Время Время Текущее
compose-test_1 | Выгрузка Всего затрачено на оставшуюся скорость
100 20 100 20 0 0 3157 0 -: -: - -: -: - -: -: - 3333
compose-test_1 | Привет мир!  

Это означает, что соединение curl с сервером было успешным.

Используйте CTRL-c для выхода и возврата в командную строку.

Сопоставление портов хоста с портами контейнера

Чтобы сопоставить порт контейнера с портом хоста, добавьте в файл docker-compose.yml следующую строку:

  портов:
  - "[порт хоста]: [порт контейнера]"  
Пример: создание веб-сервера и сопоставление портов с хостом

В этом примере мы запустим тестовый контейнер, на котором запущен сервер Apache, из файла Docker, сопоставим порт 8080 контейнера с портом 80 хоста и протестируем его, посетив http: // example.com: 8080 в браузере.

Начните с создания каталога, в который будут загружаться файлы HTML для веб-сайта:

Не забудьте выполнить эту команду из нашего каталога hello-world , так как все пути указаны относительно вашего местоположения.

Затем создайте простой файл «Hello world» с помощью команды:

  sudo nano public-html / index.html  

Поместите в этот файл следующее:

Сохраните и закройте файл.

Теперь создайте файл Dockerfile:

Поместите в этот файл следующее:

  С httpd: 2.4
КОПИЯ ./public-html/ / usr / local / apache2 / htdocs /  

Это указывает Docker загрузить содержимое каталога hello-world / public-html на хосте в / usr / local / apache2 / htdocs в контейнере.

Сохраните и закройте файл.

Поместите следующее в docker-compose .yml файл:

  версия: '2'

Сервисы:
  веб-тест:
    сборка:.
    порты:
      - «8080: 80»  

Сохраните и закройте файл.

Запустите группу приложений с помощью команды:

  sudo docker-compose up -d  

После запуска контейнера переключитесь в браузер и перейдите по URL-адресу http://example.com:8080 или http://192.168.0.1:8080, заменив доменное имя или IP-адрес своим собственным.

Вы увидите простое «Hello world!» страница.

Примечание. Если вы используете брандмауэр, вам может потребоваться разрешить внешний доступ к порту 8080. Если вы запускаете другую службу на порту 8080, вы можете указать другой номер порта для этого теста.

  • Вы также можете проверить сопоставление портов с помощью sudo docker-compose ps . Вывод для этого примера будет выглядеть примерно так:

    Имя Befehl Status Ports
    ——————————— ————————————————— ———————————————
    helloworld_web-test_1 httpd- передний план вверх 0.0.0.0.0:8080->80/tcpp

    Как видите, команда включает информацию о сопоставлении портов в столбец Порты .

  sudo docker-compose up -f filename.yml  

Это позволяет использовать несколько файлов YAML в одной среде сборки.

Например, вам может понадобиться один файл YAML production.yml для производственной сборки и другой файл YAML staging.yml для промежуточной сборки. Затем вы можете выбрать между использованием:

  sudo docker-compose up -f production.yml  

или:

  sudo docker-compose up -f staging.yml  
.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Theme: Overlay by Kaira Extra Text
Cape Town, South Africa