50 вопросов на собеседовании по Docker

Появившись в 2013 году, Docker стал хитом ИТ-индустрии. Он оказался очень популярным: в 2022 году ежемесячно загружалось свыше 13 миллиардов образов контейнеров. Растущий спрос на Docker привел к экспоненциальному росту числа вакансий.

В данной статье вы найдете вопросы для подготовки к собеседованию по Docker, которые мы разделили по категориям:

Больше информации о Docker в нашем КАНАЛЕ "DOCKER ПРОСТЫМИ СЛОВАМИ"

Базовые вопросы по докеру

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

1. Что такое гипервизор?

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

  • Тип 1: его также называют нативным гипервизором или гипервизором “голого железа” (Bare metal). Он работает непосредственно на базовой хост-системе и имеет прямой доступ к системному оборудованию хоста и, следовательно, не требует базовой серверной ОС.
  • Тип 2: этот тип гипервизора использует базовую операционную систему хоста. Его также называют хостовым гипервизором.

2. Что такое виртуализация?

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

3. Что такое контейнеризация?

Обычно в процессе разработки программного обеспечения код, созданный на одной машине, может не работать идеально на любой другой машине из-за зависимостей. Эта проблема была решена с помощью концепции контейнеризации. По сути, приложение, которое разрабатывается и развертывается, собирается в пакет и оборачивается вместе со всеми его конфигурационными файлами и зависимостями. Этот пакет называется контейнером. Теперь, когда вы хотите запустить приложение на другой системе, разворачивается контейнер, который обеспечивает среду со всеми зависимостями и библиотеками. Наиболее известные среды контейнеризации – Docker и Kubernetes.

4. Разница между виртуализацией и контейнеризацией

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

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

При виртуализации гипервизоры предоставляют гостю всю виртуальную машину (включая ядро). Виртуальные машины – это абстракция аппаратного уровня. Каждая виртуальная машина – это физическая машина.

5. Что такое Docker?

Поскольку это интервью по Docker, возникнет очевидный вопрос о том, что такое Docker. Начнем с краткого определения.

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

6. Что такое контейнер Docker?

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

7. Что такое образы Docker?

Образ Docker (image) – это источник контейнера Docker. Другими словами, образы Docker используются для создания контейнеров. Когда пользователь запускает образ Docker, создается экземпляр контейнера. Эти образы Docker могут быть развернуты в любой среде Docker.

8. Что такое Docker Hub?

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

9. Объясните архитектуру Docker?

Архитектура Docker состоит из движка Docker Engine, который представляет собой клиент-серверное приложение с тремя основными компонентами:

  1. Сервер, который представляет собой тип долго выполняющейся программы, называемой процессом-демоном (команда docker).
  2. REST API, определяющий интерфейсы, которые программы могут использовать для общения с демоном и указания ему, что делать.
  3. Клиент интерфейса командной строки (CLI).
  4. CLI использует Docker REST API для управления демоном Docker или взаимодействия с ним с помощью сценариев или прямых команд CLI. Многие другие приложения Docker используют базовый API и CLI.

10. Что такое Dockerfile?

Давайте начнем с небольшого объяснения Dockerfile и продолжим, приводя примеры и команды.

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

11. Расскажите что-нибудь о Docker Compose

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

12. Что такое Docker Swarm?

Ожидается, что вы уже работали с Docker Swarm, поскольку это важная концепция Docker.

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

13. Что такое пространство имен Docker?

Пространство имен (Namespace) – это одна из функций Linux и важная концепция контейнеров. Пространство имен добавляет уровень изоляции в контейнерах. Docker предоставляет различные пространства имен, чтобы оставаться переносимым и не влиять на базовую хост-систему. Несколько типов пространств имен, поддерживаемых Docker, – PID, Mount, IPC, User, Network.

14. Каков жизненный цикл контейнера Docker?

