🐹 Docker: Установка и использование.

Содержание:

1. Что такое Docker.
2. Преимущества использования Docker.
3. Компоненты Docker.
4. Что такое Docker Engine.
5. Как работает Docker.

5.1. Схема работы.
5.2. Как работают образы.
5.3. Как работают контейнеры.
5.4. Что происходит при запуске контейнера.

6. Docker Compose.
7. Docker Swarm.
8. Примеры применения.
9. Чем контейнеры отличаются от виртуальных машин.
10. Установка Docker.
11. Работа с образами в Docker.
12. Работа с контейнерами в Docker.

12.1. Создание контейнера.
12.2. Работа в контейнере и выход из него.
12.3. Остановка и удаление контейнера.
12.4. Очистка только потушенных/незапущенных контейнеров.

13. Тестовый запуск контейнера Docker.
14. Вызов справки по Docker.
15. Обновление Docker.
16. Примеры использования Docker.
17. Загрузка образов Docker в репозиторий.
18. Оригиналы источников информации.


1. Что такое Docker.

Сайт проекта Docker: docker.com.

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

Docker работает в Linux, ядро которых поддерживает cgroups, а также изоляцию пространства имен. Для инсталляции и использования на платформах, отличных от Linux, существуют специальные утилиты Kitematic или Docker Machine.

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

Для работы с Docker необходимо понимать отличия между терминами образ и контейнер:

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

Образ является шаблоном доступным только для чтения. Образ Docker может быть дистрибутивом Linux или полностью сконфигурированным корпоративным программным обеспечением, готовым к запуску. Все зависит от специального файла — Dockerfile.

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

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

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

В общем случае запуск приложения в Docker выглядит так:

  1. Выбирается приложение, которое требуется запустить в контейнере.
  2. В конфигурационном файле Dockerfile описывается это приложение и среда выполнения согласно синтаксису.
  3. Формируется образ приложения, представляющий собой единый файл. Он включает в себя и исполняемые файлы приложения, и все его библиотеки (за исключением общих системных), то есть в дальнейшем приложение остается неизменным в контейнере.
  4. Запускается Docker с указанным образом прикладного приложения, которое используется для прикладных задачи.

2. Преимущества использования Docker.

  1. Минимальное потребление ресурсов — контейнеры не виртуализируют всю операционную систему , а используют ядро хоста и изолируют программу на уровне процесса. Последний потребляет намного меньше ресурсов локального компьютера, чем виртуальная машина.
  2. Скоростное развертывание — вспомогательные компоненты можно не устанавливать, а использовать уже готовые docker-образы или шаблоны. Например, не имеет смысла постоянно устанавливать и настраивать Linux Ubuntu. Достаточно 1 раз ее инсталлировать, создать образ и постоянно использовать, лишь обновляя версию при необходимости.
  3. Удобное скрытие процессов — для каждого контейнера можно использовать разные методы обработки данных, скрывая фоновые процессы.
  4. Работа с небезопасным кодом — технология изоляции контейнеров позволяет запускать любой код без вреда для операционной системы.
  5. Простое масштабирование — любой проект можно расширить, внедрив новые контейнеры.
  6. Удобный запуск — приложение, находящееся внутри контейнера, можно запустить на любом docker-хосте.
  7. Оптимизация файловой системы — образ состоит из слоев, которые позволяют очень эффективно использовать файловую систему.

3. Компоненты Docker.

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

  1. Docker-демон (Docker-daemon) — сервер контейнеров, входящий в состав программных средств Docker. Демон управляет Docker-объектами (сети, хранилища, образы и контейнеры). Демон также может связываться с другими демонами для управления сервисами Docker.
  2. Docker-клиент (Docker-client / CLI) — интерфейс взаимодействия пользователя с Docker-демоном. Клиент и Демон — важнейшие компоненты «движка» Докера (Docker Engine). Клиент Docker может взаимодействовать с несколькими демонами.
  3. Docker-образ (Docker-image) — файл, включающий зависимости, сведения, конфигурацию для дальнейшего развертывания и инициализации контейнера.
  4. Docker-файл (Docker-file) — описание правил по сборке образа, в котором первая строка указывает на базовый образ. Последующие команды выполняют копирование файлов и установку программ для создания определенной среды для разработки.
  5. Docker-контейнер (Docker-container) — это легкий, автономный исполняемый пакет программного обеспечения, который включает в себя все необходимое для запуска приложения: код, среду выполнения, системные инструменты, системные библиотеки и настройки.
  6. Том (Volume) — эмуляция файловой системы для осуществления операций чтения и записи. Она создается автоматически с контейнером, поскольку некоторые приложения осуществляют сохранение данных.
  7. Реестр (Docker-registry) — зарезервированный сервер, используемый для хранения docker-образов.

