Шрифт:

Вопроса однажды, проектах до что, это живет заглавных подзаголовок снова!

20 декабря 2024

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

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

Давайте начнем с того, как Docker стал важным инструментом в арсенале разработчика.

Почему Docker стал настолько вездесущим

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

На более высоком уровне это означает, что программное обеспечение было разработано для определенной платформы (например, Linux или Windows, или AWS против Azure), и перенос его на другую платформу требовал значительных усилий на протяжении всего цикла - от разработки, до настройки и развертывания.

Команды и роли были разработаны для устранения симптомов - команды разработчиков и операционные команды, а затем в рамках операционных команд разделены на группы, специализирующиеся на конкретных технологиях, с тонким набором навыков, что усугубляет негибкость внедрения новых технологий.

На более детальном уровне наиболее заметным эффектом парадигмы разработки/развертывания была мантра "это работало на моей машине" всякий раз, когда возникала производственная проблема, которая не была выявлена в процессе разработки.

Хотя были попытки решить эту проблему, например, контейнеры Java, такие как Tomcat и Jetty, которые предлагали некоторую стандартизацию, но фокусировались на одной платформе LVM, или виртуальные машины (VM) с такими инструментами, как VirtualBox и Vagrant в качестве поддержки разработчиков, только после появления контейнеров Docker мы почувствовали, что наконец-то движемся в правильном направлении.

Контейнеры Docker - это стандартизированные, легкие и безопасные среды, определяемые в виде кода и упаковывающие все время выполнения конкретного приложения - начиная с ядра, всех зависимостей и заканчивая собственно кодом приложения. Контейнеры Docker не зависят от платформы/языка, поэтому их можно использовать для запуска приложений, написанных на любом языке программирования и работающих практически на любой аппаратной платформе. Поскольку они легковесны, приложения в контейнерах Docker можно запускать как на рабочих станциях разработчиков, так и на производственных серверах. А поскольку этот инструмент не зависит от платформы, его можно использовать для любых локальных и облачных нативных архитектур.

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

На более детальном уровне наиболее заметным эффектом парадигмы разработки/развертывания была мантра "это работало на моей машине" всякий раз, когда возникала производственная проблема, которая не была выявлена в процессе разработки.

Хотя были попытки решить эту проблему, например, контейнеры Java, такие как Tomcat и Jetty, которые предлагали некоторую стандартизацию, но фокусировались на одной платформе LVM, или виртуальные машины (VM) с такими инструментами, как VirtualBox и Vagrant в качестве поддержки разработчиков, только после появления контейнеров Docker мы почувствовали, что наконец-то движемся в правильном направлении.

Контейнеры Docker - это стандартизированные, легкие и безопасные среды, определяемые в виде кода и упаковывающие все время выполнения конкретного приложения - начиная с ядра, всех зависимостей и заканчивая собственно кодом приложения. Контейнеры Docker не зависят от платформы/языка, поэтому их можно использовать для запуска приложений, написанных на любом языке программирования и работающих практически на любой аппаратной платформе. Поскольку они легковесны, приложения в контейнерах Docker можно запускать как на рабочих станциях разработчиков, так и на производственных серверах. А поскольку этот инструмент не зависит от платформы, его можно использовать для любых локальных и облачных нативных архитектур.

© 1999-2023, Институт/ факультет/ подразделение университета