Список контейнеров 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 для вывода списка контейнеров имеет следующий вид:
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
Команда 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 показывает только запущенные контейнеры.
abhishek@linuxhandbook:~$ 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
Вывод должен быть более описательным, но он просто показывает имя контейнера или идентификатор, какой бы вы ни указали:
abhishek@itsfoss:~$ docker stop 1bcf775d8cc7 1bcf775d8cc7
Вы можете использовать команду docker stop для уже остановленного контейнера. Он не будет выдавать никаких ошибок или другого выхода.
Вы можете проверить, остановлен ли контейнер, с помощью команды docker ps -a. Опция -a показывает все контейнеры, запущены они или остановлены.
abhishek@itsfoss:~$ 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
Как и ранее, вывод будет просто отображать имя или идентификатор контейнеров:
abhishek@itsfoss:~$ 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 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. Эти виртуальные машины были настроены путем написания длинных сценариев.Что ж, настройка этих виртуальных машин была не единственной проблемой.
Разработка таких приложений требует запуска нескольких микросервисов на одной машине. Итак, если вы запускаете пять из этих служб, вам потребуется пять виртуальных машин на этой машине. Рассмотрим диаграмму ниже:
Другая проблема довольно распространена, я знаю, что многие из вас могут иметь к ней отношение. Приложение работает на портативном компьютере разработчика, но не в стадии тестирования или производства. Это может быть из-за несогласованности вычислительной среды.Рассмотрим диаграмму ниже:
Было много других проблем, помимо этой, но я чувствую, что этих проблем мне достаточно, чтобы объяснить вам необходимость контейнеров 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 облегчил мне жизнь.
Ну, это была история моей компании, давайте посмотрим на тематическое исследование Университета Индианы.Как Докер решил свои проблемы.
Университет Индианы. Пример:
Университет Индианы — это система государственных университетов с несколькими кампусами в штате Индиана, США.
Заявление о проблеме
Они использовали настраиваемые сценарии для развертывания приложений в виртуальной машине.
Их среда была оптимизирована для их устаревших приложений на основе Java. Их растущая среда включает новые продукты, основанные не только на Java.Чтобы предоставить студентам максимально возможный опыт, университету необходимо было начать модернизацию приложений.
Университет хотел улучшить способ проектирования приложений, перейдя на архитектуру на основе микросервисов для своих приложений.
Безопасность была необходима для данных учащихся, таких как 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, оттуда вы можете запускать эти контейнеры с помощью одной команды.
Возьмем еще один пример:
Предположим, вы хотите опубликовать блог, для этого вы будете использовать CMS (систему управления контентом), а wordpress — наиболее широко используемая CMS. По сути, вам нужен один контейнер для WordPress, и вам нужен еще один контейнер в качестве MySQL для серверной части, этот контейнер MySQL должен быть связан с контейнером wordpress.Нам также понадобится еще один контейнер для Php Myadmin, который будет связан с базой данных MySQL, в основном, он используется для доступа к базе данных MySQL.
Как насчет того, чтобы выполнить приведенный выше пример практически.
Включенные шаги:
- Установить Docker Compose :
- Установить WordPress: Мы будем использовать официальные образы WordPress и MariaDB Docker.
- Установите MariaDB: Это один из самых популярных серверов баз данных в мире.Это сделано первыми разработчиками MySQL. MariaDB разрабатывается как программное обеспечение с открытым исходным кодом и как реляционная база данных предоставляет интерфейс SQL для доступа к данным.
- Установите PhpMyAdmin: Это бесплатный программный инструмент, написанный на PHP, предназначенный для администрирования MySQL через Интернет.
- Создайте сайт WordPress:
Приступим!
Установить Docker Compose:
Сначала установить Python Pip:
sudo apt-get install python-pip
Теперь вы можете установить Docker Compose:
sudo pip install docker-compose
91
Установите WordPress:
Создайте каталог wordpress:
mkdir wordpress
Войдите в этот каталог wordpress:
cd wordpress /
В этом каталоге создайте файл YAML Docker Compose, затем отредактируйте его с помощью gedit:
sudo gedit docker-compose.yml
Вставьте следующие строки кода в этот файл 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
Это все, что вам нужно сделать. Вы можете добавить столько контейнеров, сколько захотите, и связать их все любым способом.
Теперь в браузере перейдите на порт 8080, используя свой общедоступный IP-адрес или имя хоста, как показано ниже:
localhost: 8080
Заполните эту форму и нажмите «Установить WordPress».
По завершении снова посетите IP-адрес вашего сервера (на этот раз используя порт 8181, например localhost: 8181). Вас приветствует экран входа в систему phpMyAdmin:
Идите вперед и войдите, используя имя пользователя root и пароль, которые вы установили в файле YAML, и вы сможете просматривать свою базу данных.Вы заметите, что на сервере есть база данных WordPress, которая содержит все данные из вашей установки WordPress.
На этом я заканчиваю свой блог о контейнерах 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
.