Автор оригинала: Andrew T. Baker.
Эта статья представит вас к тому, что работает Docker, как работает Docker, а некоторые базовые терминологии, такие как контейнеры, изображения и докерафильки. Он основан на часах офиса кодамента, размещенного автором Weal Course O’Reilly Docker, Эндрю Т. Бейкер.
Докер слайды
Что такое docker?
Докер начался в качестве бокового проекта в DotCloud, платформа-аси-компания часто сравнивается с Heroku. Я думаю, что это действительно круто Как их бизнес взлетел После составления докера их основной фокус.
Некоторые люди думают, что Докер может быть какой-то инструмент виртуализации, как Vmware. или Виртуальная коробка . Некоторые люди думают, что это менеджер VM, который помогает вам управлять виртуальными машинами, такими как Вагон . Некоторые люди думают, что это инструмент управления конфигурацией, как Шеф-повар , Anbible или Марионетка Отказ Есть и другие слова, которые плавают вокруг докеровской экосистемы, такие как CGroups, LXC, LibVirt, Go и так далее.
Тем не менее, когда я пытаюсь объяснить докер людям, которые новый для этого, я пытаюсь сказать им, что это в собственной категории, поэтому она не сравнима с любым существующим инструментом.
Если вы идете в Docker.com Вы увидите в своем описании:
Docker — это открытая платформа для разработчиков и Sysadmins, чтобы построить, корабль и запустить распределенные приложения.
Это вроде трудно сказать, что Docker от этого предложения, но я бы впишемся, чтобы сказать, что Docker — это просто новый и другой способ запуска и развертывания программных приложений Отказ
Есть две большие кусочки докера: Данкер Двигатель , который является Docker Binary, который работает на локальной машине и серверах и работает для запуска вашего программного обеспечения. Докерный хаб , который является веб-сайтом и облачной службой, которая позволяет всем вам поделиться своими изображениями докера.
Инструменты развертывания программного обеспечения
Это спектр того, что нужно для развертывания вашего программного обеспечения на сервер. Наименее портативное, но с минимальным накладным расходом методом осуществляется через ручную конфигурацию. Примером ручной конфигурации будет запустить новый EC2 на веб-сервисах Amazon, защищенную оболочку (SSH) в нее, выполните все отдельные команды, которые вам необходимо установить правильные пакеты, чтобы запустить приложение для программного обеспечения и т. Д. С ручной конфигурацией вы можете иметь скрипт команд, которые вы выполняете, и когда вы закончите, сервер будет настроен точно так, как вы хотите. Тем не менее, очень трудно принять конфигурацию на новый сервер, и вам придется сделать все снова, если вы переключите серверы.
Далее на SPECTRUM — это инструменты управления конфигурацией (CM), такие как марионетка, шеф-повар или нес помощью. В течение последних нескольких лет это был предпочтительным способом настроить свой сервер. У вас есть ваше программное приложение, а затем вы также напишите дополнительный код для конфигурации, используя один из инструментов CM. Запись кода конфигурации делает ваше программное обеспечение немного более портативным, поскольку в следующий раз вы запускаете новый сервер, вам не нужно вручную вручную или вспоминать все команды, которые вы написали. Вместо этого вы можете просто сказать инструмент CM, чтобы продолжить и настроить приложение точно так, как указал. Это все еще требует времени для всех этих команд для запуска на новый сервер, но, по крайней мере, вам не нужно делать это вручную.
Переход на весь путь к правой стороне спектра, где входят традиционные виртуальные машины (VMS). Это самый портативный способ развертывания программного обеспечения, но он также имеет много накладных расходов. Многие организации будут использовать изображения Amazon Machine, например, для развертывания своего сервера в облаке, если они работают на веб-сервисах Amazon (AWS), и это отличный способ обеспечить настройку программного обеспечения в вашем конвейере по сборке на вашем развитии Машина будет вести себя именно так, как вы ожидали в производстве. Однако эти изображения Amazon Machine являются полными экспорта виртуальных приборов, что означает, что они действительно большие и займут много времени, чтобы построить и двигаться вокруг.
Мне нравится думать, что Докер занимает сладкое место на этом спектре, где вы больше всего изоляции виртуальных машин при доли вычислительной стоимости.
Виртуальные машины vs docker
Чтобы изложить на то, что я подразумеваю под том, как Docker позволяет получить большинство преимуществ VMS, давайте посмотрим на то, как они работают.
Это диаграмма того, как настроена традиционная настройка VM для выполнения программных приложений. Гипервизор — это слой вашего стека, который делает фактическую виртуализацию, в которой он принимает вычислительные ресурсы из хост-операционной системы и используют их для создания поддельных виртуальных оборудований, которые затем потребляются гостевыми операционными системами. Как только у вас установлен гостевой OSS, вы можете на самом деле можно установить свои программные приложения, двоичные файлы и библиотеки.
VMS отлично подходит для обеспечения полной изоляции хост-ОС, где, если что-то пойдет не так в приложении или вашей гостевой ОС, он не повлияет на хост ОС или прививет другого гостя. Тем не менее, все это приходит на большую стоимость, потому что в конечном итоге сервер, который работает в стеке, должен заплатить огромное количество вычислительных ресурсов в виртуальное приложение.
С докером у вас будет более тонкий стек:
Вид из правила в мире Docker — это иметь один контейнер Docker, работающий на вашем сервере для каждого процесса в вашем стеке. Это не сложное правило, но это хороший для людей, которые только начинают.
Мой собственный фон в основном работает с Python, поэтому диаграмма выше была стеком, которую я развернул на сервере. Первый красный ящик будет контейнером в NGINX для балансировщика обратного прокси и нагрузки, зеленые коробки будут сервером веб-приложений, такими как Green Unicorn, а затем Blue Box, будет какая-то база данных, такая как Postgres или MySQL Server. Двигатель Docker предоставляет виртуальную среду для всех этих без необходимости использовать вычислительные ресурсы для дублирования виртуального оборудования в гостем ОСС.
Основной словарный запас докера
Мой общий совет состоит в том, что изображения, контейнеры и документы докера — это вид жестких концепций, чтобы понять, пока вы действительно не будете копаться, и попробуйте использовать Docker. Если вы пройдете через Официальный урок Докера На веб-сайте Docker вы получите его вкус, и там также есть много ресурсов, чтобы получить свои руки на него. Для меня, когда я сначала использовал Docker, мне действительно было трудно понять, каково было то, что я должен думать о контейнерах, пока я действительно не попытался сделать это сам с некоторым собственным программным обеспечением.
Тем не менее, вот быстрый обзор какой-то базового словаря Докера.
Контейнеры
В World Docker контейнеры — это то, в какие ваши приложения работают, будь то на вашей местной машине разработки или на сервере в облаке. Другими словами, Контейнер — это то, как вы запускаете свое программное обеспечение в Docker Отказ Вы можете узнать больше о контейнерах на Докерный сайт Отказ
Основной способ начать контейнер был бы через команду Docer Run [Параметры] Image [Command] [Аргумент]
Отказ Пример будет:
$ docker run busybox /bin/echo "hello world" hello world
В приведенном выше примере я использую образец образ Bitebox
и я кормлю это командой Echo "Hello World"
Отказ Когда Docker принимает эту команду, она начнет новый контейнер на основе этого изображения, подайте его команду, а затем выполняет работу, необходимую для выполнения этой команды. В этом случае он просто возвращает Hello World в нашу командную строку.
EXTRE: Если я запускаю контейнер для базы данных, как содержимое базы данных будет сохранено через перезагрузку?
Бежать докеренных баз данных — это то, о чем люди должны были много думать. Одна из лучших практик, которые люди, кажется, урегулируют, использует то, что люди называют «контейнер для базы данных». Итак, когда я запускаю базу данных Postgres для моих веб-сайтов, у меня обычно есть один контейнер Docker, который фактически запущен в базе данных Postgres, и у меня будет другой контейнер, который просто хранит данные — на самом деле не делает ни одной из базы данных Операции. Таким образом, вы вроде имеют отдельный контейнер докера, который имеет данные, которые вы можете несколько управлять и продвигаться легче, а фактический код и конфигурация запуска вашей базы данных находится в другом контейнере. Обычно контейнеры встроены с одинакового изображения, но контейнер данных кажется, что дает людям самую гибкость прямо сейчас. Однако, безусловно, если вы делаете много-хозяин и мастер-рабский вид вещей, я думаю, что мы все еще пытаемся ждать, пока некоторые лучшие практики встряхивают для контейнеров и баз данных там.
Изображений
Изображения просто сохраняются состояния контейнеров.
Этот вывод здесь находится из команды Docker History, и она показывает вам каждую команду, которая использовалась для создания каждого слоя в документе Docker. Вы можете увидеть первый был APT-Get Clean
Команда, а потом было немного Клад
команды, и мы делали каталоги и т. Д. Изображения так, как вы сохраняете состояние контейнера, чтобы вы могли занять его место.
Dockerfiles (Builder)
Еще одна концепция Docker — это идея докерфайлов, или вы, возможно, иногда слышите, как она называется докером построителем. DockerFiles — это просто серия команд, чтобы быстро построить изображение, и они вроде ваша замена для того, что будет скриптом управления конфигурацией для запуска различных команд, чтобы настроить все серверы и процессы, которые вам нужны.
Вы начнете с базового изображения, и он будет почти так же легко и просто, как написание сценария оболочки. Если вы пройдете через Официальный урок Докера , вы получите намного больше практического опыта работы со всеми этими концепциями, поэтому не волнуйтесь, если это не имеет для вас общего смысла. Возможно, было бы легче понять, если мы сравним докер с GIT или любым видом программного обеспечения для управления версиями:
Программное обеспечение для управления версией поможет вам запустить и развернуть сохраненные состояния вашего исходного кода, а докер — это одно и то же, кроме ваших состояний инфраструктуры/сервера.
Что люди делают с докером?
Изолированные среды развития с докером
Рис Это очень популярный проект с открытым исходным кодом, который выступил в начале докера, и это приятная маленькая утилита, которая облегчает запуск нескольких контейнеров докеров. Это довольно легкий, что делает его хорошим подходящим для среды разработчика. Если вы идете в Найд сайт Вы можете увидеть много замечательных примеров.
Приведенный выше пример является файлом конфигурации FIG, который определяет веб-сервис и службу базы данных. Веб-сервис — это пользовательский код приложений, который вы работаете в вашем веб-приложении, и служба базы данных — это база данных Postgres, и вам не придется устанавливать Postgres на своем ноутбуке для него.
ИНЖИН — мой любимый инструмент и является большой причиной, по которой мне нравится использовать Docker для разработки, поскольку это действительно легко для меня начать. Если мне нужен компонент Node.js для моего стека, или postgres, mysql, nginx и т. Д., Я могу получить все это и запустить в мою местную среду, без необходимости устанавливать все это на мой Mac или Windows Machine, так что это Намного проще повторить полную стопку, которое вы работаете на производстве или в вашей среде разработки.
Платформы приложений
Докку Срок службы докера-специфического мини-эйоку без целого большого количества усилий, и он написан менее чем за 100 линий Bash. Если вы предпочитаете больше зрелых проектов для работы действительно серьезных и крупных PAAS, есть два других проекта, чтобы проверить — Flynn и ДЕИС Отказ
Я думаю, что это действительно крутое приложение докера, потому что я был в организациях до того, как там есть большая команда разработчиков и, возможно, крупные системы операционной команды, и команда DEV всегда хочет раскрутить новые серверы, чтобы они могли иметь демо Например, показывать клиенты. Управление всеми этими демонстрационными серверами всегда было проблемой для системы систем, не говоря уже о том, что серверы не будут длиться вечно. Итак, если вы находитесь в организации, которая должна много разворачивать демонстрационные серверы, возможно, использование одного из этих проектов с открытым исходным кодом для создания внутренних PAAS, будет хорошим решением.
Непрерывная интеграция
Непрерывная интеграция (CI) — еще одна большая площадь для докера. Традиционно, CI Services использовал VMS для создания изоляции, который вам необходимо полностью проверить программное обеспечение. Контейнеры Docker позволяют вам сделать это, не тратя слишком много ресурсов, что означает, что ваш CI и ваш конвейер сборки могут двигаться быстрее.
Drone.io является сервисом CI Docker-Smize, но все игроки Big Ci в любом случае имеют интеграцию Docker, в том числе Дженкинс Так что это будет легко найти и включить докер в свой процесс.
Образовательная песочница
Когда я изучал докер, я построил сайт под названием DBConservatory, поскольку я бы иногда был запущен внутренние курсы в моей компании о помощи людям изучать основы SQL и баз данных, которые были бы разработчики, которые использовали объект-реляционные материалы для большинства их карьеры, Шанс выкопать немного глубже и посмотреть, как дела работают за кулисами. Я хотел, чтобы сервис, который позволил мне поддержать базу данных для кого-то, чтобы быстро учиться и использовать базу данных столько, сколько хочу, а также для базы данных, чтобы исчезнуть в конце, поэтому мне не нужно беспокоиться об этом.
Был еще один проект Docker Open Source Docker действительно рано, что сосредоточился на помощи людям легко изучать среды приложений и языковой среды программирования. Таким образом, если вы пытались выучить Python, Node или Ruby и не хотели проходить через хлопот настроиться на вашу местную среду разработки, наверное, есть докер проекта, который поможет вам сделать это. Мы увидим больше похожих проектов, так как Docker продолжает проникать в отрасль.
Какие разработчики используют Docker для
Я также разработчик, поэтому я своего рода дал подсказки раньше, но одна из причин, по которым я действительно люблю Docker, так это так легко создавать окружающую среду на вашей местной машине, которая действительно близко отражает то, что работает на производстве. Вы получаете наибольшее пользу из использования Docker для местного развития, если ваш производственный сервер также использует те же контейнеры, в которых вы выполняете свое развертывание.
Даже если вы используете что-то вроде сервера Django Server или Flask Dev Server, легко добраться и запущено, поскольку вам не нужно беспокоиться о том, подключен ли ваш кеш, или если ваш NGINX или обратный прокси ISN бегать. Еще лучше, когда вы используете фиг, поскольку вы можете получить все эти компоненты, работающие на вашей локальной машине разработки.
В целом, для меня ключевое преимущество использования Docker в качестве разработчика заключается в том, что вы сортируете более верную среду в вашей ситуации в разработке по сравнению с продукцией вашей организации. Для получения дополнительной информации о преимуществах Docker вы можете обратиться к посту: почему 2015 год — отличный год, чтобы узнать докер.
Оригинал: «https://www.codementor.io/@atbaker/an-introduction-to-docker-by-instructor-of-o-reilly-s-docker-tutorial-9x01rz9g7»