Docker

Вопросы и ответы для подготовки к собеседованиям

Базовые вопросы

Что такое Docker и какие проблемы он решает?

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


Расскажите про основные компоненты Docker

1. Docker Engine:

Это основа Docker — среда выполнения (runtime), которая позволяет создавать и запускать контейнеры. Она состоит из трех частей:

  • Docker Daemon (dockerd): работает в фоне и управляет контейнерами, образами, сетями и томами Docker.

  • Docker Client (docker): командная строка, с помощью которой пользователи взаимодействуют с Docker Daemon.

  • REST API: обеспечивает интерфейс для программирования, позволяя приложениям взаимодействовать с Docker Daemon.

2. Docker Images (образы):

Образ - это неизменяемый файл, содержащий всё необходимое для выполнения приложения: код, библиотеки, зависимости и параметры среды. Образ служит шаблоном для создания контейнеров.

3. Docker Containers (контейнеры):

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

4. Docker Registries (регистры):

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

5. Docker Compose:

Инструмент для определения и управления многоконтейнерными приложениями. С помощью файла docker-compose.yml можно определить и запустить приложение, состоящее из нескольких сервисов.

6. Docker Swarm:

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

7. Docker Volumes (тома):

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


Что такое Dockerfile и каковы его основные инструкции?

Dockerfile — это текстовый файл с инструкциями для создания образа Docker

Ключевые инструкции: FROM, RUN, CMD, COPY, ENTRYPOINT, EXPOSE и т.д.

Подробнее...


Как работает Docker Compose и в каких случаях его удобно использовать?

Docker Compose используется для определения и управления многоконтейнерными Docker-приложениями. Он позволяет управлять несколькими контейнерами с помощью единого YAML файла (docker-compose.yml).


В чем разница между образом и контейнером в Docker?

Образ — это шаблон или слепок, который используется для создания контейнеров.

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

Команды Docker

Команда Описание
docker pull

Загружает образ из Docker Hub или другого Docker Registry на локальную машину

Раздел: Образы

Пример: docker pull ubuntu

docker ps

Показывает список запущенных контейнеров

Раздел: Контейнеры

Пример: docker ps

docker build

Создает Docker-образ из Dockerfile

Раздел: Создание образов

Пример: docker build -t my_image .

docker run

Запускает контейнер из указанного образа

Раздел: Запуск контейнеров

Пример: docker run -d -p 80:80 nginx

docker compose

Управляет многоконтейнерными Docker-приложениями с помощью Docker Compose

Раздел: Оркестрация

Пример: docker-compose up

Команды DockerFile

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

Команда Описание
FROM

Задает базовый образ для сборки нового образа. Это первая инструкция, используемая в Dockerfile.

Пример: FROM python:3.9-slim

LABEL

Для добавления метаданных к образу, таких как автор или версия.

Пример: LABEL maintainer="maintainer@example.com"

RUN

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

Пример: RUN apt-get update && apt-get install -y python3-pip

COPY

Копирует файлы и каталоги из контекста сборки на файл-систему образа.

Пример: COPY . /app

ADD

Похожая на COPY команда, но с дополнением: может извлекать файлы из архивов и загружать файлы по URL.

Пример: ADD package.tar.gz /app

CMD

Задает команду по умолчанию, которая выполняется при запуске контейнера. Может быть переопределена при запуске контейнера.

Пример: CMD ["python", "app.py"]

ENTRYPOINT

Устанавливает основную команду и параметры, которые нельзя переопределить из командной строки при запуске контейнера, если не использовать специальные флаги (--entrypoint).

Пример: ENTRYPOINT ["python", "app.py"]

ENV

Устанавливает переменные окружения в контейнере.

Пример: ENV APP_ENV=production

EXPOSE

Документирует, что контейнер слушает на указанных портах в протоколе TCP или UDP. Это больше используется для информации и никак не настраивает сетевые правила.

Пример: EXPOSE 80

VOLUME

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

Пример: VOLUME ["/data"]

WORKDIR

Устанавливает рабочую директорию для следующих инструкций (например, RUN, CMD, ENTRYPOINT).

Пример: WORKDIR /app

ARG

Определяет переменные, которые могут быть переданы на этапе сборки, например, через команду docker build.

Пример: ARG VERSION=1.0