Получите представление о Docker-контейнере.
В сегодняшнем технологическом пространстве «это работает в моей системе» — очень распространенная фраза, используемая разработчиками. Но во многих случаях приложение, работающее в системе разработчика, не запускается ни на машине тестировщика, ни на производственной машине, что приводит к хаосу.
Docker был представлен для решения таких проблем. 💯
Почему Докер?
Позвольте мне рассказать вам о моем личном опыте того, почему Docker так важен.
Со своей командой я работал над полнофункциональным проектом, где мне нужно было создать приложение, которое использовало Angular во внешнем интерфейсе, Node.js во внутреннем интерфейсе и MySQL в качестве базы данных. При работе над этим приложением с использованием нескольких технологий мы столкнулись с несколькими проблемами.
- Первой проблемой была совместимость операционной системы. Поскольку я использовал несколько технологий, мне нужно было убедиться, что все технологии совместимы с используемой мной ОС. Были случаи, когда версия angular не работала с версией ОС, которую я использовал, поэтому мне приходилось менять версию ОС несколько раз.
- Поскольку архитектура приложения, которое я создавал, со временем менялась, я попадал в ситуации, когда приходилось обновлять версии и зависимости программного обеспечения и библиотек. Прежде чем прийти к стабильной версии всех технологий, которые я использовал для своего приложения, я столкнулся с множеством проблем совместимости. Обновление даже одного инструмента, используемого в моем приложении, было рискованным делом.
- Позже над моим приложением работали другие разработчики. Поскольку стек технологий был тяжелым, им приходилось часами выполнять несколько команд, чтобы настроить среду, совместимую с приложением. Мне пришлось проверить и оценить среду каждого разработчика, чтобы убедиться, что она не отличается от версии технологии, которую я использовал.
- Наконец, если кому-то из разработчиков не нравилась операционная система, которую я использовал для создания своего приложения, ему/ей было сложно работать над приложением.
Все это затрудняло своевременную разработку, создание и выпуск приложения. Именно здесь на сцену вышел Docker. Это решает все проблемы, которые я только что упомянул.
Что такое Докер?
Docker — это платформа контейнеризации, которая упаковывает приложение и его зависимости внутри контейнера, чтобы приложение беспрепятственно работало в любой среде, будь то среда разработки, промежуточного хранения или производства.
Это инструмент, предназначенный для упрощения создания, развертывания и запуска приложений с использованием контейнеров. Контейнеры Docker — это облегченная альтернатива виртуальным машинам, использующая операционную систему хоста. Вам не нужно предварительно выделять оперативную память в контейнерах, как это делается в виртуальных машинах.
Это платформа с открытым исходным кодом, позволяющая разработчикам, системным администраторам и предприятиям создавать, доставлять и запускать распределенные приложения «на лету».
Чтобы узнать больше о том, как работает Docker внутри, ознакомьтесь с архитектурой Docker.
Docker-образы, контейнеры, Dockerfile
Докер-образ
Образ Docker — это шаблон, необходимый для запуска приложения. Он состоит из кода приложения, библиотек, инструментов, зависимостей и т. д.
Образы Docker — это неизменяемые файлы, доступные только для чтения, которые иногда также называют снимками. Вы не запускаете и не запускаете образ докера; через него вы строите контейнер. Когда контейнер создается из образа Docker, он создает слой контейнера поверх слоя изображения.
Должен существовать базовый образ Docker, который используется для создания нескольких других образов Docker с некоторыми изменениями в базовом образе.
Docker Hub — это хранилище образов Docker практически для всех технологических стеков. Вы можете получить образ Docker из DockerHub и начать создавать контейнеры.
Докер-контейнеры
Контейнеры Docker — это исполняемый пакет программного обеспечения, который включает в себя все зависимости, необходимые для выполнения приложения. Благодаря контейнерам Docker приложения могут эффективно работать в различных компьютерных средах.
Ниже приведены функции Docker-контейнеров:
- Легкий
- Минимальные накладные расходы (ЦП/IO/Сеть)
- Более быстрое развертывание
- Легко масштабируемый
- Уменьшение потребления хранилища
- Портативный, запускайте его везде.
- Минимальная базовая ОС
- Изоляция приложений
Докерфайл
Dockerfile — это сценарий оболочки, определяющий все задачи, которые необходимо выполнить. Из файла Docker вы создаете образ Docker; из образа докера вы создаете контейнер докера.
Установка Докера
Docker можно легко установить на различные платформы Linux, Windows или macOS. Прочтите этот пост о том, как установить Docker в Ubuntu, CentOS, Debian и Windows.
Кроме того, Docker Desktop доступен для компьютеров под управлением Windows и Mac. Это исполняемое приложение, которое очень легко установить и помогает создавать и контейнеризировать приложения в средах Windows и Mac.
Редакции Docker и цены
Существует две редакции Docker:
- Общественная версия (CE)
- Корпоративная версия (EE)
Версия сообщества Docker имеет открытый исходный код и бесплатна для использования. Docker CE нацелен на подход «сделай сам», при котором инженеры DevOps могут самостоятельно контейнеризировать свои приложения.
Корпоративная версия Docker поставляется с тремя версиями — базовой , стандартной и расширенной . Базовая версия поставляется с платформой Docker, поддержкой и сертификацией, тогда как стандартная и расширенная версии включают функции управления контейнерами и проверки безопасности Docker, добавленные к функциям базовой версии.
В основном технари используют Docker бесплатно. Но если вам нужны расширенные функции, вы можете использовать платную версию Docker. Цена зависит от таких функций, как управление репозиторием, функции CI/CD, управление пользователями, инструменты разработчика и варианты поддержки.
Ниже приведены подробности плана Docker:
Теперь, когда вы знаете основы Docker, позвольте мне показать вам очень простой пример Docker.
Контейнер Docker Hello World
Я собираюсь получить образ докера hello-world из DockerHub и создать из него Docker-контейнер, в котором будет запускаться приложение. Это изображение содержит простое приложение для печати приветственного сообщения из Docker.
Во-первых, мне нужно загрузить образ докера hello-world на мою машину с Ubuntu.
Примечание. Предполагается, что Docker уже установлен. Если еще нет, ознакомьтесь с руководством по установке.
geekflare@geekflare:~$ docker pull hello-world Использование тега по умолчанию: последний последний: Извлечение из библиотеки/hello-world 0e03bdcc26d7: Получение завершено Дайджест: sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202 Статус: Загружено новое изображение для hello-world:latest
Проверьте, получен ли образ докера.
geekflare@geekflare:~$ docker images ТЕГ РЕПОЗИТОРИЯ ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ СОЗДАННЫЙ РАЗМЕР hello-world последняя версия bf756fb1ae65 7 месяцев назад 13,3 КБ kubernetesui/dashboard v2.0.0-beta8 eb51a3597525 8 месяцев назад 90,8 МБ geekflare_mongodb последняя версия 095d17727ca0 12 месяцев назад 325 МБ
Запустите команду ниже, чтобы создать контейнер и запустить приложение.
geekflare@geekflare:~$ docker run hello-world Привет от Docker! Это сообщение показывает, что ваша установка работает правильно. Чтобы сгенерировать это сообщение, Docker предпринял следующие шаги: 1. Клиент Docker связался с демоном Docker. 2. Демон Docker извлек образ «hello-world» из Docker Hub. (amd64) 3. Демон Docker создал из этого образа новый контейнер, который запускает исполняемый файл, создающий выходные данные, которые вы сейчас читаете. 4. Демон Docker передал этот вывод клиенту Docker, который отправил его на ваш терминал. Чтобы попробовать что-то более амбициозное, вы можете запустить контейнер Ubuntu с помощью: $ docker run -it ubuntu bash Делитесь изображениями, автоматизируйте рабочие процессы и многое другое с помощью бесплатного идентификатора Docker: https://hub.docker.com/ Дополнительные примеры и идеи , посетите: https://docs.docker.com/get-started/
Теперь перечислите все докер-контейнеры. Вы можете видеть, что контейнер hello-world был запущен 1 минуту назад.
geekflare@geekflare:~$ dockerContainer ls -a ИДЕНТИФИКАТОР КОНТЕЙНЕРА ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАНО СТАТУС ИМЕНА ПОРТОВ 1a1056caffc4 hello-world «/hello» 1 минута назад Выход (0) 1 минута назад zealous_bose b0095c1e5536 geekflare_mongodb «/bin/sh -c usr/bin /…» 12 месяцев назад Вышел (0) 12 месяцев назад mongo_container
Начните изучать Docker; попробуйте эти фундаментальные команды докера.
Запуск Nginx внутри Docker-контейнера
Здесь я покажу вам, как развернуть Nginx внутри контейнера.
Команда ниже ищет образ Nginx локально. Поскольку локального образа нет, он извлекает образ докера Nginx из концентратора докеров. Затем он создает контейнер с именем nginx_geekflare, используя образ докера Nginx, и запускает Nginx на порту 80.
geekflare@geekflare:~$ docker run —name nginx_geekflare -p 80:80 -d nginx Невозможно найти последнее изображение ‘nginx:latest’ локально: Извлечение из библиотеки/nginx bf5952930446: Извлечение завершено ba755a256dfe: Извлечение завершено c57dd87d0b93: Извлечение завершено d7fbf29df889 : Загрузка завершена 1f1070938ccd: Загрузка завершена Дайджест: sha256:36b74457bccb56fbf8b05f79c85569501b721d4db813b684391d63e02287c0b2 Статус: Загружен новый образ для nginx: последний fdad18387b27b48b8f2e 14f8641791cc4d5edf667cc664198b67579cd76a5162
Когда вы перечислите образы Docker, доступные в вашей системе, вы увидите, что образ Nginx Docker был получен.
geekflare@geekflare:~$ docker images ТЕГ РЕПОЗИТОРИЯ ИДЕНТИФИКАТОР ИЗОБРАЖЕНИЯ СОЗДАННЫЙ РАЗМЕР nginx последнее 08393e824c32 4 дня назад 132 МБ hello-world последнее bf756fb1ae65 7 месяцев назад 13,3 КБ kubernetesui/dashboard v2.0.0-beta8 eb51a3597525 8 месяцев назад 90 .8MB geekflare_mongodb последняя версия 095d17727ca0 12 месяцев назад 325 МБ
Запустите команду ниже, чтобы получить список всех работающих контейнеров. Вы можете видеть, что контейнер nginx_geekflare работает по адресу 0.0.0.0:80.
geekflare@geekflare:~$ docker ps -a ИДЕНТИФИКАТОР КОНТЕЙНЕРА ИЗОБРАЖЕНИЕ КОМАНДА СОЗДАЛА СТАТУС ИМЕНА ПОРТОВ fdad18387b27 nginx «/docker-entrypoint.…» 58 секунд назад Up 32 секунды 0.0.0.0:80->80/tcp nginx_geekflare 1a1056caffc4 hello-world » /hello» Около часа назад Вышел (0) Около часа назад zealous_bose b0095c1e5536 geekflare_mongodb «/bin/sh -c usr/bin/…» 12 месяцев назад Вышел (0) 12 месяцев назад mongo_container
Зайдите в браузер и откройте 0.0.0.0:80, вы увидите, что nginx запущен и работает внутри контейнера.
Распространенные случаи использования Docker
Упрощение конфигурации : Docker может работать на любой платформе с помощью своей конфигурации без фактических затрат на виртуальную машину.
Это позволяет вам поместить файл конфигурации в код и передать переменные среды для удовлетворения различных сред. Чтобы один образ докера можно было использовать в другой среде.
Управление кодом . На пути от разработки к производству код проходит через разные среды.
Каждая среда имеет небольшие различия по сравнению с другой. Docker устраняет эту разницу, предоставляя единообразную среду, делая разработку и кодирование намного более удобными.
Образы Docker являются неизменяемыми, и их преимуществом является отсутствие изменений в среде приложения от разработки до производства.
Повышение производительности разработки . Две основные цели экосистемы разработки — максимально приблизить среду разработки к производственной среде, а следующая цель — как можно скорее доставить качественный код.
Docker позволяет запускать код в контейнере, который отражает производственную среду, и, в отличие от виртуальной машины, Docker имеет меньший объем накладной памяти, что помогает запускать несколько сервисов.
Другая цель достигается, поскольку мы используем общий том Docker, чтобы код приложения был доступен контейнеру с хоста. Это позволяет разработчику редактировать исходный код со своей платформы и редактора, что будет отражаться на рабочей среде внутри Docker.
Изоляция приложений . В некоторых случаях может потребоваться изоляция приложений, например, серверы API, которым требуется другой Apache и другой набор зависимостей.
Запуск серверов API в разных контейнерах — гораздо лучший выход.
Возможности отладки : Docker предоставляет множество инструментов, которые хорошо работают с контейнерами, с возможностью вставлять контрольные точки внутри контейнеров, а также в различные контейнеры, что весьма важно при тестировании приложений.
Быстрое развертывание . Контейнеры Docker можно создавать быстро, что достигается за счет того, что контейнеры не загружают ОС, а просто запускают приложение.
После установки они дают вам уверенность в том, что, как только код заработает, он будет работать во всех средах.
Заключение
Docker с его огромными преимуществами становится ценным дополнением к ИТ-инфраструктуре. Я надеюсь, что вышеизложенное даст вам представление об этом.