Фактически, вторая по популярности платформа среди разработчиков согласно опросу Stack Overflow.

Вы когда-нибудь задумывались, почему мы перешли к приложениям на основе контейнеров в эпоху, когда у нас есть приложения для виртуальных машин? Как docker упрощает задачу разработки? Некоторые из ведущих технологических компаний, такие как Google, Amazon Web Services (AWS), Intel, Tesla и Juniper Networks, имеют свои собственные версии контейнерных движков. Они в значительной степени полагаются на них при создании, запуске и управлении , и распространять свои приложения. Прежде чем пытаться судить о полезности, вы должны сначала познакомиться с наиболее важными элементами и инструментами экосистемы Docker. Давайте посмотрим, что такое Docker, и узнаем его концепции.

Что за докер?

Docker - это облегченная альтернатива виртуальной машине (ВМ), которая призвана упростить создание, развертывание и запуск приложений с использованием контейнеров. Википедия определяет Docker как

«проект с открытым исходным кодом, который автоматизирует развертывание программных приложений внутри контейнеров, обеспечивая дополнительный уровень абстракции и автоматизации виртуализации на уровне ОС в Linux».

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

Но почему Докер?

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

Docker обеспечивает согласованную среду на протяжении всего жизненного цикла разработки программного обеспечения (SDLC), тем самым обеспечивая лучшую производительность на протяжении всего жизненного цикла.

Контейнеризация против виртуализации

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

Таким образом была введена контейнеризация. Здесь не требуется гостевая ОС, вместо этого приложение будет использовать ОС хоста. Следовательно, каждый контейнер будет совместно использовать ОС хоста, и в каждом будет свое собственное приложение и библиотеки. ОЗУ и дисковое пространство будут использоваться контейнерами в соответствии с их требованиями, что значительно повысит производительность системы.

Наглядный обзор сети Docker

Dockerfile

Dockerfile - это текстовый файл (без расширения .txt), который используется для создания образа докера, содержащего весь код проекта. Это файл, который включает команды и аргументы для настройки образа докера. Docker может автоматически создавать образы, читая инструкции из Dockerfile.

Команды, используемые в Dockerfile

  • FROM → определяет базовый образ, который будет использоваться для запуска процесса сборки.
  • MAINTAINER → имя и адрес электронной почты разработчика этого изображения.
  • COPY копирует файл или каталог в изображение.
  • ДОБАВИТЬ то же, что и КОПИРОВАТЬ, которое содержит два аргумента: источник и путь назначения.
  • RUN принимает команду в качестве аргумента и запускает ее для формирования образа, например apt-get install.
  • CMD команда по умолчанию, запускаемая при запуске контейнера. Может быть переопределено параметрами командной строки.
  • ENV → устанавливает переменную среды в контейнере.
  • EXPOSE открывает порты из контейнера. Должен быть явно предоставлен Хосту командой run с -p или -P.
  • VOLUME указывает каталог, который используется для хранения содержимого файлов, связанных с контейнером.
  • ENTRYPOINT используется для переопределения команды cmd. Когда контейнер запущен, эта команда выполняется первой для созданного образа.
  • USER → устанавливает пользователя для RUN, CMD и ENTRYPOINT.
  • WORKDIR устанавливает рабочий каталог для RUN, CMD, ENTRYPOINT, ADD и COPY.

Образ Docker

Образ - это план, с которого можно запустить произвольное количество совершенно новых контейнеров. Он читает только шаблоны (Dockerfile), используемые для создания контейнеров. Он содержит все зависимости и требования для конкретного приложения.

Контейнер Docker

Представьте, что вы хотите запустить команду, изолированную от всего остального в системе. Он должен обращаться только к тем ресурсам, к которым ему разрешено (хранилище, ЦП, память), и не знает, что на машине есть что-то еще. Процесс, запущенный внутри контейнера, думает, что он единственный, и видит только базовый дистрибутив Linux, описанный на изображении.

Звучит очень похоже на виртуальные машины, не так ли? Ага. Только контейнеры запускаются быстрее и требуют меньше ресурсов. Это экземпляр образа Docker во время выполнения. Он содержит все необходимое для запуска приложений. Один или несколько образов можно использовать для создания контейнера. Машина, на которой запущен контейнер, не должна слишком заботиться о том, что находится внутри, а докеризованному приложению все равно, находится ли оно в кластере Kubernetes или на одном сервере, оно все равно сможет работать. Контейнер может запускать более одного процесса одновременно. Но я бы предпочел ограничиться одним, и я не видел, чтобы что-то делало это. Вы можете упаковать множество сервисов в один контейнер (скажем, Nginx), и все они будут работать бок о бок.

