HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>5 май 2022</li>
2 <ul><li>5 май 2022</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Олег Накрайников раскрывает концепцию, устройство и принципы работы Docker и делится упражнениями, которые помогут освоить инструмент.</p>
4 </ul><p>Олег Накрайников раскрывает концепцию, устройство и принципы работы Docker и делится упражнениями, которые помогут освоить инструмент.</p>
5 <p>Фото: Bloomberg / Getty Images</p>
5 <p>Фото: Bloomberg / Getty Images</p>
6 <p>Журналист, коммерческий автор и редактор. Пишет про IT, цифровой маркетинг и бизнес. Сайт:<a>darovska.com</a>.</p>
6 <p>Журналист, коммерческий автор и редактор. Пишет про IT, цифровой маркетинг и бизнес. Сайт:<a>darovska.com</a>.</p>
7 <p>Technical Lead. Любит GYM, путешествия и компьютерные игры. Пишет технические статьи и иногда технические треды в Twitter.</p>
7 <p>Technical Lead. Любит GYM, путешествия и компьютерные игры. Пишет технические статьи и иногда технические треды в Twitter.</p>
8 <p>Контейнеризация - новая идеология в IT. В литературе приводят много аналогий, когда поставщики, то есть разработчики, упаковывают всё в один контейнер, как груз в порту. Это очень хорошая аналогия. Ведь цифровой контейнер точно так же перевозится и распаковывается в готовый продукт.</p>
8 <p>Контейнеризация - новая идеология в IT. В литературе приводят много аналогий, когда поставщики, то есть разработчики, упаковывают всё в один контейнер, как груз в порту. Это очень хорошая аналогия. Ведь цифровой контейнер точно так же перевозится и распаковывается в готовый продукт.</p>
9 <p>Основной инструмент контейнеризации - Docker, на его основе даже выстраивают внутреннюю сервисную инфраструктуру. Docker используют в сочетании с оркестраторами, такими как<a>Kubernetes</a>и <a>OpenShift</a>. Эти сервисы знаменуют переход от классических виртуалок к облачной инфраструктуре. С их помощью можно гибче, быстрее и динамичнее управлять ресурсами.</p>
9 <p>Основной инструмент контейнеризации - Docker, на его основе даже выстраивают внутреннюю сервисную инфраструктуру. Docker используют в сочетании с оркестраторами, такими как<a>Kubernetes</a>и <a>OpenShift</a>. Эти сервисы знаменуют переход от классических виртуалок к облачной инфраструктуре. С их помощью можно гибче, быстрее и динамичнее управлять ресурсами.</p>
10 <p>Docker - это платформа, которая позволяет упаковать в контейнер приложение со всем окружением и зависимостями, а затем доставить и запустить его в целевой системе.</p>
10 <p>Docker - это платформа, которая позволяет упаковать в контейнер приложение со всем окружением и зависимостями, а затем доставить и запустить его в целевой системе.</p>
11 <p>Приложение, упакованное в контейнер, изолируется от операционной системы и других приложений. Поэтому разработчики могут не задумываться, в каком окружении будет работать их приложение, а инженеры по эксплуатации - единообразно запускать приложения и меньше заботиться о системных зависимостях.</p>
11 <p>Приложение, упакованное в контейнер, изолируется от операционной системы и других приложений. Поэтому разработчики могут не задумываться, в каком окружении будет работать их приложение, а инженеры по эксплуатации - единообразно запускать приложения и меньше заботиться о системных зависимостях.</p>
12 <p>Docker разработали в 2008 году. Изначально это был внутренний проект компании dotCloud, которую впоследствии переименовали в Docker Inc. В 2013 году dotCloud открыла исходный код Docker для сообщества.</p>
12 <p>Docker разработали в 2008 году. Изначально это был внутренний проект компании dotCloud, которую впоследствии переименовали в Docker Inc. В 2013 году dotCloud открыла исходный код Docker для сообщества.</p>
13 <p>Ранние версии Docker представляли собой усовершенствованную обёртку LXC, а с 2015 года Docker уже использовал собственную библиотеку<a>libcontainer</a>, абстрагирующую виртуализационные возможности ядра Linux. Так он превратился в самостоятельную технологию. Платформа неслучайно переехала на libcontainer: гибкость и управляемость LXC-контейнеров оставляла желать лучшего.</p>
13 <p>Ранние версии Docker представляли собой усовершенствованную обёртку LXC, а с 2015 года Docker уже использовал собственную библиотеку<a>libcontainer</a>, абстрагирующую виртуализационные возможности ядра Linux. Так он превратился в самостоятельную технологию. Платформа неслучайно переехала на libcontainer: гибкость и управляемость LXC-контейнеров оставляла желать лучшего.</p>
14 <p>Популярность Docker продолжает расти, потому что его поддерживает большое сообщество. Платформа попала в мейнстрим на волне популярности<a>DevOps</a>, быстрых конвейеров доставки и автоматизации.</p>
14 <p>Популярность Docker продолжает расти, потому что его поддерживает большое сообщество. Платформа попала в мейнстрим на волне популярности<a>DevOps</a>, быстрых конвейеров доставки и автоматизации.</p>
15 <p>Виртуализация в Docker реализуется на уровне ОС. Виртуальная среда запускается прямо из ядра основной операционной системы и использует её ресурсы.</p>
15 <p>Виртуализация в Docker реализуется на уровне ОС. Виртуальная среда запускается прямо из ядра основной операционной системы и использует её ресурсы.</p>
16 <p>В поставку Docker входят следующие компоненты:</p>
16 <p>В поставку Docker входят следующие компоненты:</p>
17 <ul><li><strong>Docker host</strong> - это операционная система, на которую устанавливают Docker и на которой он работает.</li>
17 <ul><li><strong>Docker host</strong> - это операционная система, на которую устанавливают Docker и на которой он работает.</li>
18 <li><strong>Docker daemon</strong> - служба, которая управляет Docker-объектами: сетями, хранилищами, образами и контейнерами.</li>
18 <li><strong>Docker daemon</strong> - служба, которая управляет Docker-объектами: сетями, хранилищами, образами и контейнерами.</li>
19 <li><strong>Docker client</strong> - консольный клиент, при помощи которого пользователи взаимодействуют с Docker daemon и отправляют ему команды, создают контейнеры и управляют ими.</li>
19 <li><strong>Docker client</strong> - консольный клиент, при помощи которого пользователи взаимодействуют с Docker daemon и отправляют ему команды, создают контейнеры и управляют ими.</li>
20 <li><strong>Docker image</strong> - это неизменяемый образ, из которого разворачивается контейнер.</li>
20 <li><strong>Docker image</strong> - это неизменяемый образ, из которого разворачивается контейнер.</li>
21 <li><strong>Docker container</strong> - развёрнутое и запущенное приложение.</li>
21 <li><strong>Docker container</strong> - развёрнутое и запущенное приложение.</li>
22 <li><strong>Docker Registry</strong> - репозиторий, в котором хранятся образы.</li>
22 <li><strong>Docker Registry</strong> - репозиторий, в котором хранятся образы.</li>
23 <li><strong>Dockerfile</strong> - файл-инструкция для сборки образа.</li>
23 <li><strong>Dockerfile</strong> - файл-инструкция для сборки образа.</li>
24 <li><strong>Docker Compose</strong> - инструмент для управления несколькими контейнерами. Он позволяет создавать контейнеры и задавать их конфигурацию.</li>
24 <li><strong>Docker Compose</strong> - инструмент для управления несколькими контейнерами. Он позволяет создавать контейнеры и задавать их конфигурацию.</li>
25 <li><strong>Docker Desktop</strong>- GUI-клиент, который распространяется по <a>GPL</a>. Бесплатная версия работает на Windows, macOS, а с недавних пор и на Linux. Это очень удобный клиент, который отображает все сущности Docker и позволяет запустить однонодовый Kubernetes для компьютера.</li>
25 <li><strong>Docker Desktop</strong>- GUI-клиент, который распространяется по <a>GPL</a>. Бесплатная версия работает на Windows, macOS, а с недавних пор и на Linux. Это очень удобный клиент, который отображает все сущности Docker и позволяет запустить однонодовый Kubernetes для компьютера.</li>
26 </ul><em>Скриншот: Skillbox Media</em><p>Docker изначально создавался под Linux. Поэтому на Windows и macOS запускают виртуальную машину с Linux, а поверх неё - Docker. В macOS используют<a>VirtualBox</a>, а в Windows -<a>Hyper-V</a>.</p>
26 </ul><em>Скриншот: Skillbox Media</em><p>Docker изначально создавался под Linux. Поэтому на Windows и macOS запускают виртуальную машину с Linux, а поверх неё - Docker. В macOS используют<a>VirtualBox</a>, а в Windows -<a>Hyper-V</a>.</p>
27 Схемы архитектуры<a>Docker</a><em>Скриншот: Skillbox Media</em><p>Работа поверх виртуалок повышает потребление ресурсов. Поэтому Docker на macOS и Windows работает медленнее и с рядом ограничений. Для разработки это приемлемо, но "в бою" так делать никто не будет. На всех популярных платформах в проде используют Linux.</p>
27 Схемы архитектуры<a>Docker</a><em>Скриншот: Skillbox Media</em><p>Работа поверх виртуалок повышает потребление ресурсов. Поэтому Docker на macOS и Windows работает медленнее и с рядом ограничений. Для разработки это приемлемо, но "в бою" так делать никто не будет. На всех популярных платформах в проде используют Linux.</p>
28 <p>Контейнеры и виртуальные машины - это разные способы виртуализации. Только виртуалка реализует её на уровне железа, а Docker - на уровне операционной системы.</p>
28 <p>Контейнеры и виртуальные машины - это разные способы виртуализации. Только виртуалка реализует её на уровне железа, а Docker - на уровне операционной системы.</p>
29 <p>Виртуальная машина функционирует как отдельный компьютер с собственным оборудованием и операционной системой. Распространённая практика - купить большой сервер и установить на него гипервизор, базу для виртуалок. Сервер "нарезается" на много виртуальных компьютеров, что избавляет нас от необходимости покупать их отдельно.</p>
29 <p>Виртуальная машина функционирует как отдельный компьютер с собственным оборудованием и операционной системой. Распространённая практика - купить большой сервер и установить на него гипервизор, базу для виртуалок. Сервер "нарезается" на много виртуальных компьютеров, что избавляет нас от необходимости покупать их отдельно.</p>
30 <p>Виртуальные компьютеры вполне полноценны. На них можно установить операционную систему любого семейства и работать в ней, например, через графический интерфейс в многопользовательском режиме, устанавливая и запуская множество приложений и сервисов.</p>
30 <p>Виртуальные компьютеры вполне полноценны. На них можно установить операционную систему любого семейства и работать в ней, например, через графический интерфейс в многопользовательском режиме, устанавливая и запуская множество приложений и сервисов.</p>
31 <p>Если цель виртуалки - полностью воспроизвести устройство компьютера, то основная цель Docker - создать среду для одного приложения. Виртуальная среда контейнера запускается внутри операционной системы. Ей не нужно виртуализировать оборудование - она использует его через ОС. Поэтому контейнеры Docker потребляют меньше ресурсов, быстрее развёртываются, проще масштабируются и меньше весят.</p>
31 <p>Если цель виртуалки - полностью воспроизвести устройство компьютера, то основная цель Docker - создать среду для одного приложения. Виртуальная среда контейнера запускается внутри операционной системы. Ей не нужно виртуализировать оборудование - она использует его через ОС. Поэтому контейнеры Docker потребляют меньше ресурсов, быстрее развёртываются, проще масштабируются и меньше весят.</p>
32 <p>Выделять под приложение целую виртуалку, устанавливать и настраивать операционную систему, раздавать права доступа - слишком дорого. В большинстве случаев достаточно простого окружения, в котором запустится приложение. Для этого как раз подходит контейнер, который вмещает одно главное приложение.</p>
32 <p>Выделять под приложение целую виртуалку, устанавливать и настраивать операционную систему, раздавать права доступа - слишком дорого. В большинстве случаев достаточно простого окружения, в котором запустится приложение. Для этого как раз подходит контейнер, который вмещает одно главное приложение.</p>
33 <p>Оба способа изолируют приложение от основной операционной системы, но если на виртуалку можно поставить любую ОС, то Docker ориентирован на ядро Linux. Недавно добавили возможность поднимать Windows, но я ещё не пробовал это делать.</p>
33 <p>Оба способа изолируют приложение от основной операционной системы, но если на виртуалку можно поставить любую ОС, то Docker ориентирован на ядро Linux. Недавно добавили возможность поднимать Windows, но я ещё не пробовал это делать.</p>
34 <p>Docker и виртуальные машины не очень хорошо сочетаются друг с другом. Да, иногда в продакшене сервер нарезают на виртуалки и в них запускают контейнеры. Но такая схема, с двойной виртуализацией, приводит к избыточному расходу ресурсов. Её часто критикуют, и, надо признаться, по делу. Если в компании всё же сложилась такая практика, вместо гипервизора можно поставить Kubernetes, который будет устанавливать приложения напрямую на железо.</p>
34 <p>Docker и виртуальные машины не очень хорошо сочетаются друг с другом. Да, иногда в продакшене сервер нарезают на виртуалки и в них запускают контейнеры. Но такая схема, с двойной виртуализацией, приводит к избыточному расходу ресурсов. Её часто критикуют, и, надо признаться, по делу. Если в компании всё же сложилась такая практика, вместо гипервизора можно поставить Kubernetes, который будет устанавливать приложения напрямую на железо.</p>
35 <p>Обычно в крупных компаниях работают на виртуальных машинах, которые разворачиваются на железных машинах в ЦОДах. Инфраструктурные инженеры нарезают виртуальные компьютеры и выстраивают на них инфраструктуру. С помощью оркестраторов можно убрать эту лишнюю "прослойку".</p>
35 <p>Обычно в крупных компаниях работают на виртуальных машинах, которые разворачиваются на железных машинах в ЦОДах. Инфраструктурные инженеры нарезают виртуальные компьютеры и выстраивают на них инфраструктуру. С помощью оркестраторов можно убрать эту лишнюю "прослойку".</p>
36 <p>Если же у вас много ресурсов, то можно поставить Docker на виртуалку, чтобы изолировать приложения друг от друга.</p>
36 <p>Если же у вас много ресурсов, то можно поставить Docker на виртуалку, чтобы изолировать приложения друг от друга.</p>
37 <p>Docker работает с несколькими сущностями.</p>
37 <p>Docker работает с несколькими сущностями.</p>
38 <p><strong>Docker image (образ).</strong>Это шаблон, по которому создают контейнеры. Его часто сравнивают со слоёным пирогом: мы накладываем слой файловой системы поверх слоя базового образа и получаем неизменяемый образ. В него можно установить приложение, конфигурации и зависимости. Другие образы могут наследоваться, поэтому если положить сверху слой файлов и закоммитить, то мы получим ещё один неизменяемый образ.</p>
38 <p><strong>Docker image (образ).</strong>Это шаблон, по которому создают контейнеры. Его часто сравнивают со слоёным пирогом: мы накладываем слой файловой системы поверх слоя базового образа и получаем неизменяемый образ. В него можно установить приложение, конфигурации и зависимости. Другие образы могут наследоваться, поэтому если положить сверху слой файлов и закоммитить, то мы получим ещё один неизменяемый образ.</p>
39 <em>Скриншот: Skillbox Media</em><p><strong>Dockerfile.</strong>Если Docker image - это пирог, то Dockerfile - рецепт его приготовления. В этом файле описаны основные инструкции для сборки образа: какой базовый образ взять, откуда и куда положить файлы и так далее.</p>
39 <em>Скриншот: Skillbox Media</em><p><strong>Dockerfile.</strong>Если Docker image - это пирог, то Dockerfile - рецепт его приготовления. В этом файле описаны основные инструкции для сборки образа: какой базовый образ взять, откуда и куда положить файлы и так далее.</p>
40 <p><strong>Контейнер</strong> - это runtime-сущность на основе образа, приложение, которое мы развернули с помощью Docker. Можно провести такую аналогию: образ - это инсталлятор программы, а контейнер - уже запущенная программа.</p>
40 <p><strong>Контейнер</strong> - это runtime-сущность на основе образа, приложение, которое мы развернули с помощью Docker. Можно провести такую аналогию: образ - это инсталлятор программы, а контейнер - уже запущенная программа.</p>
41 Контейнеры<em>Скриншот: Skillbox Media</em>Контейнеры<em>Скриншот: Skillbox Media</em><p>При развёртывании контейнера поверх файловой системы создаётся ещё один изменяемый слой. Приложение внутри контейнера может записывать туда данные или редактировать их. После удаления контейнера данные стираются, но их можно сохранить с помощью<a>volumes</a>.</p>
41 Контейнеры<em>Скриншот: Skillbox Media</em>Контейнеры<em>Скриншот: Skillbox Media</em><p>При развёртывании контейнера поверх файловой системы создаётся ещё один изменяемый слой. Приложение внутри контейнера может записывать туда данные или редактировать их. После удаления контейнера данные стираются, но их можно сохранить с помощью<a>volumes</a>.</p>
42 <p><strong>Docker Registry.</strong>Это репозиторий, в котором хранятся Docker-образы. Он может быть как локальным, так и публичным. Репозитории создают на платформах вроде Docker Hub и GitLab и размещают в них образы с описанием, разными версиями и тегами.</p>
42 <p><strong>Docker Registry.</strong>Это репозиторий, в котором хранятся Docker-образы. Он может быть как локальным, так и публичным. Репозитории создают на платформах вроде Docker Hub и GitLab и размещают в них образы с описанием, разными версиями и тегами.</p>
43 <p>Приведу несколько примеров использования Docker, которые хорошо иллюстрируют его преимущества.</p>
43 <p>Приведу несколько примеров использования Docker, которые хорошо иллюстрируют его преимущества.</p>
44 <p>Обычно, чтобы установить какую-то библиотеку или базу данных, разработчику нужно прочитать инструкцию на сайте. Он её скачивает, устанавливает, настраивает и запускает. А когда нужно перейти на другую зависимость - удаляет. И так приходится возиться с каждой зависимостью.</p>
44 <p>Обычно, чтобы установить какую-то библиотеку или базу данных, разработчику нужно прочитать инструкцию на сайте. Он её скачивает, устанавливает, настраивает и запускает. А когда нужно перейти на другую зависимость - удаляет. И так приходится возиться с каждой зависимостью.</p>
45 <p>Docker предоставляет альтернативный путь. Вендоры библиотек, фреймворков и баз данных практически каждый день публикуют на Docker Hub свой софт в виде Docker image. Образ можно скачать и развернуть через Docker, поработать с ним, запушить, а потом остановить или удалить, и в операционной системе не останется никаких следов.</p>
45 <p>Docker предоставляет альтернативный путь. Вендоры библиотек, фреймворков и баз данных практически каждый день публикуют на Docker Hub свой софт в виде Docker image. Образ можно скачать и развернуть через Docker, поработать с ним, запушить, а потом остановить или удалить, и в операционной системе не останется никаких следов.</p>
46 <p>Единый интерфейс управления исключает необходимость индивидуальных команд. Достаточно выучить команды Docker: как скачивать образы, запускать контейнеры, пробрасывать, останавливать и удалять порты. С Docker можно запустить сколько угодно одинаковых баз внутри одной операционки. Благодаря изоляции, если что-то пойдёт не так, ошибки не затронут операционную систему и ничего не сломают.</p>
46 <p>Единый интерфейс управления исключает необходимость индивидуальных команд. Достаточно выучить команды Docker: как скачивать образы, запускать контейнеры, пробрасывать, останавливать и удалять порты. С Docker можно запустить сколько угодно одинаковых баз внутри одной операционки. Благодаря изоляции, если что-то пойдёт не так, ошибки не затронут операционную систему и ничего не сломают.</p>
47 <p>Чтобы запустить автотесты, требуются определённые зависимости, например базы данных, брокеры сообщений и тому подобное. Их необходимо предварительно установить и сконфигурировать на сервере сборки. В этом месте иногда возникают проблемы: если при настройке упустить какую-то деталь, то можно испортить данные или что-то поломать. Гораздо безопаснее автоматически развернуть зависимости в виде контейнера прямо на сервере. Это позволяет быстро прогнать тесты, а после - бесследно удалить контейнеры.</p>
47 <p>Чтобы запустить автотесты, требуются определённые зависимости, например базы данных, брокеры сообщений и тому подобное. Их необходимо предварительно установить и сконфигурировать на сервере сборки. В этом месте иногда возникают проблемы: если при настройке упустить какую-то деталь, то можно испортить данные или что-то поломать. Гораздо безопаснее автоматически развернуть зависимости в виде контейнера прямо на сервере. Это позволяет быстро прогнать тесты, а после - бесследно удалить контейнеры.</p>
48 <p>Даже если тесты "сломают" какие-то данные, они удалятся вместе с контейнером. Кроме того, сам сервер с Docker, на котором запускаются автотесты, станет универсальным. Ведь благодаря контейнеризации на нём можно будет запускать что угодно. А значит, вы сэкономите на железе и настройке системы.</p>
48 <p>Даже если тесты "сломают" какие-то данные, они удалятся вместе с контейнером. Кроме того, сам сервер с Docker, на котором запускаются автотесты, станет универсальным. Ведь благодаря контейнеризации на нём можно будет запускать что угодно. А значит, вы сэкономите на железе и настройке системы.</p>
49 <p>После тестирования проект упаковывают в образ и публикуют, передают клиентам или инфраструктурным инженерам.</p>
49 <p>После тестирования проект упаковывают в образ и публикуют, передают клиентам или инфраструктурным инженерам.</p>
50 <p>Docker упрощает дальнейшее развёртывание приложения. SRE не нужно думать, какие зависимости установить, ведь всё уже упаковано в образ. Для них это чёрный ящик, который они обновляют единообразно и автоматически через одни и те же команды.</p>
50 <p>Docker упрощает дальнейшее развёртывание приложения. SRE не нужно думать, какие зависимости установить, ведь всё уже упаковано в образ. Для них это чёрный ящик, который они обновляют единообразно и автоматически через одни и те же команды.</p>
51 <p>Среда для деплоя тоже становится универсальной, потому что всегда имеет дело только с контейнерами. Сегодня в ней развернули один контейнер, завтра - другой. При этом в контейнерах могут быть упакованы совершенно не похожие друг на друга приложения.</p>
51 <p>Среда для деплоя тоже становится универсальной, потому что всегда имеет дело только с контейнерами. Сегодня в ней развернули один контейнер, завтра - другой. При этом в контейнерах могут быть упакованы совершенно не похожие друг на друга приложения.</p>
52 <p>Как известно, за удовольствие приходится платить. И Docker - не исключение.</p>
52 <p>Как известно, за удовольствие приходится платить. И Docker - не исключение.</p>
53 <p><strong>Высокое потребление ресурсов.</strong>Docker создаёт дополнительную логическую прослойку и потребляет дополнительные ресурсы. Поэтому вы должны определить, что для вас более важно - ресурсы или удобства. Если ресурсов с запасом, можно смело ставить Docker - будете удобно обновлять и версионировать приложения, не боясь испортить операционную систему. Если же ресурсы в дефиците, то лучше использовать классическую схему установки приложений.</p>
53 <p><strong>Высокое потребление ресурсов.</strong>Docker создаёт дополнительную логическую прослойку и потребляет дополнительные ресурсы. Поэтому вы должны определить, что для вас более важно - ресурсы или удобства. Если ресурсов с запасом, можно смело ставить Docker - будете удобно обновлять и версионировать приложения, не боясь испортить операционную систему. Если же ресурсы в дефиците, то лучше использовать классическую схему установки приложений.</p>
54 <p><strong>Для больших приложений нужен оркестратор.</strong>Docker подходит для запуска нескольких контейнеров. В стандартной поставке Docker Compose есть механизм, который позволяет управлять их запуском с помощью конфигурационного файла YAML. Но этот механизм простой, он не потянет приложение, включающее 50-100 сервисов. У Docker не хватит механизмов управления и распределения ресурсов, резервирования и отказоустойчивости, чтобы реализовывать разные схемы обновления контейнеров.</p>
54 <p><strong>Для больших приложений нужен оркестратор.</strong>Docker подходит для запуска нескольких контейнеров. В стандартной поставке Docker Compose есть механизм, который позволяет управлять их запуском с помощью конфигурационного файла YAML. Но этот механизм простой, он не потянет приложение, включающее 50-100 сервисов. У Docker не хватит механизмов управления и распределения ресурсов, резервирования и отказоустойчивости, чтобы реализовывать разные схемы обновления контейнеров.</p>
55 <p>В больших приложениях с микросервисной архитектурой используют оркестраторы<a>Kubernetes</a>или<a>OpenShift</a>. Единицей управления в Kubernetes является контейнер Docker, но на голом Docker прод практически никто не держит. Когда-то в России были такие компании - они рассказывали о своём травмирующем опыте на конференциях :)</p>
55 <p>В больших приложениях с микросервисной архитектурой используют оркестраторы<a>Kubernetes</a>или<a>OpenShift</a>. Единицей управления в Kubernetes является контейнер Docker, но на голом Docker прод практически никто не держит. Когда-то в России были такие компании - они рассказывали о своём травмирующем опыте на конференциях :)</p>
56 <p>Kubernetes - это мощный слой абстракции над железом, альтернатива гипервизорам у виртуалок. Он позволяет настраивать политики безопасности, реализует различные схемы обновления и позволяет гибко управлять ресурсами.</p>
56 <p>Kubernetes - это мощный слой абстракции над железом, альтернатива гипервизорам у виртуалок. Он позволяет настраивать политики безопасности, реализует различные схемы обновления и позволяет гибко управлять ресурсами.</p>
57 <p><strong>Проблемы с установкой на Windows и macOS.</strong>Как я сказал ранее, Docker создавался под Linux. На других операционках он не поддерживает некоторые типы сетей. В большинстве случаев никто этого не заметит, но об этом ограничении нужно помнить. Также на некоторых устройствах возникает<a>конфликт с Virtual Box</a>при установке Docker на Windows.</p>
57 <p><strong>Проблемы с установкой на Windows и macOS.</strong>Как я сказал ранее, Docker создавался под Linux. На других операционках он не поддерживает некоторые типы сетей. В большинстве случаев никто этого не заметит, но об этом ограничении нужно помнить. Также на некоторых устройствах возникает<a>конфликт с Virtual Box</a>при установке Docker на Windows.</p>
58 <p>Я рекомендую изучать Docker по книгам, сайтам и закреплять прочитанное на практике.</p>
58 <p>Я рекомендую изучать Docker по книгам, сайтам и закреплять прочитанное на практике.</p>
59 <p><strong>Книги.</strong>Есть две хорошие книги - Using Docker и Docker in Action. Правда, они немного устарели (опубликованы в 2018-2019 годах), поэтому там может быть неактуальная информация. Надеюсь, скоро будет переиздание.</p>
59 <p><strong>Книги.</strong>Есть две хорошие книги - Using Docker и Docker in Action. Правда, они немного устарели (опубликованы в 2018-2019 годах), поэтому там может быть неактуальная информация. Надеюсь, скоро будет переиздание.</p>
60 <p><strong>Сайт</strong><a><strong>docker.com</strong></a> - основной сайт Docker. На нём есть справочники и референсы по Docker, Docker-файлам, образам и Docker Compose. Читаете книгу, проверяете на сайте актуальность команд и изучаете примеры.</p>
60 <p><strong>Сайт</strong><a><strong>docker.com</strong></a> - основной сайт Docker. На нём есть справочники и референсы по Docker, Docker-файлам, образам и Docker Compose. Читаете книгу, проверяете на сайте актуальность команд и изучаете примеры.</p>
61 <p><strong>Упражнения.</strong>Я провожу тренинги и внутреннее обучение в командах. Обычно рекомендую такие упражнения:</p>
61 <p><strong>Упражнения.</strong>Я провожу тренинги и внутреннее обучение в командах. Обычно рекомендую такие упражнения:</p>
62 <ul><li>Установите Docker на рабочий компьютер. Возьмите готовый Docker image с Docker Hub с базой данных и запустите на его основе контейнер. Это можно сделать по инструкции, которую производитель image выкладывает на Docker Hub. Затем подключитесь к запущенной БД каким-нибудь клиентом и убедитесь, что всё работает.</li>
62 <ul><li>Установите Docker на рабочий компьютер. Возьмите готовый Docker image с Docker Hub с базой данных и запустите на его основе контейнер. Это можно сделать по инструкции, которую производитель image выкладывает на Docker Hub. Затем подключитесь к запущенной БД каким-нибудь клиентом и убедитесь, что всё работает.</li>
63 <li>Напишите простенький сервис REST API и Docker-файл для упаковки сервиса в образ, подглядывая в референсы или книгу. Ваша задача - разобраться в теории, получить Docker image и проставить теги.</li>
63 <li>Напишите простенький сервис REST API и Docker-файл для упаковки сервиса в образ, подглядывая в референсы или книгу. Ваша задача - разобраться в теории, получить Docker image и проставить теги.</li>
64 <li>Из полученного ранее образа создайте и запустите контейнер. Вам придётся разобраться с параметрами команды Docker run, настройками портов, передачей переменных окружению, монтированием и основными параметрами. Также стоит научиться подключаться к контейнеру, выполнять bash-команды и смотреть логи приложения.</li>
64 <li>Из полученного ранее образа создайте и запустите контейнер. Вам придётся разобраться с параметрами команды Docker run, настройками портов, передачей переменных окружению, монтированием и основными параметрами. Также стоит научиться подключаться к контейнеру, выполнять bash-команды и смотреть логи приложения.</li>
65 <li>Усложните тестовый сервис, научив его работать с базой данных. Затем разверните контейнеры с сервисом и базой данных и соедините их внутренней сетью. Простое и в то же время очень полезное упражнение, на котором очень часто возникают затруднения на собеседованиях.</li>
65 <li>Усложните тестовый сервис, научив его работать с базой данных. Затем разверните контейнеры с сервисом и базой данных и соедините их внутренней сетью. Простое и в то же время очень полезное упражнение, на котором очень часто возникают затруднения на собеседованиях.</li>
66 <li>Переходим к Docker Compose. Посмотрите, как написать YAML и создать группу контейнеров, как соединять их в сеть и работать с маунтами.</li>
66 <li>Переходим к Docker Compose. Посмотрите, как написать YAML и создать группу контейнеров, как соединять их в сеть и работать с маунтами.</li>
67 <li>Опубликуйте свой Docker image в Docker Hub. На одном аккаунте можно бесплатно публиковать только один образ, но есть GitLab, где нет таких ограничений. Правда, он устроен немного сложнее, новичок может запутаться. Ещё в том же GitLab можно создать приватный registry-режим и публиковать проекты без ограничений.</li>
67 <li>Опубликуйте свой Docker image в Docker Hub. На одном аккаунте можно бесплатно публиковать только один образ, но есть GitLab, где нет таких ограничений. Правда, он устроен немного сложнее, новичок может запутаться. Ещё в том же GitLab можно создать приватный registry-режим и публиковать проекты без ограничений.</li>
68 </ul><a>Практический курс: "Профессия DevOps-инженер" Узнать о курсе</a>
68 </ul><a>Практический курс: "Профессия DevOps-инженер" Узнать о курсе</a>