Что такое Docker и как его использовать в разработке

Контейнеризация является отличной альтернативой аппаратной виртуализации. Все процессы в ней протекают на уровне операционной системы, что позволяет существенно экономить ресурсы и увеличивать эффективность работы с приложениями.
Одним из наиболее популярных инструментов для программной виртуализации является Docker — автоматизированное средство управления виртуальными контейнерами. Он решает множество задач, связанных с созданием контейнеров, размещением в них приложений, управлением процессами, а также тестированием ПО и его отдельных компонентов.
Что такое Docker и как его следует применять для веб-разработки, описано в этой статье.
Что такое Docker
Docker (Докер) — программное обеспечение с открытым исходным кодом, применяемое для разработки, тестирования, доставки и запуска веб-приложений в средах с поддержкой контейнеризации. Он нужен для более эффективного использование системы и ресурсов, быстрого развертывания готовых программных продуктов, а также для их масштабирования и переноса в другие среды с гарантированным сохранением стабильной работы.

Разработка Docker была начата в 2008 году, а в 2013 году он был опубликован как свободно распространяемое ПО под лицензией Apache 2.0. В качестве тестового приложения Docker был включен в дистрибутив Red Hat Enterprise Linux 6.5. В 2017 году была выпущена коммерческая версия Docker с расширенными возможностями.
Docker работает в Linux, ядро которых поддерживает cgroups, а также изоляцию пространства имен. Для инсталляции и использования на платформах, отличных от Linux, существуют специальные утилиты Kitematic или Docker Machine.
Основной принцип работы Docker — контейнеризация приложений. Этот тип виртуализации позволяет упаковывать программное обеспечение по изолированным средам — контейнерам. Каждый из этих виртуальных блоков содержит все нужные элементы для работы приложения. Это дает возможность одновременного запуска большого количества контейнеров на одном хосте.

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

- Docker-демон (Docker-daemon) — сервер контейнеров, входящий в состав программных средств Docker. Демон управляет Docker-объектами (сети, хранилища, образы и контейнеры). Демон также может связываться с другими демонами для управления сервисами Docker.
- Docker-клиент (Docker-client / CLI) — интерфейс взаимодействия пользователя с Docker-демоном. Клиент и Демон — важнейшие компоненты «движка» Докера (Docker Engine). Клиент Docker может взаимодействовать с несколькими демонами.
- Docker-образ (Docker-image) — файл, включающий зависимости, сведения, конфигурацию для дальнейшего развертывания и инициализации контейнера.
- Docker-файл (Docker-file) — описание правил по сборке образа, в котором первая строка указывает на базовый образ. Последующие команды выполняют копирование файлов и установку программ для создания определенной среды для разработки.
- Docker-контейнер (Docker-container) — это легкий, автономный исполняемый пакет программного обеспечения, который включает в себя все необходимое для запуска приложения: код, среду выполнения, системные инструменты, системные библиотеки и настройки.
- Том (Volume) — эмуляция файловой системы для осуществления операций чтения и записи. Она создается автоматически с контейнером, поскольку некоторые приложения осуществляют сохранение данных.
- Реестр (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) — применяются для организации сетевого интерфейса между приложениями, развернутыми в контейнерах.
Что такое Docker Engine
Docker Engine («Движок» Docker) — ядро механизма Докера. «Движок» отвечает за функционирование и обеспечение связи между основными Docker-объектами (реестром, образами и контейнерами).

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

Схема работы
- Пользователь отдает команду с помощью клиентского интерфейса Docker-демону, развернутому на Docker-хосте. Например, скачать готовый образ из реестра (хранилища Docker-образов) с помощью команды docker pull . Взаимодействие между клиентом и демоном обеспечивает REST API. Демон может использовать публичный (Docker Hub) или частный реестры.
- Исходя из команды, заданной клиентом, демон выполняет различные операции с образами на основе инструкций, прописанных в файле Dockerfile. Например, производит их автоматическую сборку с помощью команды docker build .
- Работа образа в контейнере. Например, запуск docker-image, посредством команды docker run или удаление контейнера через команду docker kill .
Как работают образы
Docker-image — шаблон только для чтения (read-only) с набором некоторых инструкций, предназначенных для создания контейнера. Он состоит из слоев, которые Docker комбинирует в один образ при помощи вспомогательной файловой системы UnionFS. Так решается проблема нерационального использования дисковой памяти. Параметры образа определяются в Docker-file.
Для многократного применения Docker-image следует пользоваться реестром образов или Докер-реестром (Docker-registry), позволяющим закачивать готовые образы с внешнего репозитория сервиса и хранить их в реестре Докер-хоста. Рекомендуемый вариант — официальный реестр компании Docker Trusted Registry (DTR).

Если требуется файл, то скачиваться будут только нужные слои. Например, разработчик решил доработать программное обеспечение и модифицировать образ, изменив несколько файлов. После загрузки на сервер будут отправлены слои, содержащие только модифицированные данные.
Как работают контейнеры
Каждый контейнер строится на основе Docker-образов. Контейнеры запускаются напрямую из ядра операционной системы Linux. Благодаря этому, они потребляют гораздо меньше ресурсов, чем при аппаратной виртуализации.
Изоляция рабочей среды осуществляется при помощи технологии namespace. Для каждого изолированного пространства (контейнера) создается уникальное пространство имен, которое и обеспечивает к нему доступ. Любой процесс, выполняемый внутри контейнера, ограничивается namespace.

В ОС Linux посредством Docker Engine используется немного другая технология — контрольные группы (cgroups). При этом приложение ограничивается некоторым набором ресурсов. Сgroups осуществляют обмен доступных аппаратных ресурсов с контейнерами, на которые дополнительно устанавливаются необходимые ограничения (использование памяти, прав доступа к другому ресурсу и т. д.).
Движок Docker объединяет пространство имен (namespace), контрольные группы (cgroups) и файловую систему (UnionFS) в формат контейнера. В будущем планируется поддержка других форматов посредством интеграции технологий BSD Jails или Solaris Zones.
Что происходит при запуске контейнера
- Происходит запуск образа (Docker-image). Docker Engine проверяет существование образа. Если образ уже существует локально, Docker использует его для нового контейнера. При его отсутствии выполняется скачивание с Docker Hub.
- Создание контейнера из образа.
- Разметка файловой системы и добавление слоя для записи.
- Создание сетевого интерфейса.
- Поиск и присвоение IP-адреса.
- Запуск указанного процесса.
- Захват ввода/вывода приложения.
Docker Compose
Для управления несколькими контейнерами, из которых состоит проект, используют пакетный менеджер — Docker Compose.

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

Некоторые возможности утилиты
- Управление нагрузочными характеристиками — осуществляется оптимизация рассылки запросов между хостами, обеспечивая на них равномерную нагрузку.
- Динамическое управление — допускается добавление элементов в swarm-кластер без дальнейшего его перезапуска.
- Возможность масштабирования — позволяет добавлять или удалять docker-образ для автоматического создания контейнера.
- Восстановление «узла» после сбоя — работоспособность каждого хоста постоянно контролируется управляющим «узлом». При сбое кластера происходит его восстановление и перезапуск.
- Rolling-update — выполняет обновление контейнеров. Процедура может выполняться в определенной последовательности и с временной задержкой для запуска другого контейнера. Параметр указывается в настройках. Если произойдет сбой обновления, то Docker Swarm выдаст ошибку и процесс повторится заново.
Для оркестрации контейнеров Doсker, наряду с Docker Swarm, применяют сторонний инструмент — опенсорсную платформу Kubernetes. Однако, в 2021 году в Kubernetes заявили об отказе от использования Doker в новых версиях. Поэтому связка Kubernetes и Docker будет постепенно терять актуальность.
Примеры применения
Окружение для разработки Docker применяется во множестве сфер — от обработки больших массивов данных, до работы с микросервисами, основанных на распределенной архитектуре.

Чтобы понять, как можно применять Докер на практике, разберем основные примеры использования для чайников.
- Быстрая доставка приложений (команды docker pull и docker push ) позволяет организовать коллективную работу над проектом. Разработчики могут работать удаленно на локальных компьютерах и выполнять пересылку фрагментов кода в контейнер для тестов.
- Развертывание и масштабирование — контейнеры работоспособны на локальных компьютерах, серверах, в облачных онлайн-сервисах. Их можно загружать на хостинг для дальнейшего тестирования, создавать ( docker run ), останавливать ( docker stop ), запускать ( docker start ), приостанавливать и возобновлять ( docker pause и docker unpause соответственно).
- Множественные нагрузки — осуществление запуска большого количества контейнеров на одном и том же оборудовании, поскольку Docker занимает небольшой объем дисковой памяти.
- Диспетчер процессов — возможность мониторинга процессов в Docker посредством команд docker ps и docker top , имеющими схожий синтаксис с Linux.
- Удобный поиск — в реестрах Docker он осуществляется очень просто. Для этого следует использовать команду docker search .
Заключение
Docker является важным инструментом для каждого современного разработчика, как основа аппаратной виртуализации приложений. Эта технология обладает широким функционалом и возможностями для контроля процессов. Докер позволяет не только развертывать контейнеры, но и оперативно масштабировать их экземпляры, работать с многоконтейнерными приложениями (Docker Compose), а также объединять несколько Докер-хостов в единый кластер (Docker Swarm).
Докер характеризуется достаточно простым синтаксисом. Поэтому он довольно прост в освоении как для опытных IT-специалистов, так и для новичков. Программное обеспечение совместимо со всеми версиями операционных систем Linux и Windows, поэтому область применения Docker практически не ограничена.
Чтобы использовать возможности контейнеризации на 100%, Docker нужна подходящая рабочая среда. Правильное решение — VPS от Eternalhost. Мощные виртуальные сервера с возможностью быстрого масштабирования ресурсов!
Что такое Docker: для чего он нужен и где используется
В статье мы расскажем, что такое контейнеры, где они применяются и чем могут быть полезны.

В первую очередь эта статья будет полезна тем, кто вообще не знаком с контейнерами или Docker. Мы расскажем самые базовые вещи, а наш пример по созданию приложения будет довольно простым. Но это позволит вам понять основы Docker и затем двигаться дальше — изучать более сложные материалы.
В конце будет практическая часть: мы создадим небольшое приложение, обернем его в образ и запустим. Все действия будем показывать на примере виртуальной машины облачной платформы Selectel.
Managed Kubernetes помогает разворачивать контейнерные приложения в инфраструктуре Selectel. Сосредоточьтесь на разработке, а мы займемся рутинными операциями по обеспечению работы вашего кластера Kubernetes.
Что такое контейнеры
Прежде чем рассказывать про Docker, нужно сказать несколько слов о технологии контейнеризации.
Контейнеры — это способ стандартизации развертки приложения и отделения его от общей инфраструктуры. Экземпляр приложения запускается в изолированной среде, не влияющей на основную операционную систему.
Разработчикам не нужно задумываться, в каком окружении будет работать их приложение, будут ли там нужные настройки и зависимости. Они просто создают приложение, упаковывают все зависимости и настройки в некоторый единый образ. Затем этот образ можно запускать на других системах, не беспокоясь, что приложение не запустится.
Docker — это платформа для разработки, доставки и запуска контейнерных приложений. Docker позволяет создавать контейнеры, автоматизировать их запуск и развертывание, управляет жизненным циклом. Он позволяет запускать множество контейнеров на одной хост-машине.
Контейнеризация похожа на виртуализацию, но это не одно и то же. Виртуализация запускает полноценный хост на гипервизоре со своим виртуальным оборудованием и операционной системой. При этом внутри одной ОС можно запустить другую ОС. В случае контейнеризации процесс запускается прямо из ядра основной операционной системы и не виртуализирует оборудование. Это означает, что контейнеризованное приложение может работать только в той же ОС, что и основная. Контейнеры не виртуализируют оборудование, поэтому потребляют меньше ресурсов.
Преимущества использования контейнеров Docker
Контейнеры упрощают работу как программистам, так и администраторам, которые развертывают эти приложения.
Docker решает проблемы зависимостей и рабочего окружения
Контейнеры позволяют упаковать в единый образ приложение и все его зависимости: библиотеки, системные утилиты и файлы настройки. Это упрощает перенос приложения на другую инфраструктуру.
Например, разработчики создают приложение в системе разработки — там все настроено, приложение работает. Когда оно готово, его нужно перенести в систему тестирования, а затем в продуктивную среду. Если в одной из них нет нужной зависимости, приложение не будет работать. Программистам придется отвлечься от разработки и совместно с командой поддержки разобраться в ситуации.
В контейнерах такой проблемы нет, так как они содержат в себе все необходимое для запуска приложения. Специалисты занимаются разработкой, а не решением инфраструктурных проблем.
Изоляция и безопасность
Контейнер — это набор процессов, изолированных от основной операционной системы. Приложения работают только внутри контейнеров и не имеют доступа к основной операционной системе. Это повышает безопасность приложений:они не смогут случайно или умышленно навредить основной системе. Если приложение в контейнере завершится с ошибкой или зависнет, это никак не затронет основную ОС.
Ускорение и автоматизация развертывания приложений и масштабируемость
Контейнеры упрощают развертывание приложений. В классическом подходе для установки программы нужно совершить несколько действий: выполнить скрипт, изменить файлы настроек и так далее. В этом процессе не исключена вероятность человеческой ошибки: пользователь запустит скрипт два раза, перепутает последовательность или что-то не поймет. Контейнеры позволяют полностью автоматизировать этот процесс, так как включают в себя все нужные зависимости и порядок выполнения действий.
Также контейнеры упрощают развертывание на нескольких серверах. В классическом подходе для того, чтобы развернуть одно и то же приложение на нескольких машинах, нужно будет повторять одни и те же действия. Контейнеры избавляют от этой рутинной работы и позволяют автоматизировать развертывание.
Контейнеры приближают к микросервисной архитектуре
Контейнеры хорошо вписываются в микросервисную архитектуру. Это подход к разработке, при котором приложение разбивается на небольшие компоненты, по возможности независимые. Обычно противопоставляется монолитной архитектуре, где все части системы сильно связаны друг с другом.
Это позволяет разрабатывать новую функциональность быстрее, ведь в случае с монолитной архитектурой изменение какой-то части может затронуть всю остальную систему.
Docker compose — одновременно развернуть несколько контейнеров
Docker-compose позволяет разворачивать и настраивать несколько контейнеров одновременно. Например, для веб-приложения нужно развернуть стек LAMP: Linux + Apache, MySQL, PHP. Каждое из приложений — это отдельный контейнер для ОС Linux. Но в этой ситуации нам нужны именно все контейнеры вместе, а не отдельно взятое приложение. Docker-compose позволяет развернуть и настроить все приложения одной командой, а без него пришлось бы разворачивать и настраивать каждый контейнер отдельно.
Хранение данных в Docker
Одна из главных особенностей контейнеров — эфемерность. Это означает, что контейнеры могут быть в любой момент остановлены, перезапущены или уничтожены. При этом все накопленные данные в контейнере будут потеряны. Поэтому приложения нужно разрабатывать так, чтобы они не полагались на хранилище данных в контейнере, это называется принципом Stateless.
Это хорошо подходит для приложений или сервисов, которые не сохраняют результаты своей работы. Например, функции расчета или преобразования данных: им на вход поступил один набор данных, они его преобразовали или рассчитали и вернули результат. Все, ничего никуда сохранять не нужно.
Но далеко не все приложения такие, и есть много данных, которые нужно сохранить. В контейнерах для этого предусмотрены несколько способов.
Тома (Docker volumes)
Это способ, при котором Docker сам создает директории для хранения данных. Их можно сделать доступными для разных контейнеров, чтобы они могли обмениваться данными. По умолчанию эти директории создаются на хост-машине, но можно использовать и удаленные хранилища: файловый сервер или объектное хранилище.
Монтирование каталога (bind mount)
В этом случае директория сначала создается на хост-машине а уже потом монтируется в контейнеры.
Но этот способ не рекомендуется, потому что он усложняет резервное копирование, миграцию и совместное использование данных несколькими контейнерами.
Архитектура (компоненты) Docker
Теперь расскажем подробнее про компоненты, из которых состоит Docker.
Docker daemon
Это некоторый резидентный процесс, который запущен на хост-машине постоянно. Он владеет всей инфраструктурой, а также предоставляет интерфейс взаимодействия с контейнерами, включающего создание и удаление, запуск и остановку.
В ранних версиях платформы Docker можно встретить упоминание о dockerd, но на текущий момент демоны уже успели разбиться на отдельные проекты. Все чаще можно встретить его современника — containerd.
Docker client (клиент)
Это интерфейс командной строки для управления Docker daemon. Мы пользуемся этим клиентом, когда создаем и разворачиваем контейнеры, а клиент отправляет эти запросы в Docker daemon.
Docker image (образ)
Это неизменяемый файл (образ), из которого разворачиваются контейнеры. Приложения упаковываются именно в образы, из которых потом уже создаются контейнеры. В технической литературе можно также встретить описание image как шаблона запуска процесса.
Приведем аналогию на примере установки операционной системы. В дистрибутиве (образе) ОС есть все, что необходимо для ее установки. Но этот образ нельзя запустить, для начала его нужно «развернуть» в готовую ОС. Так вот, дистрибутив для установки ОС — это образ, а установленная и работающая ОС — это контейнер. Но контейнеры обычно разворачиваются одной командой — это намного проще и быстрее, чем установка ОС.
Docker container (контейнер)
Это уже развернутое из образа и работающее приложение.
Docker Registry
Это репозиторий с образами. Разработчики создают образы своих программ и выкладывают их в репозиторий, чтобы их можно было скачать и воспользоваться ими. Распространенный публичный репозиторий — Docker Hub. В нем собраны образы множества популярных программ или платформ: базы данных, веб-серверы, компиляторы, операционные системы и так далее. Также можно создать свой приватный репозиторий, например внутри компании. Разработчики будут размещать там образы, которые будут использоваться всей компанией.
Dockerfile
Dockerfile — это инструкция для сборки образа. Это простой текстовый файл, содержащий по одной команде в каждой строке. В нем указываются все программы, зависимости и образы, которые нужны для разворачивания образа.
Для примера рассмотрим Dockerfile, который мы будем использовать далее в этой статье чтобы развернуть собственное приложение:
FROM python:3 COPY main.py / CMD [ "python", "./main.py" ]
Первая строчка означает, что за основу мы берем образ с названием python версии 3 это называется базовый образ. Docker найдет его в docker registry, скачает и будет использовать за основу. Вторая строчка означает, что нужно скопировать файл main.py в корень файловой системы контейнера. Третья строчка означает, что нужно запустить python и передать ему в качестве параметра название файла main.py.
Далее рассмотрим примеры нескольких команд докер и что происходит, когда мы их выполняем.

Все эти команды выполняются в Docker client, который отправляет их в Docker daemon:
- Команда docker build (зеленая стрелка) читает dockerfile и собирает образ.
- Команда docker pull (красная стрелка) скачивает образ из docker registry. По умолчанию docker скачивает образы из публичного репозитория Docker Hub. Но можно создать свой репозиторий и настроить докер, чтобы он работал с ним.
- Команда docker run (черная стрелка) берет образ и запускает из него контейнер.
Создаем виртуальную машину для работы с Docker
Перейдем к практической части. Мы установим докер, создадим приложение, обернем его в контейнер и запустим. Мы для примера будем использовать виртуальную машину на платформе Selectel.
В панели управления заходим в раздел «Облачная платформа» — «Серверы», нажимаем кнопку «Создать сервер».

На следующем экране выбираем параметры сервера: имя, регион, ОС, параметры производительности и так далее. Сейчас для нас важны параметры «Источник» — выбираем ОС Ubuntu 20.04 и «Конфигурация» — выбираем 2 vCPU и 8 ГБ оперативной памяти.

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

После этого внизу страницы нажимаем кнопку «Создать». Виртуальная машина создается за несколько минут, и после того, как она перейдет в статус ACTIVE, к ней можно подключаться по SSH.

Установка Docker
Мы рассмотрим установку докера на примере Ubuntu. Если у вас другой дистрибутив Linux или операционная система — ищите соответствующую инструкцию на официальном сайте.
Для начала синхронизируем пакетную базу apt и установим нужные зависимости:
sudo apt-get update
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg \ lsb-release
Далее импортируем GPG-ключ для репозитория docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Теперь добавим новый репозиторий в список apt:
echo \ "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Теперь можно устанавливать докер:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
По умолчанию, доступ к docker daemon есть только у пользователя root. Чтобы с докером могли работать и другие пользователи, их нужно добавить в специальную группу — docker. Выполните эту команду из под обычного пользователя:
sudo usermod -aG docker $USER
После этого необходимо перелогиниться, чтобы изменение вступило в силу.
Запуск контейнера
Теперь попробуем запустить какое-нибудь готовое приложение. Выполните команду:
docker run ubuntu echo 'hello from ubuntu'
Команда docker run создает и запускает контейнер из образа. В этом примере мы создаем контейнер из образа ubuntu, затем выполняем в нем команду echo ‘hello from ubuntu’. Но так как у нас чистая установка докера и мы не скачали ни одного образа, докер сначала найдет этот образ в публичном репозитории Docker Hub, скачает, а потом создаст из него контейнер. В следующий раз, когда нам понадобится образ ubuntu, докер уже не будет его скачивать.
После выполнения команды в терминале появится строка hello from ubuntu, и контейнер сразу остановится. Теперь выполним другую команду:
docker run -it ubuntu
Эта команда запустит контейнер в интерактивном режиме, то есть контейнер запустится и будет ждать дальнейших команд. При этом мы окажемся внутри операционной системы контейнера: запустится оболочка (bash), и мы сможем выполнять какие-то команды внутри контейнера. Чтобы выйти из контейнера, введите команду exit.
Создание собственного образа и запуск контейнера
Теперь создадим HelloWorld-приложение на Python, обернем его в образ и запустим.
Для начала создадим директорию, в которой мы будем работать и перейдем в нее:
mkdir first-docker-app
cd first-docker-app
Создадим файл main.py и запишем в него одну строчку кода:
echo 'print("Hello from python");' >> main.py
Проверим, что наша программа работает. Для этого выполним команду:
python main.py
В консоли должно выйти сообщение Hello from python. Это и есть наше простое приложение. Теперь нужно обернуть его в докер-образ. Для этого создадим файл Dockerfile и напишем в нем три строчки:
FROM python:3 COPY main.py / CMD [ "python", "./main.py" ]
В первой строке мы указываем образ, который берем за основу. Так как мы пишем приложение на Python, нужно чтобы в нашем образе он уже был установлен. Самый простой способ это сделать — использовать готовый официальный образ с Docker Hub. Цифра 3 — это тег. Он означает, что нужно использовать третью версию Python. Вместо этого можно было бы использовать тег latest, который означает самую последнюю версию, или можно было указать номер конкретной версии, например 3.8.8.
Во второй строчке мы копируем наш файл main.py в корневую директорию образа.
Третья строчка — запускаем python и передаем ему в качестве параметра имя нашего файла.
Теперь из этого докер-файла можно собирать образ. Выполним команду:
docker build -t first-docker-app .
Параметр -t обозначает имя нашего образа, мы назвали его first-docker-app.
Так как у нас еще нет скачанного образа python, то докер сам скачает его из Docker Hub и затем будет использовать его в качестве основы для создания нашего образа.
Проверим список установленных у нас образов:
docker images
Мы увидим, что у нас установлено три образа:
REPOSITORY TAG IMAGE ID CREATED SIZE first-docker-app latest 649cceb4dfd2 4 seconds ago 885MB python 3 b1aa63f57d3c 2 days ago 885MB ubuntu latest 8e428cff54c8 4 days ago 72.9MB
first-docker-app — это наш образ, который мы только что создали. python — это образ python, который докер автоматически скачал чтобы собрать наш образ. ubuntu — образ, который мы пробовали для запуска готового приложения.
Теперь создадим контейнер из нашего образа и запустим его:
docker run first-docker-app
В результате нам выведется результат: Hello from python.
Итог: Мы создали свое приложение, упаковали его в докер-образ и запустили. Конечно, это очень простой пример. Наша программа состоит всего из одной строчки, а dockerfile из трех. Но это позволяет понять базовые принципы работы докера, как он устроен, как создавать свои образы и запускать контейнеры.
Готовые кластеры Kubernetes с GPU
Создайте за несколько кликов.
Установка docker machine в Unix/Linux


Docker Machine — это инструмент, который позволяет устанавливать Docker Engine на виртуальные хосты и управлять хостами с помощью docker-machine команд. Вы можете использовать Machine для создания Docker нод на локальном компьютере Mac/Linux, а так же в сети вашей компании или в облачных провайдерах (Azure, AWS или Digital Ocean). Используя команды, вы можете запускать, останавливать, перезапускать или проверять управляемый узел, а так же, слегкостью обновлять клиент и Docker демон или настраивать Docker клиент для взаимодействия с вашим хостом.
Для чего используется docker-machine?
1. Docker-machine используется для установки и запуска docker на Linux/Mac OS.
2.Docker-machine используется для провиженинга и управление несколькими удаленными Docker хостами прям с локальной машины.
3. Docker-machine используется для провиженинга Swarm кластера (docker-swarm).
Какие отличия docker-engine и docker-machine?
Когда люди говорят «docker», они обычно подразумевают Docker Engine — это клиент-серверное приложение, состоящее из Docker демона, REST API, который указывает интерфейсы для взаимодействия демона и клиентского интерфейса командной строки (CLI), который «общается» с демоном (через обертку API REST).
Docker Engine принимает docker команды от CLI ( Например: docker run your_image, docker ps и т.д и т.п).

Работа Docker Engine
Docker Machine — это инструмент для обеспечения и управления вашими Dockerized хостами (хосты с Docker Engine на них). Как правило, вы устанавливаете Docker Machine в свою локальную систему в дополнение к docker. Docker Machine имеет собственную клиентскую docker-machine для командной строки, а так же клиент Docker Engine и сам docker. Вы можете использовать данную утилиту для установки Docker Engine на одну или несколько виртуальных систем.
Эти виртуальные системы могут быть локальными (например, когда вы используете «docker-machine» для установки и запуска Docker Engine в VirtualBox на Mac или Linux) или удаленно (например, когда вы используете «docker-machine» для обеспечения докеретизированных хостов на облачных провайдерах). Докерезированные хосты могут иногда называются управляемыми «machines» — т.к машинами.

Первое что необходимо сделать, — это установить сам docker. Я уже приводил примеры по установке данного ПО:
Вот еще полезное чтиво:
И так, переходим к установке docker-machine. Установка не очень сложная.
Установка docker machine в Linux
Очень простая установка, стоит выполнить:
$ curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` > /tmp/docker-machine
Выставляем право на выполнение:
# chmod +x /tmp/docker-machine
И после чего, копируем:
# cp /tmp/docker-machine /usr/local/bin/docker-machine
И переходим к использованию.
Установка docker machine в Mac OS X
Имеется несколько способов как можно утановить докер машину на мак ОС.
-=== СПОСОБ 1 — Использование официального сайта ===-
Выполняем скачивание данного файла:
$ curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine
Выставляем право на выполнение:
# chmod +x /usr/local/bin/docker-machine
-=== СПОСОБ 2 — Использование не официальный источник, homebrew ===-
Так же, можно выполнить установку через homebrew, но для начала — поставим его! Я описывал процесс установки данного ПО, по этмоу можно с ним ознакомится тут:
После чего, выполняем поиск тулзы:
$ brew search docker-machine
И после чего, можно ее поставить:
$ brew install docker-machine
И переходим к использованию.
Использование docker machine в Unix/Linux
Проверим версию докер машины:
$ docker-machine version
Для удаления, используйте:
# rm $(which docker-machine)
Я docker-machine использую для деплоя своих контейнеров в облака.
Использование docker machine для деплоя в AWS
И по этому, я хотел бы привести пример такого деплоя, на примере AWS.
У меня взят пример с Создание docker с nginx + lua на CentOS7 статьи, и по этому — я создам деплой.
Создаем машину следующим образом:
$ docker-machine create --driver amazonec2 --amazonec2-access-key XXXXXXXX --amazonec2-secret-key YYYYYYY --amazonec2-region us-east-1 --amazonec2-open-port 80 --amazonec2-open-port 443 --amazonec2-vpc-id vpc-3cdc1145 nginx-lua-version2.0 Running pre-create checks. Creating machine. (nginx-lua-version2.0) Launching instance. Waiting for machine to be running, this may take a few minutes. Detecting operating system of created instance. Waiting for SSH to be available. Detecting the provisioner. Provisioning with ubuntu(systemd). Installing Docker. Copying certs to the local machine directory. Copying certs to the remote machine. Setting Docker configuration on the remote daemon. Checking connection to Docker. Docker is up and running! To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env nginx-lua-version2.0
- —driver amazonec2 — Указываем драйвер, данном случае, — это драйвер для деплоя машин в AWS.
- —amazonec2-access-key XXXXXXXX — Прописываем AWS access ключ.
- —amazonec2-secret-key YYYYYYY — Прописываем AWS secret ключ.
- —amazonec2-region us-east-1 — Задаем регион для деплоя машинки.
- —amazonec2-open-port 80 — Открываем порт.
—amazonec2-open-port 443 - —amazonec2-vpc-id vpc-3cdc1145 — Задаем используюшую VPC (т.е сеть).
- nginx-lua-version2.0 — Название будущей машины.
Чтобы не задавать AWS access и AWS secret ключи, можно прописать:
# vim ~/.aws/credentials
[default] aws_access_key_id = XXXXXXX aws_secret_access_key = YYYYYYY
Так же, можно сделать экспорт переменных, например:
$ export AWS_ACCESS_KEY_ID=XXXXXXXXX $ export AWS_SECRET_ACCESS_KEY=YYYYYYYY $ docker-machine create --driver amazonec2 my_aws_machine_1
Я не буду приводить все возможные переменные для создания машинки (на данном этапе).
Можно посмотреть какие машинки имеются:
$ docker-machine ls
Подключаемся к созданной машинке:
$ docker-machine ssh nginx-lua-version2.0 Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-1020-aws x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 132 packages can be updated. 54 updates are security updates. ubuntu@nginx-lua-version2:~$
Как видно с вывода, у меня все развернулось и работает как нужно!
Для удаления машины, выполните:
$ docker-machine rm -f nginx-lua-version2.0
Использование docker machine для деплоя в VirtualBox
Для тестов, я создам машну следующей командой:
$ docker-machine create --driver virtualbox virtualbox-machine
Running pre-create checks. (virtualbox-machine) Default Boot2Docker ISO is out-of-date, downloading the latest release. (virtualbox-machine) Latest release for github.com/boot2docker/boot2docker is v17.09.1-ce (virtualbox-machine) Downloading /Users/captain/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v17.09.1-ce/boot2docker.iso. (virtualbox-machine) 0%. 10%. 20%. 30%. 40%. 50%. 60%. 70%. 80%. 90%. 100% Creating machine. (virtualbox-machine) Copying /Users/captain/.docker/machine/cache/boot2docker.iso to /Users/captain/.docker/machine/machines/virtualbox-machine/boot2docker.iso. (virtualbox-machine) Creating VirtualBox VM. (virtualbox-machine) Creating SSH key. (virtualbox-machine) Starting the VM. (virtualbox-machine) Check network to re-create if needed. (virtualbox-machine) Waiting for an IP. Waiting for machine to be running, this may take a few minutes. Detecting operating system of created instance. Waiting for SSH to be available. Detecting the provisioner. Provisioning with boot2docker. Copying certs to the local machine directory. Copying certs to the remote machine. Setting Docker configuration on the remote daemon. Checking connection to Docker. Docker is up and running! To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env virtualbox-machine
Смотрим какие контейнеры имеются:
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS dev - virtualbox Stopped Unknown virtualbox-machine * virtualbox Running tcp://192.168.99.100:2376 v17.09.1-ce
Для получения списка переменных для машины, используйте:
$ docker-machine env virtualbox-machine export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/captain/.docker/machine/machines/virtualbox-machine" export DOCKER_MACHINE_NAME="virtualbox-machine" # Run this command to configure your shell: # eval $(docker-machine env virtualbox-machine)
Подключаем ваш shell в созданную машину:
$ eval $(docker-machine env virtualbox-machine)
Для подключения к докер-машине, используйте:
$ docker-machine ssh virtualbox-machine ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""\___/ === ~~~Использование docker machine для деплоя в Google Cloud
Не было необходимости еще. Думаю что я дополню статью, но попозже!
Использование docker machine для деплоя в Digital Ocean
Не было необходимости еще. Думаю что я дополню статью, но попозже!
Вот и все, статья «Установка docker machine в Unix/Linux» завершена.
Добавить комментарий Отменить ответ
Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.
Рубрики
- Arch Linux (167)
- Commands (36)
- Debian's (635)
- Administration tools Ubuntu (37)
- Backups Debian's (7)
- Database в Ubuntu (58)
- Games (игры) (1)
- Monitoring в Debian и Ubuntu (49)
- Virtualization в Ubuntu / Debian/ Linux Mint (41)
- Docker (22)
- Kubernetes (6)
- KVM (4)
- OpenVZ (3)
- Vagrant (5)
- VirtualBox (6)
- ArgoCD (1)
- Concourse (1)
- Gitlab (1)
- Jenkinks (4)
- Spinnaker (1)
- Apache (32)
- Cherokee (1)
- FTP-services (5)
- Lighttpd (1)
- Nginx (26)
- PHP (27)
- Proxy для Debian's (2)
- Tomcat (4)
- Панели управления в Ubuntu/Debian/Mint (24)
- Установка и настройка почты на Ubuntu/Debian (12)
- Хранилища (clouds) (2)
- Administration tools freeBSD (19)
- Database во FreeBSD (52)
- Monitoring во freeBSD (37)
- Virtualization во FreeBSD (22)
- VoIP (1)
- Установка Web сервисов (91)
- Установка и настройка почты (6)
- Установка из ports (пакетов) (19)
- Установка из sorce code (исходников) (23)
- Непрерывная интеграция (CI) (27)
- Database в MacOS (36)
- Monitoring в Mac OS (31)
- Security (безопасность) (12)
- Virtualization в Mac OS (30)
- Docker (19)
- Kubernetes (6)
- Vagrant (5)
- VirtualBox (5)
- ArgoCD (1)
- CircleCI (1)
- Concourse (1)
- Gitlab (1)
- Jenkinks (4)
- Spinnaker (1)
- Administration tools CentOS (49)
- Backups RPM's (4)
- Database в CentOS (68)
- Monitoring в CentOS (67)
- Virtualization в CentOS/ Red Hat/ Fedora (42)
- Docker (23)
- Kubernetes (6)
- KVM (5)
- OpenVZ (2)
- Vagrant (5)
- VirtualBox (6)
- VMWare (3)
- ArgoCD (1)
- Concourse (1)
- Gitlab (1)
- Jenkinks (4)
- Spinnaker (1)
- Apache (35)
- Cherokee (1)
- DNS (3)
- FTP (10)
- Nginx (33)
- PHP (34)
- Proxy для RedHat's (2)
- Tomcat (2)
- Voice (2)
- Панели управления в CentOS/Red Hat/Fedora (27)
- Прокси сервер на CentOS/RHEL/Fedora (4)
- Установка и настройка почты на CentOS/RHEL/Fedora (14)
- Хранилища (clouds) (1)
соц сети



Архив новостей
Свежие записи
- Pull/Push AWS ECR образов через AWS Route53 CNAME 17.11.2021
- openpgp: signature made by unknown entity в Terraform 09.11.2021
- Установка Terraformer в Unix/Linux 31.05.2021
- Установка ArgoCD в Unix/Linux 06.01.2021
- Установка tfswitch в Unix/Linux 08.12.2020
Свежие комментарии
- Вадим к записи Переключить версию python в Unix/Linux
- Максим к записи Сохраняем все резервные копии в Dropbox
- Артём к записи Переключить версию python в Unix/Linux
- Владислав к записи Добавить Swap в CentOS/Fedora/RedHat
- Александр к записи Закомментировать/Раскомментировать строки vi/vim в Unix/Linux
Управление удалёнными хостами Docker с помощью Docker Machine в Ubuntu 16.04
Docker Machine – это инструмент, позволяющий управлять удалёнными хостами Docker с локального компьютера.
Docker Machine можно установить на локальную или на удалённую систему. Как правило, эту программу используют на локальной машине.
Docker Machine можно установить на большинство дистрибутивов Linux, на Mac OS X и Windows. Данное руководство поможет установить этот инструмент на локальную машину Ubuntu 16.04.
Требования
- Локальная машина Ubuntu 16.04.
- Предварительно установленная система Docker (инструкции по установке можно найти здесь).
1: Установка Docker Machine
Для начала установите Docker Machine на локальную машину.
Чтобы загрузить бинарный файл, введите:
wget https://github.com/docker/machine/releases/download/v0.6.0/docker-machine-$(uname -s)-$(uname -m)
Файл называется docker-machine-Linux-x86_64. После загрузки переименуйте его в docker-machine, так будет проще работать.
mv docker-machine-Linux-x86_64 docker-machine
Сделайте файл исполняемым:
chmod +x docker-machine
Переместите или скопируйте его в каталог usr/local/bin, чтобы получить доступ к системной команде:
sudo mv docker-machine /usr/local/bin
Чтобы убедиться, что установка прошла успешно, запросите версию программы:
docker-machine version 0.6.0, build e27fb87
2: Установка сценариев Docker Machine
В GitHub-репозитории Docker Machine можно найти три bash-сценария, которые упрощают работу команд docker и docker-machine. Они отвечают за выполнение команд и пользовательские настройки командной строки bash.
Установите эти сценарии на локальный компьютер в каталог /etc/bash_completion.d.
Первый сценарий позволяет увидеть статус машины в командной строке. Это полезно, если при работе вы часто переключаетесь между несколькими машинами Docker. Этот сценарий называется docker-machine-prompt.bash. Чтобы установить его, введите:
sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-prompt.bash -O /etc/bash_completion.d/docker-machine-prompt.bash
Чтобы завершить установку этого файла, нужно установить пользовательское значение переменной PS1 в файле .bashrc. PS1 – это специальная переменная оболочки, которая используется для редактирования командной строки bash. Откройте файл:
Этот файл содержит три строки, которые начинаются с PS1:
В конец каждой строки нужно вставить $(__docker_machine_ps1 ” [%s]”). Должно получиться следующее:
Теперь имя активной машины будет отображаться в командной строке оболочки.
Сохраните и закройте файл.
Второй сценарий называется docker-machine-wrapper.bash. Он добавляет к команде docker-machine подкоманду use, которая позволяет быстро переключаться между машинами Docker. Чтобы загрузить этот сценарий, наберите:
sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-wrapper.bash -O /etc/bash_completion.d/docker-machine-wrapper.bash
Последний сценарий называется docker-machine.bash. Он отвечает за завершение команд docker-machine.
sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine.bash -O /etc/bash_completion.d/docker-machine.bash
Чтобы активировать внесённые изменения, закройте и снова откройте терминал. Если вы находитесь в сессии SSH, закройте и снова откройте сессию. Теперь завершение команд docker и docker-machine включено.
3: Команды Docker Machine
Для создания нового хоста используется команда:
docker-machine create -d 8host \
Параметр –d задаёт драйвер.
При помощи субкоманды ls можно просмотреть список доступных хостов:
Команда вернёт список хостов (в списке указывается имя хоста, его состояние, URL-адрес и другие данные о хосте).
Чтобы получить подробную информацию о хосте Docker, используйте подкоманду inspect:
docker-machine inspect machine-name
Команда вернёт следующий результат. В строке Image указан текущий дистрибутив Linux:
.
"DropletName": "",
"Image": "ubuntu-15-10-x64",
"Region": "nyc3",
"SSHKeyID": 1857042,
"Size": "512mb",
"IPv6": false,
"Backups": false,
"PrivateNetworking": false,
---Чтобы вывести на экран настройки соединения хоста, введите:
docker-machine config machine-name
--tlsverify
--tlscacert="/home/kamit/.docker/machine/certs/ca.pem"
--tlscert="/home/kamit/.docker/machine/certs/cert.pem"
--tlskey="/home/kamit/.docker/machine/certs/key.pem"
-H=tcp://104.131.102.147:2376Последняя строка результата данной команды отображает IP-адрес хоста. Также узнать IP можно с помощью следующей команды:
docker-machine ip machine-name
Чтобы отключить удалённый хост, используйте:
docker-machine stop machine-name
Чтобы убедиться, что удалённый хост был отключен, запросите список доступных хостов:
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-docker 8host TimeoutЧтобы запустить удалённый хост, введите:
docker-machine start machine-name
Проверить его состояние можно в списке доступных хостов:
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-docker - 8host Running tcp://159.203.117.16:2376 v1.11. 1Чтобы удалить хост, используйте команду:
docker-machine rm machine-name
4: Выполнение команд на хосте Docker через SSH
На данный момент у вас есть все необходимые данные о хосте. Однако Docker предоставляет гораздо больше возможностей. К примеру, вы можете выполнять на хосте Docker встроенные команды Linux. Это делается с помощью подкоманды ssh в локальной системе.
Данный раздел научит вас пользоваться этой подкомандой и запускать сессии SSH на хостах Docker.
Если на удалённом хосте используется операционная система CentOS, выполните в локальной системе следующую команду, чтобы обновить пакеты системы удалённого хоста.
docker-machine ssh machine-name yum update
Чтобы узнать, какое ядро использует удалённый хост, введите:
docker-machine ssh machine-name uname -r
Также команда ssh позволяет выполнить авторизацию на хосте Docker:
docker-machine ssh machine-name
После этого командная строка должна измениться:
Чтобы закрыть удалёный хост, введите:
5: Включение хоста Docker
После активации хост Docker подключается к локальному клиенту Docker, что позволяет запускать встроенные команды в удалённой системе. Чтобы включить хост, используйте команду:
eval $(docker-machine env machine-name)
или её альтернативу:
docker-machine use machine-name
Примечание: При работе с большим количеством хостов Docker для переключения между хостами рекомендуется использовать команду docker-machine use.
После этого командная строка должна измениться. Это значит, что локальный клиент Docker подключен к удалённому хосту Docker.
В конце строки указывается имя текущего хоста.
Теперь можно выполнять команды docker на удалённом хосте.
Чтобы убедиться, что хост включен, запустите команду docker-machine ls. Если хост активен, в столбце ACTIVE будет символ звёздочки (*).
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-docker * 8host Running tcp://45.55.183.145:2376 v1.11.1Примечание: Когда хост включен, все команды docker выполняются на удалённом хосте, а все команды Linux – на локальной машине.
Чтобы закрыть хост, введите:
docker-machine use -u
Эта команда вернёт вас в командную строку локальной системы.
6: Создание контейнера Docker на удалённом хосте
Попробуйте запустить контейнер на удаленном хосте Docker.
Примечание: В качестве примера в руководстве используется официальный контейнер Nginx.
Подключившись к удалённому хосту, выполните следующую команду, чтобы запустить контейнер Nginx:
docker run -d -p 8080:80 --name httpserver nginx
Данная команда свяжет порт 80 контейнера Nginx и порт 8080 хоста Docker. Теперь вы можете получить доступ к стандартной странице Nginx.
Если команда выполнена успешно, вы увидите эту страницу в браузере, перейдя по ссылке:
Чтобы закрыть командную строку удалённого хоста, введите:
Примечание: Чтобы создать контейнер на удалённом хосте, нужно активировать его. В противном случае контейнер будет создан на локальной машине. Определить, какая машина является текущей (удалённая или локальная), можно с помощью командной строки – в ней указывается имя текущей машины.
7: Отключение отчетов о сбоях (опционально)
По умолчанию в случае неудачного выполнения команды или сбоя Docker Machine диагностическая информация автоматически передается на аккаунт Docker на Bugsnag. Эту функцию при желании можно отключить. Для этого создайте пустой файл no-error-report в каталоге .docker/machine.
В случае сбоя Docker Machine проверяйте этот файл.
Заключение
Данное руководство содержит только основы работы с Docker Machine. Теперь вы можете создать необходимое количество удалённых хостов Docker и управлять ими.
Более подробную информацию о Docker Machine можно получить в документации программы. Загрузить использованные в руководстве сценарии можно с этой страницы GitHub.