Примеры реестров:

  • Центр Docker — реестр, используемый для загрузки docker-image. Он обеспечивает их размещение и интеграцию с GitHub и Bitbucket.
  • Контейнеры Azure — предназначен для работы с образами и их компонентами в директории Azure (Azure Active Directory).
  • Доверенный реестр Docker или DTR — служба docker-реестра для инсталляции на локальном компьютере или сети компании.

Объекты:

  • Docker-хаб (Docker-hub) или хранилище данных — репозиторий, предназначенный для хранения образов с различным программным обеспечением. Наличие готовых элементов влияет на скорость разработки.
  • Docker-хост (Docker-host) — машинная среда для запуска контейнеров с программным обеспечением.
  • Docker-сети (Docker-networks) — применяются для организации сетевого интерфейса между приложениями, развернутыми в контейнерах.

4. Что такое Docker Engine.

Docker EngineДвижок» Docker») — ядро механизма Докера. «Движок» отвечает за функционирование и обеспечение связи между основными Docker-объектами (реестром, образами и контейнерами).

Элементы Docker Engine:

  • Сервер выполняет инициализацию демона (фоновой программы), который применяется для управления и модификации контейнеров, образов и томов.
  • REST API — механизм, отвечающий за организацию взаимодействия Докер-клиента и Докер-демона.
  • Клиент — позволяет пользователю взаимодействовать с сервером при помощи команд, набираемых в интерфейсе (CLI).

5. Как работает Docker.

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

5.1. Схема работы.

  1. Пользователь отдает команду с помощью клиентского интерфейса Docker-демону, развернутому на Docker-хосте. Например, скачать готовый образ из реестра (хранилища Docker-образов) с помощью команды docker pull. Взаимодействие между клиентом и демоном обеспечивает REST API. Демон может использовать публичный (Docker Hub) или частный реестры.
  2. Исходя из команды, заданной клиентом, демон выполняет различные операции с образами на основе инструкций, прописанных в файле Dockerfile. Например, производит их автоматическую сборку с помощью команды docker build.
  3. Работа образа в контейнере. Например, запуск docker-image, посредством команды docker run или удаление контейнера через команду docker kill.

5.2. Как работают образы.

Docker-image — шаблон только для чтения (read-only) с набором некоторых инструкций, предназначенных для создания контейнера. Он состоит из слоев, которые Docker комбинирует в один образ при помощи вспомогательной файловой системы UnionFS. Так решается проблема нерационального использования дисковой памяти. Параметры образа определяются в Dockerfile.

Для многократного применения Docker-image следует пользоваться реестром образов или Докер-реестром (Docker-registry), позволяющим закачивать готовые образы с внешнего репозитория сервиса и хранить их в реестре Докер-хоста. Рекомендуемый вариант — официальный реестр компании Docker Trusted Registry (DTR).

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

5.3. Как работают контейнеры.

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

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

В операционной системе Linux посредством Docker Engine используется немного другая технология — контрольные группы (cgroups). При этом приложение ограничивается некоторым набором ресурсов. Сgroups осуществляют обмен доступных аппаратных ресурсов с контейнерами, на которые дополнительно устанавливаются необходимые ограничения (использование памяти, прав доступа к другому ресурсу и так далее).

Движок Docker объединяет пространство имен (namespace), контрольные группы (cgroups) и файловую систему (UnionFS) в формат контейнера. В будущем планируется поддержка других форматов посредством интеграции технологий BSD Jails или Solaris Zones.

5.4. Что происходит при запуске контейнера.

  1. Происходит запуск образа (Docker-image). Docker Engine проверяет существование образа. Если образ уже существует локально, Docker использует его для нового контейнера. При его отсутствии выполняется скачивание с Docker Hub.
  2. Создание контейнера из образа.
  3. Разметка файловой системы и добавление слоя для записи.
  4. Создание сетевого интерфейса.
  5. Поиск и присвоение IP-адреса.
  6. Запуск указанного процесса.
  7. Захват ввода/вывода приложения.

6. Docker Compose.

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

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

7. Docker Swarm.

При преобразовании хостов в кластер нужно воспользоваться утилитой кластеризации Docker Swarm. Хост, находящийся в его составе, называется «узлом» (node), который бывает управляющим или рабочим. Один кластер содержит только один управляющий «узел».

Некоторые возможности утилиты.

  1. Управление нагрузочными характеристиками — осуществляется оптимизация рассылки запросов между хостами, обеспечивая на них равномерную нагрузку.
  2. Динамическое управление — допускается добавление элементов в swarm-кластер без дальнейшего его перезапуска.
  3. Возможность масштабирования — позволяет добавлять или удалять docker-образ для автоматического создания контейнера.
  4. Восстановление «узла» после сбоя — работоспособность каждого хоста постоянно контролируется управляющим «узлом». При сбое кластера происходит его восстановление и перезапуск.
  5. Rolling-update — выполняет обновление контейнеров. Процедура может выполняться в определенной последовательности и с временной задержкой для запуска другого контейнера. Параметр указывается в настройках. Если произойдет сбой обновления, то Docker Swarm выдаст ошибку и процесс повторится заново.

8. Примеры применения.

Окружение для разработки Docker применяется во множестве сфер — от обработки больших массивов данных, до работы с микросервисами, основанных на распределенной архитектуре.

Чтобы понять, как можно применять Докер на практике, разберем основные примеры использования:

  1. Быстрая доставка приложений (команды docker pull и docker push) позволяет организовать коллективную работу над проектом. Разработчики могут работать удаленно на локальных компьютерах и выполнять пересылку фрагментов кода в контейнер для тестов.
  2. Развертывание и масштабирование — контейнеры работоспособны на локальных компьютерах, серверах, в облачных онлайн-сервисах. Их можно загружать на хостинг для дальнейшего тестирования, создавать (docker run), останавливать (docker stop), запускать (docker start), приостанавливать и возобновлять (docker pause и docker unpause соответственно).
  3. Множественные нагрузки — осуществление запуска большого количества контейнеров на одном и том же оборудовании, поскольку Docker занимает небольшой объем дисковой памяти.
  4. Диспетчер процессов — возможность мониторинга процессов в Docker посредством команд docker ps и docker top, имеющими схожий синтаксис с Linux.
  5. Удобный поиск — в реестрах Docker он осуществляется очень просто. Для этого следует использовать команду docker search.

9. Чем контейнеры отличаются от виртуальных машин.

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

Между ними есть принципиальная разница:

  • Контейнер, в сущности, является ограниченным внутри операционной системы пространством, использующим для доступа к аппаратным ресурсам ядро host-системы.
  • Виртуальная машина представляет собой машину целиком со всеми необходимыми для её работы устройствами.

Из этого образуются отличия, имеющие практическое значение:

  • Контейнеры требуют значительно меньше ресурсов для своей работы, что положительно сказывается на производительности и бюджете.
  • Контейнеры можно запускать только в той же операционной системе, что стоит на host-системе — то есть запустить Windows-контейнер на host-системе с Linux не получится (на персональных устройствах это ограничение обходится с помощью технологии виртуализации). Однако это не относится к разным дистрибутивам одной и той же операционной системы, например Ubuntu и Alpine Linux.
  • Контейнеры предоставляют меньшую степень изоляции, поскольку используют ядро host-системы, что потенциально создаёт бóльшие риски в эксплуатации при небрежном отношении к безопасности.

10. Установка Docker.

Для своей установки Docker требует 64-разрядную операционную систему и версию ядра Linux не ниже 3.10.

Проверить вы это можете следующим образом:

# uname -r

Ответ системы:

Как вы можете видеть, на моем сервере с операционной системой CentOS 7 всё в порядке с выполнением этих требований.

Полностью обновим нашу систему CentOS 7:

# yum -y update && yum -y upgrade

Для установки самой последней и стабильной версии Docker необходимо обратиться к официальному репозиторию Docker.

Следующая команда добавит репозиторий, загрузит последнюю версию программного обеспечения и установит его:

# curl -fsSL https://get.docker.com/ | sh

Далее побежит много-много строк:

В итоге все будет установлено и CentOS 7 предложит вам сделать специального пользователя под Docker.

Дословно! Eсли вы собираетесь использовать Docker не от имени пользователя root, то необходимо добавить пользователя в созданную после установки группу docker.

Если вам это потребуется, то вы можете выполнить рекомендацию системы.

По умолчанию команда docker требует привилегий root (или доступа к команде sudo). Также её можно запускать в группе docker, которая создаётся автоматически во время установки программы Docker.

Если вы попытаетесь запустить команду docker без префикса sudo и вне группы docker, вы получите ошибку:

«docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See ‘docker run —help’».

Как создать пользователя с правами root можно узнать на моём сайте.

Ссылка: «CentOS 7: Базовые основы безопасности сервера – root запись: Создайте нового пользователя».

Чтобы активировать это изменение, выйдите из системы и войдите снова.

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

# sudo usermod -aG docker <имя пользователя>

Например:

# sudo usermod -aG docker name_of_user

Запустите демон Docker после окончания установки:

# sudo systemctl start docker

Поставим в автозагрузку демон Docker после окончания установки:

# sudo systemctl enable docker

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

# sudo systemctl status docker

В результате должно появиться подобное сообщение:

Примечание! Далее в руководстве предполагается, что команда docker запускается пользователем, который состоит в группе docker. В противном случае вам нужно добавлять префикс sudo самостоятельно.

11. Работа с образами в Docker.

Итак, программа контейнеризации Docker установлена и готова к работе.

В общем виде формат запуска команд докера такой:

# docker <команда> <имя_контейнера>

На самом деле формат немного больше:

# docker <команда> <флаг/флаги> <имя_контейнера>

Все команды можно посмотреть в официальной документации: docs.docker.com.

Пример некоторых команды:

  • run — уже знакомая команда. она создает и запускает контейнер.
  • pull — команда закачивает образ из репозитория на наш компьютер.
  • run — вызывает эту функцию, если контейнер не скачан.
  • ps — просмотр запущенных контейнеров.
  • rm — удаление контейнера. Не образа, а именно контейнера.
  • stop — остановить запущенный контейнер.
  • start — запустить остановленный контейнер.
  • exec — выполнить команду в запущенном контейнере.
  • cp — копирование файлов между контейнером и хост-системой.
  • info — информация о состоянии и конфигурации контейнера.
  • logs — логи контейнера.
  • attach — зацепиться в консоль контейнера.
  • search — поиск образа в репозитории.

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

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

# docker <option> <command> <arguments>

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

# docker

Чтобы получить общесистемную информацию о Docker, введите:

# docker info

Ответ:

По умолчанию образы извлекаются из реестра Docker Hub, дочернего проекта Docker. Любой пользователь может создавать и размещать свои образы на Docker Hub, поэтому большинство приложений, СУБД и дистрибутивов Linux имеют свои образы на Docker Hub.

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

# docker run hello-world

В результате должно отобразиться подобное сообщение:

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

# docker search <имя>

Например, для поиска образа Nginx используйте следующую команду:

# docker search nginx

В результате появится список доступных образов:

Если в столбце OFFICIAL содержится OK, это значит, что данный образ поддерживается командой разработчиков проекта.

Выбрав необходимый образ, вы можете загрузить его при помощи подкоманды pull.

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

# docker pull <имя>

Например:

# docker pull nginx

Вы увидите процесс загрузки:

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

После того как образ был загружен на ваш сервер, запустим его:

# docker run <имя>

Посмотреть все загруженные образы можно с помощью опции images:

# docker images

Отобразится список:

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

12. Работа с контейнерами в Docker.

Ранее загруженный контейнер hello-world – это всего лишь образец контейнера. Существует множество полезны контейнеров. Кроме того, они бывают интерактивными. В целом они очень похожи на ресурсосберегающие виртуальные машины.

12.1. Создание контейнера.

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

# docker run --name <example> -d <image>

Примечание: комбинация ключей -i и -t дает интерактивный доступ к оболочке shell в контейнере.

Пример создания контейнера example на основе образа nginx:

# docker run --name example -d nginx

Со временем в вашей системе соберётся определённое количество активных и неактивных контейнеров.

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

# docker container start <имя_или_id>

Например:

# docker container start example

Посмотреть запущенные контейнеры можно с помощью опции ps:

# docker ps

Отобразится список:

Чтобы просмотреть список всех контейнеров, добавьте опцию -a:

# docker ps -a

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

Ключ -l позволяет просмотреть все существующие контейнеры.

Чтобы получить список недавно созданных контейнеров, добавьте опцию –l:

# docker ps -l

CONTAINER ID — как понятно из названия это ID контейнера. Он покороче чем тот, что выводился при запуске и если честно это первые 12 символов от того длинного кода. Обращаться к контейнеру командами докера нужно именно по этому короткому ID.

Примечание! В командной строке будет указан ID контейнера (в данном примере это 240d5bdf748c). Запишите его – он необходим для дальнейшей работы.

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

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

CREATED — дата первого запуска контейнера. Перед запуском он был создан, потому и название такое

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

PORTS — этот параметр относится к сети контейнера. Мы этот момент еще не рассматривали, но очень скоро рассмотрим. Вкратце сеть работает так — при создании контейнера для него создается виртуальный интерфейс и добавляется в виртуальный же свитч, созданный на основе linux-bridge.

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

Такой проброс портов удобен тем, что не нужно знать IP-адрес контейнера в этой виртуальной сетке.

NAMES — имя контейнера. Чуть выше я рассказывал про ID контейнера, но он сложный для запоминания и поэтому ввели еще такой параметр как имя. Когда на компьютере запущено с десяток контейнеров, по имени проще будет понять какой к какому проекту относится. Особенно если контейнеры запущены из одного образа.

При каждом запуске docker run создается новый контейнер. При этом внутри контейнера изменения не сохраняются. Когда мы делаем docker run, то контейнер собирается заново из образа со всеми его слоями. В принципе находясь внутри контейнера можно сделать rm -rf /, а потом перезапустить его и все файлы образа будут на месте, а вот те, что ты создал, работая в контейнере, пропадут. Чтобы изменения не пропадали, в докере есть возможность проброса папки из хост-системы в контейнер. Это мы чуть позже в этом уроке рассмотрим.

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

# docker ps -a

Ответ:

И это еще не весь список.

Хотя вот команда docker ps с флагом -a выводит список всех контейнеров, а для чистки надо вывести только незапущенные. Это делается флагом -f. Через этот флаг задается фильтр.

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

# docker ps -a -f status=exited

12.2. Работа в контейнере и выход из него.

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

# docker exec -i -t <имя_или_id> /bin/bash

Пример:

# docker exec -i -t example /bin/bash

или

# docker exec -i -t 240d5bdf748c /bin/bash

Знаком того, что мы успешно вошли в консоль контейнера будет имя root на его ID вида:

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

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

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

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

# docker container stop <имя_или_id>

Например:

# docker container stop example

Чтобы удалить контейнер используйте опцию rm:

# docker rm -f <имя_или_id>

Например:

# docker rm -f example

Примечание: ключ -f позволяет удалять запущенные контейнеры без их предварительной остановки.

12.4. Очистка только потушенных/незапущенных контейнеров.

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

# docker ps -a -f status=exited

И вот у нас уже список только выключенных контейнеров.

Можно, конечно, брать по очереди ID контейнера и выполять:

# docker rm

Но это ж сколько ручной работы! Хотелось бы как-то одной командой все решить. Даже если отфильтровать вывод с помощью grep и awk, а потом по очереди всем ID сделать rm в цикле, то это уже целый скрипт получается! Громоздко!

Выход есть! Флаг -q выведет только ID контейнеров.

И в этом случае можно одной командой все подчистить:

# docker rm $(docker ps -a -q -f status=exited)

13. Тестовый запуск контейнера Docker.

Для более подробного примера запустим приложение nginx на конкретном порту, например 80 порт, и убедимся, что все работает.

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

# iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

# service iptables save

Перезагружаем iptables чтобы применялись новые правила:

# systemctl restart iptables

Запускаем контейнер с именем example:

# docker run --name example -d -p 80:80 nginx

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

14. Вызов справки и общесистемной информации по Docker.

Чтобы посмотреть список возможных команд введите:

# docker run --help

Чтобы просмотреть все подкоманды, введите:

# docker

Чтобы получить общесистемную информацию о Docker, введите:

# docker info

15. Обновление Docker.

Для обновления направления Docker на вашем сервере достаточно просто запустить обновление этих программ:

# yum -y install yum-utils device-mapper-persistent-data lvm2 docker-ce docker-ce-cli containerd.io

16. Примеры использования Docker.

Для тех, кто только начал изучать Docker подкину несколько полезных идей.

Например, зачем нам ставить отдельную виртуальную машину с CentOS, если у нас есть Docker с CentOS? Полезно!

Данная команда выполнит поиск по Docker Hub и вернёт список образов, чьё имя соответствует поисковому запросу.

# docker search centos

Загружаем данный образ локально к нам на физический сервер:

# docker pull centos

Загрузив образ, вы можете запустить контейнер с помощью подкоманды run.

# docker run centos

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

# docker images

Для примера попробуйте запустить контейнер при помощи последнего образа CentOS.

Комбинация опций –i и –t откроет интерактивную оболочку контейнера:

# docker run -i -t centos

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

Внутри контейнера можно запускать любые команды. Попробуйте установить в контейнер какое-нибудь приложение, например, MariaDB.

Имейте в виду: теперь добавлять префикс sudo не нужно, поскольку работа внутри контейнера выполняется с правами root. Ну, это если вы создавали пользователя под нужды Docker. Внутри контейнера Docker свой локальный пользователь root.

# yum -y install mariadb-server

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

# exit

Затем передайте все изменения в новый образ Docker при помощи следующей команды. Опция –m позволяет создать сообщение о коммите, которое предоставит вам (и другим пользователям) подробную информацию о внесённых изменениях. Опция –a позволяет указать автора коммита. ID контейнера был выписан из командной строки.

В качестве репозитория, как правило, указывается имя пользователя your Docker Hub:

# docker commit -m "What did you do to the image" -a "Author Name" container-id repository/new_image_name

Например:

# docker commit -m "added mariadb-server" -a "Sunday Ogwu-Chinuwa" 240d5bdf748c finid/centos-mariadb

Примечание! Новый образ сначала сохраняется локально. Далее будет показано, как выгрузить новый образ на Docker Hub.

Запросите список доступных образов, чтобы убедиться, что новый образ был сохранён успешно:

# docker images

Команда вернёт список локальных образов.

Теперь в списке появился новый образ centos-mariadb, который был получен из существующего образа CentOS, загруженного с Docker Hub. Разница в размерах отражает внесенные изменения (в данном случае установку приложения MariaDB). Поэтому если в дальнейшем вам понадобится контейнер CentOS с предустановленным приложением MariaDB, вы можете просто использовать этот образ. Также можно собирать образы из так называемых Dockerfile, но это очень сложный процесс, который выходит за рамки данного руководства.

17. Загрузка образов Docker в репозиторий.

Создав новый образ Docker, вы можете поделиться им на Docker Hub или в другом каталоге Docker. Для этого нужно иметь аккаунт.

Зарегистрируйтесь на Docker Hub. После этого нужно открыть аккаунт при помощи своих учётных данных.

# docker login -u docker-registry-username

Получив доступ к Docker Hub, можно загрузить новый образ:

# docker push docker-registry-username/docker-image-name

На выполнение команды уйдёт некоторое время.

Загрузив образ в каталог, вы увидите его в панели инструментов аккаунта.

Если в процессе загрузки произошла ошибка. Скорее всего, вам не удалось пройти аутентификацию. Войдите и попробуйте снова отправить образ.

18. Оригиналы источников информации.

  1. ru.wikipedia.org «Docker».
  2. 1cloud.ru «Установка и использование Docker на Centos 7».
  3. 8host.com «Установка и использование Docker на Centos 7».
  4. moonback.ru «Как установить Docker на CentOS 7».
  5. tproger.ru «Зачем и как использовать контейнеры: разбираемся с Docker, Kubernetes и другими инструментами».
  6. eternalhost.net «Что такое Docker и как его использовать в разработке».
  7. yodo.im «Yodo. Бот учитель Linux и DevOPS».

Читайте также: