Введение в Докер
Введение
Куда бы вы ни пошли в эти дни, вы слышите о контейнерах, и Docker, и Kubernetes, и микросервисах, и так далее и тому подобное. В этой статье я попытаюсь сделать небольшое введение в Docker, компанию, которая представила несколько контейнерных сервисов, а также сервисы, которые сопровождают контейнеры. Я планирую написать несколько таких статей, и в основном я возьму вас с собой в путешествие, чтобы узнать о контейнерах. Там есть отличные ресурсы. Я знаю, что у vBrownBag есть несколько доступных видео, а также PluralSight со многими курсами Найджела Поултона.
Итак, приступим!
Зачем нужны контейнеры?
Давайте вернемся к началу 2000-х, когда мы использовали серверы без ПО и обычно загружали только одно приложение на сервер. Тогда это было правильно, потому что вы хотели создать некоторую изоляцию между вашими приложениями, но это было проблематично, потому что это было очень дорого. В итоге мы использовали лишь немного ресурсов сервера, не говоря уже обо всей мощности, охлаждении и обслуживании, за которые мы также платили.
Затем пришла виртуализация. Мы смогли разместить несколько виртуальных серверов на одном физическом сервере, используя все аппаратные ресурсы и снизив затраты. Также, вероятно, обеспечивая лучшую избыточность для наших приложений. Конечно, виртуальным машинам по-прежнему требуется отдельная операционная система для каждой виртуальной машины. Таким образом, у вас будут виртуальные машины Windows, виртуальные машины Red Hat Linux и т. д. Каждая виртуальная машина требует лицензирования и обслуживания только для установленной операционной системы, а также места на диске, которое она может занять еще до того, как мы установим приложение. Здесь мы говорим об одном из главных преимуществ контейнеров.
Что в контейнере?
В одной операционной системе можно создать несколько контейнеров. Таким образом, вместо модели, в которой у нас есть физическая машина с несколькими виртуальными машинами, каждая из которых имеет ОС и приложение, у нас есть физическая машина с одной операционной системой, а затем несколько контейнеров, в которых хранятся приложения. Опять же, это экономит ресурсы, используемые ОС, а также затраты на лицензирование и административные расходы. Контейнеры также могут запускаться быстрее, потому что нет ОС, связанной конкретно с этим контейнером, и есть только одно место, где вы должны исправить ОС. Вам больше не нужно заходить на каждую виртуальную машину, чтобы пропатчить ОС.
Как установить контейнер?
Будет операционная система, над которой вы работаете, и, скорее всего, на данный момент это будет Linux, хотя Windows, безусловно, активизирует здесь свою игру. В этой операционной системе вы развернете то, что называется образом Docker. Конечно, мы говорим здесь только о Docker, а не о каком-либо другом контейнерном движке. Образ Docker будет иметь контейнер, а также приложение, которое вы хотите развернуть. Например, если вы хотите развернуть MySql, вы должны зайти в Docker Hub, который уже содержит множество репозиториев для образов Docker. Вы найдете образ MySql, подходящий для того, что вы хотите сделать, загрузите его и используйте в качестве шаблона для развертывания нового контейнера в вашей ОС Linux. Если бы образ еще не существовал, вы могли бы создать его и сохранить в Docker Hub или на своем локальном компьютере, а также развернуть его таким же образом. Я должен отметить, что я имел в виду физические машины и локальные машины, но вы также можете развернуть контейнеры в общедоступном облаке, например, в AWS или Azure.
Что такое Докер?
Как я уже говорил выше, Docker — одна из контейнерных компаний. Однако и это не совсем точно. Технически Docker Project — это проект с открытым исходным кодом, поэтому каждый может внести в него свой вклад. Тем не менее, компания Docker имеет большое влияние на проект Docker. Docker также сделал несколько приобретений, чтобы предлагать услуги и поддержку для решений на основе контейнеров. Это почти немного похоже на модель Red Hat Linux. Очевидно, Red Hat придумала, как заставить эту модель работать на них. Хотя, на мой взгляд, будет интересно посмотреть, как Docker начнет реально зарабатывать на контейнерах, поскольку главное, что люди используют в этом случае, — это все с открытым исходным кодом.
Почему мы должны использовать контейнеры?
Контейнеры, вероятно, не полностью устранят потребность в виртуальных машинах, а в некоторых случаях даже в физических машинах… по крайней мере, не в ближайшее время. Однако они могут обрабатывать как данные без сохранения состояния, так и данные с отслеживанием состояния. Это означает, что они отлично подходят для таких вещей, как постоянные приложения, очень похожие на то, что мы сейчас используем виртуальные и физические машины. Однако в чем они еще лучше, так это в том, что они раскручиваются в то время, когда нам просто нужно больше ресурсов, а затем снова очень легко раскручиваются. Опять же, они очень быстрые и эффективные, потому что нам не нужно беспокоиться о загрузке операционной системы и приложения каждый раз, когда мы запускаем контейнер. Это также может означать, что мы не всегда храним много постоянных данных в контейнере. Однако я также должен отметить, что остановка контейнера (подумайте об этом как об остановке службы) фактически не удаляет дату. На самом деле вы даже можете уничтожить контейнер, и пока вы его правильно настроите, эта дата сохранится. Таким образом, не имеет значения, когда мы раскручиваем его вверх или вниз, постоянные данные где-то хранятся.
Какие приложения?
Это подводит нас к обсуждению того, какие приложения мы можем запускать в контейнерах. Что ж, мы можем запустить практически любое приложение, включая устаревшие приложения, предназначенные для физических и виртуальных машин (скорее всего, это означает постоянные данные). Но это не то, где мы видим всю мощь контейнеров. Они лучше подходят для современных приложений, разработанных с учетом контейнеров. Таким образом, внутри приложения, скорее всего, будут уровни, и не только уровни базы данных/приложения/веб-сайта, но и еще меньше. Скорее всего, приложение может состоять из контейнеров, которые должны быть более постоянными, и других контейнеров, которые должны быть апатридами. Это не только сделает его более масштабируемым, но и упростит развертывание одного законченного приложения в нескольких местах. Таким образом, некоторые контейнеры могут работать в общедоступном облаке, а некоторые — локально, но все они используются вместе для обеспечения работы одного приложения. Все это время все это остается за кадром для фактического конечного пользователя. Вы можете слышать термин «облачные приложения», используемый для описания этих современных приложений, и хотя это, вероятно, довольно точное модное слово, это не все, с чем могут справиться контейнеры Docker или контейнеры в целом.
Вывод
Таким образом, контейнеры — это, по сути, более эффективный способ доставки приложений нашим конечным пользователям. Они быстрые, они легкие, и у них действительно не так уж плохая кривая обучения. Оставайтесь с нами, чтобы не пропустить новые статьи от меня о контейнерах. Если у вас есть какие-либо комментарии или вопросы, не стесняйтесь обращаться ко мне @malhoit в Твиттере.