Это один из самых популярных вопросов, задаваемых на собеседованиях по Docker. Жизненный цикл контейнеров Docker выглядит следующим образом:

  • Создание контейнера
  • Запуск контейнера
  • Приостановка контейнера (необязательно)
  • Перезапуск контейнера после паузы (необязательно)
  • Остановка контейнера (docker stop)
  • Запуск контейнера после остановки (docker start)
  • Принудительная остановка контейнера (docker kill)
  • Удаление контейнера

15. Что такое Docker Machine?

Docker Machine – это инструмент, позволяющий устанавливать Docker Engine на виртуальные хосты. Теперь этими хостами можно управлять с помощью команд docker-machine. Docker Machine также позволяет создавать кластеры Docker Swarm.

Основные команды докера

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

16. Как проверить версию Docker Client и Docker Server?

Следующая команда позволяет получить информацию о версиях клиента и сервера Docker:

$ docker version

17. Как получить количество запущенных, приостановленных и остановленных контейнеров?

Вы можете использовать следующую команду, чтобы получить подробную информацию об установленных в вашей системе контейнерах:

$ docker info

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

18. Если вы забыли или не уверены в синтаксисе команды, где можно найти необходимую информацию?

Следующая команда очень полезна, так как она дает справку о том, как использовать команду, синтаксис и т. д.

$ docker --help

В приведенной выше команде перечислены все команды Docker. Если вам нужна помощь по какой-то конкретной команде, вы можете использовать следующий синтаксис:

$ docker <command> --help

19. Как войти в репозиторий Docker?

Вы можете использовать следующую команду для входа в hub.docker.com:

$ docker login

Вам будет предложено ввести имя пользователя и пароль для входа в систему.

20. Если вы хотите использовать базовый образ и внести в него изменения или персонализировать его, как это сделать?

Нужно извлечь образ из хаба Docker в свою локальную систему. Для этого используется простая команда:

$ docker pull <image_name>

21. Как создать контейнер Docker из образа?

Извлеките образ из репозитория Docker с помощью приведенной выше команды и запустите его для создания контейнера. Для этого используйте следующую команду:

$ docker run -it -d <image_name>

Скорее всего, следующим вопросом будет, что означает флаг ‘-d’ в команде?

-d – это флаг команды docker-compose. Он означает, что контейнер должен запускаться в фоновом режиме (detached mode).

22. Как перечислить все запущенные контейнеры?

Следующая команда выводит список всех запущенных контейнеров:

$ docker ps

23. Предположим, у вас есть 3 запущенных контейнера, и вы хотите получить доступ к одному из них. Как получить доступ к запущенному контейнеру?

Следующая команда позволяет получить доступ к запущенному контейнеру:

$ docker exec -it <container id> bash

Команда exec позволяет попасть внутрь контейнера и работать с ним.

24. Как запустить, остановить и принудительно остановить контейнер?

Следующая команда используется для запуска контейнера:

$ docker start <container_id>

А следующие действия – для остановки запущенного контейнера:

$ docker stop <container_id>

Чтобы принудительно остановить контейнер используется следующая команда:

$ docker kill <container_id>

25. Можете ли вы редактировать и обновлять контейнер?

Конечно, вы можете редактировать и обновлять контейнер. Звучит сложно, но на самом деле это всего лишь одна команда.

$ docker commit <conatainer id> <username/imagename>

26. Как после работы с образом отправить его в Docker hub?

$ docker push <username/image name>

27. Как удалить остановленный контейнер?

Чтобы удалить остановленный контейнер, выполните следующую команду:

$ docker rm <container id>

28. Как удалить образ из локальной системы?

Следующая команда позволяет удалить образ из локальной системы:

$ docker rmi <image-id>

29. Как создать Dockerfile? 

После того как вы написали Dockerfile, вам нужно собрать его, чтобы создать образ с заданными характеристиками. Для сборки Dockerfile используйте следующую команду:

$ docker build <path to docker file>

Следующий вопрос – когда использовать “.dockerfile_name”, а когда весь путь?

Используйте “.dockerfile_name”, если докерфайл выходит в том же каталоге файлов, и используйте весь путь, если он находится в другом месте.

30. Знаете ли вы, для чего используется команда docker system prune?

$ docker system prune

Приведенная выше команда используется для удаления всех остановленных контейнеров, всех неиспользуемых сетей, всех висящих образов и всех кэшей сборки. Это одна из самых полезных команд в Docker.

Дополнительные вопросы по Docker

Как только интервьюер поймет, что вы знакомы с командами Docker, он начнет спрашивать о практических аспектах работы с Docker. Этот раздел состоит из вопросов, на которые вы сможете ответить только после того, как приобретете некоторый опыт работы с Docker.

31. Потеряете ли вы свои данные, при выходе из докер-контейнера?

Нет, вы не потеряете никаких данных при выходе из контейнера Docker. Все данные, которые ваше приложение записывает в контейнер, сохраняются на диске до тех пор, пока вы не удалите контейнер явным образом. Файловая система контейнера сохраняется даже после его остановки.

32. Как вы думаете, где используется Docker?

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

  • Упрощение конфигурации: Docker позволяет записать окружение и конфигурацию в код и развернуть его.
  • Управление конвейером кода: для разработки и продакшена используются разные системы. По мере того как код проходит путь от разработки к тестированию и продакшену, он проходит через разные окружения. Docker помогает поддерживать согласованность конвейера кода.
  • Производительность разработчиков: использование Docker для разработки дает нам две вещи – мы становимся ближе к продакшену, а среда разработки создается быстрее.
  • Изоляция приложений: поскольку контейнеры – это приложения, обернутые вместе со всеми зависимостями, они являются полностью изолированными. Они могут работать самостоятельно на любом оборудовании, поддерживающем Docker.
  • Возможности отладки: Docker поддерживает различные инструменты отладки, которые не являются специфическими для контейнеров, но хорошо работают с ними.
  • Многопользовательский доступ: Docker позволяет создавать многопользовательские приложения, избегая избыточности в коде.
  • Быстрое развертывание: Docker избавляет от необходимости создавать всю ОС с нуля, сокращая время развертывания.

33. Чем Docker отличается от других методов контейнеризации?

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

34. Можно ли использовать JSON вместо YAML для файла compose в Docker?

Вы можете использовать JSON вместо YAML для вашего файла compose. Чтобы использовать JSON файл, укажите его имя, например:

$ docker-compose -f docker-compose.json up

35. Как вы использовали Docker на своей предыдущей должности?

Объясните, как вы использовали Docker для быстрого развертывания. Объясните, как вы писали сценарии для Docker и использовали его с другими инструментами, такими как Puppet, Chef или Jenkins. Если у вас нет практического опыта работы с Docker, а есть опыт работы с другими инструментами в аналогичном пространстве, будьте честны и расскажите об этом.

36. Насколько масштабируются контейнеры Docker? Есть ли для этого какие-либо требования?

Крупные веб-сервисы, такие как Google и Twitter, и поставщики платформ, такие как Heroku и dotCloud, работают на основе контейнерной технологии. Контейнеры можно масштабировать до сотен тысяч или даже миллионов, работающих параллельно. Если говорить о требованиях, то контейнерам требуется постоянная память и ОС, а также способ эффективно использовать эту память при масштабировании.

37. На каких платформах работает Docker?

Перед собеседованием проведите исследование компании и выясните, как она использует Docker. Обязательно упомяните в ответе платформу, которую использует компания.

Docker работает под управлением различных ОС Linux:

  • Ubuntu 12.04, 13.04 et al
  • Fedora 19/20+
  • RHEL 6.5+
  • CentOS 6+
  • Gentoo
  • ArchLinux
  • openSUSE 12.3+
  • CRUX 3.0+

Его также можно использовать в продакшене с облачными платформами со следующими сервисами:

  • Amazon EC2
  • Amazon ECS
  • Google Compute Engine
  • Microsoft Azure
  • Rackspace

38. Есть ли способ определить статус контейнера Docker?