Докер-тома

Изображения никогда не меняются, просто вы создаете новые, но это все. С другой стороны, контейнеры по умолчанию ничего не оставляют. Любые изменения, внесенные в контейнер, если вы не сохраняете его как изображение, теряются, как только он будет удален. Следовательно, контейнеры недолговечны.

Но разве сохранение данных бесполезно? Ага. Вот тут и пригодятся тома докеров. При запуске контейнера Docker вы можете указать, что определенные каталоги являются точками монтирования либо для локальных каталогов (на хост-машине), либо для томов. Данные, записанные в каталоги, подключенные к хосту, легко понять (вы знаете, где они находятся), тома предназначены для хранения постоянных или общих данных, но вам не нужно ничего знать о хосте при их использовании. Вы можете создать том, Docker позаботится о том, чтобы он был там и сохранен где-нибудь в хост-системе.

Докер Хаб

Docker Hub - это сервис, предоставляемый Docker для поиска образов контейнеров и обмена ими с вашей командой. Он также известен как реестр контейнеров.

Он предоставляет следующие основные функции:

  • Хранилища: извлекайте и извлекайте изображения контейнеров.
  • Команды и организации: управляйте доступом к частным репозиториям образов контейнеров.
  • Официальные образы. Получите и используйте высококачественные образы контейнеров, предоставленные Docker.
  • Изображения издателя: извлекайте и используйте высококачественные образы контейнеров, предоставленные внешними поставщиками. Сертифицированные образы также включают поддержку и гарантируют совместимость с Docker Enterprise.
  • Сборки: автоматически создавайте образы контейнеров из GitHub и Bitbucket и отправляйте их в Docker Hub.
  • Веб-перехватчики: инициируют действия после успешной отправки в репозиторий для интеграции Docker Hub с другими службами.

Еще не очарованы? Давайте установим Docker

Чтобы установить Docker, вы можете перейти на их официальный сайт.



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



Команды для работы с Docker

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

Команды для взаимодействия с изображениями:

  • изображения докеров: показать все изображения.
  • импорт докеров: создает образ из архива.
  • сборка докера: создает образ из файла Docker.
  • фиксация докера: создает изображение из контейнера.
  • docker rmi: удаляет изображение.
  • История докеров: список изменений изображения.

Команды для взаимодействия с контейнерами:

  • docker -v: показывает текущую установленную версию докера
  • docker –help: перечисляет команды, доступные в докере.
  • docker pull: загружает изображение в репозиторий Docker Hub.
  • docker run -it -d: создает контейнер из изображения
  • docker ps: перечисляет запущенные контейнеры
  • docker ps -a: показывает все запущенные и завершенные контейнеры
  • docker exec -it bash: обращается к работающему контейнеру (полезно для проверки журналов)
  • docker stop: останавливает работающий контейнер
  • docker kill: уничтожает контейнер, немедленно останавливая его выполнение
  • вход в Docker: вход в репозиторий Docker Hub.
  • docker push: отправляет изображение в репозиторий Docker Hub.
  • изображения докеров: перечисляет все изображения в локальном репозитории.
  • сборка докера: создает образ из указанного файла докера.
  • экспорт докеров: экспортирует файловую систему контейнера как tar-архив.
  • импорт докеров: импортирует содержимое из архива для создания образа файловой системы
  • контейнер докеров: выполняет различные операции с контейнерами.
  • журналы контейнера докеров: журналы с указанным контейнером
  • контейнер докеров kill: уничтожает контейнер
  • docker container rm: удаляет остановленный контейнер
  • контейнер докеров начало: запускает контейнер.

Подождите, есть минусы?

Приложения с разными требованиями к операционной системе не могут размещаться вместе на одном хосте Docker. Например, предположим, что у нас есть 4 разных приложения, из которых 3 приложения требуют операционной системы на основе Linux, а другое приложение требует операционной системы на основе Windows. В таком сценарии 3 приложения, для которых требуется операционная система на базе Linux, могут быть размещены на одном хосте Docker, тогда как приложение, для которого требуется операционная система на базе Windows, должно быть размещено на другом хосте Docker.

Вот и все!

Надеюсь, вы получили некоторое представление о Docker и его полезности. Поскольку Docker сейчас используется повсюду, это может немного утомлять. Согласно опросу Stack Overflow 2020 года, Docker - вторая самая любимая платформа разработчиками. Надеюсь, вы понимаете, почему Docker так важен и почему каждый разработчик должен это усвоить. Конечно, эта статья не сделает вас докер-джедаем, вы можете узнать больше в их официальной документации.



Если вам понравилось это читать, возможно, вы найдете следующие статьи, достойные вашего времени.