В любой момент времени контейнер может находиться в шести возможных состояниях – создан, запущен, приостановлен, перезапущен, из контейнера вышли, удален.

Используйте следующую команду, чтобы проверить состояние контейнера в любой момент времени:

$ docker ps

Приведенная выше команда по умолчанию выводит список только запущенных контейнеров. Чтобы найти все контейнеры, используйте следующую команду:

$ docker ps -a

39. Можно ли удалить остановленный контейнер из Docker?

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

40. Может ли контейнер перезапускаться самостоятельно?

Нет, контейнер не может перезапуститься сам по себе. По умолчанию флаг -restart имеет значение false.

41. Что лучше: непосредственно удалить контейнер с помощью команды rm или остановить контейнер, а затем удалить контейнер?

Всегда лучше остановить контейнер, а затем удалить его с помощью команды rm (remove).

$ docker stop <coontainer_id>
$ docker rm -f <container_id>

Остановка контейнера, а затем его удаление позволит отправить получателям сигнал SIG_HUP. Таким образом, у всех контейнеров будет достаточно времени для очистки своих задач. Этот метод считается хорошей практикой, позволяющей избежать нежелательных ошибок.

42. Заменят ли облачные технологии использование контейнеров?

Контейнеры Docker набирают популярность, но в то же время облачные сервисы дают хороший отпор. По моему личному мнению, Docker никогда не будет вытеснен облачными технологиями. Организациям необходимо учитывать свои требования и зависимости и решать, что для них лучше. Большинство компаний интегрировали Docker с облаком. Таким образом, они могут извлечь максимальную выгоду из обеих технологий.

43. Сколько контейнеров может работать на одном хосте?

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

44. Является ли хорошей практикой запуск stateful-приложений в Docker?

Концепция stateful-приложений заключается в том, что они хранят свои данные в локальной файловой системе. Если вы решите перенести приложение на другую машину, извлечение данных станет проблематичным. Честно говоря, я бы не хотел запускать stateful-приложения на Docker.

45. Предположим, у вас есть приложение с множеством зависимостей. Будет ли docker compose ждать, пока текущий контейнер будет готов, чтобы перейти к запуску следующего сервиса?

Ответ – да. Docker compose всегда запускается в порядке зависимости. Эти зависимости представляют собой такие спецификации, как depends_on, links, volumes_from и т. д.

46. Как вы будете контролировать Docker в продакшене?

Docker предоставляет такие функции, как docker stats и docker events для мониторинга Docker в продакшене. Docker stats предоставляет информацию об использовании процессора и памяти контейнера. События Docker предоставляют информацию о действиях, происходящих в демоне Docker.

47. Является ли хорошей практикой запуск Docker compose в продакшене?

Да, использование docker compose в продакшене – это его лучшее практическое применение. Когда вы определяете приложения с помощью compose, вы можете использовать это определение compose на различных этапах продакшена, таких как CI, staging, тестирование и т. д.

48. Какие изменения должны произойти в файле docker compose при переносе его в продакшен?

Перед переносом приложения в продакшен-среду необходимо внести следующие изменения в файл compose:

  • Убрать привязку к томам, чтобы код оставался внутри контейнера и не мог быть изменен извне
  • Привязать к различным портам на хосте
  • Задайть политику перезапуска
  • Добавить дополнительные сервисы, например агрегатор логов.

49. Использовали ли вы Kubernetes? Если да, то какой из двух инструментов, Docker или Kubernetes, вы предпочитаете?

Вопросы на собеседовании по Docker будут касаться и других подобных инструментов. Будьте предельно честны в таких вопросах. Если вы использовали Kubernetes, расскажите о своем опыте работы с ним и Docker Swarm. Укажите ключевые области, в которых, по вашему мнению, Docker Swarm был более эффективен, и наоборот.

50. Знаете ли вы о балансировке нагрузки между контейнерами и хостами? Как это работает?

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

Заключение

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

Перевод статьи «Top 50 Docker Interview Questions You Must Prepare In 2024».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *