Что такое Docker и каковы его ключевые концепции

Ответ

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

Ключевые концепции Docker:

  • Image (Образ) Это неизменяемый (immutable) шаблон, содержащий все необходимое для запуска приложения: код, среду выполнения, библиотеки, переменные окружения и конфигурационные файлы. Образы строятся на основе инструкций из Dockerfile.

  • Container (Контейнер) Это запущенный экземпляр образа. Контейнер представляет собой изолированный процесс в хост-системе, имеющий собственную файловую систему, сеть и пространство процессов. Можно запускать, останавливать, перемещать и удалять контейнеры.

  • Dockerfile Текстовый файл с набором инструкций для автоматической сборки образа Docker. Каждая инструкция создает новый слой в образе.

  • Registry (Реестр) Хранилище для образов Docker. Самый известный публичный реестр — Docker Hub. Компании часто используют приватные реестры для хранения своих образов.

  • Volume (Том) Механизм для сохранения данных, генерируемых и используемых контейнерами. Данные в томах хранятся на хост-машине и не удаляются вместе с контейнером, что обеспечивает их персистентность.

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

# Собрать образ из Dockerfile в текущей директории
docker build -t my-app:1.0 .

# Запустить контейнер из образа в фоновом режиме
docker run -d -p 8080:80 --name my-running-app my-app:1.0

# Посмотреть список запущенных контейнеров
docker ps

# Остановить контейнер
docker stop my-running-app

Ответ 18+ 🔞

Ага, слушай, вот эта вся ваша Docker-хуятина, на которую все молятся, как на нового бога. Открытая платформа, блядь, для разработки, доставки и запуска приложений в изолированных средах, называемых контейнерами. Представь себе, ты берешь своё приложение, всю эту ебучую требуху из библиотек, сред выполнения и прочего говна, и запихиваешь в одну переносимую коробку — образ. И эта коробка, ёпта, будет работать везде одинаково, хоть у тебя на ноуте, хоть на сервере у дяди Васи в подвале. Удобно, чё.

Ключевые концепции, без которых ты нихуя не поймёшь:

  • Image (Образ) Это типа священный, неизменяемый слепок, шаблон, ёбаный blueprint. В нём лежит всё: твой код, среда, библиотеки, переменные окружения — вся хуйня, без которой твоё приложение — просто кусок говна. Собирается он из инструкций в Dockerfile. Раз собрал — и всё, блядь, как отлитый в граните.

  • Container (Контейнер) А это уже живой, дышащий экземпляр этого образа. Запустил образ — получил контейнер. Это изолированный процесс в системе, у него своя маленькая файловая система, своя сеть, свои процессы. Его можно запускать, останавливать, удалять или, как мебель, перетаскивать. Главное — он легковесный, не то что виртуалка целая.

  • Dockerfile Вот это, сука, священный текст, инструкция по сборке этого самого образа. Каждая строчка в нём — это новый слой в образе. Написал правильно — получил работающую хрень. Накосячил — сиди, дебажь, пока глаза не вытекут. Базовый пример, чтобы ты проникся:

FROM ubuntu:22.04
RUN apt-get update && apt-get install -y python3
COPY . /app
CMD ["python3", "/app/main.py"]
  • Registry (Реестр) Ну, склад образов, блядь. Самый известный — Docker Hub, там дохуя всего лежит, от официального софта до какого-нибудь левого скрипта какого-то студента. Но умные дяди свои образы в приватные реестры пихают, чтобы их не тырили всякие левые личности.

  • Volume (Том) А это, дружок, твоё спасение от потери данных. Контейнеры-то временные, удалил — и всё, пиздец, данные нахуй пропали. А том — это такая хитрая жопа, которая приматывается к контейнеру, но живёт на хост-машине. Данные в нём переживут удаление десятка контейнеров. Персистентность, ёпта!

Основные команды, которые надо вбить в подкорку:

# Собрать образ из Dockerfile в текущей директории. Точку в конце не забудь, а то нихуя не соберётся!
docker build -t my-app:1.0 .

# Запустить контейнер из образа в фоновом режиме. -d — это демон, -p — пробросить порты, --name — дать человеческое имя, а то потом по ID искать, заебёшься.
docker run -d -p 8080:80 --name my-running-app my-app:1.0

# Посмотреть список запущенных контейнеров. Если добавить -a, то увидишь и остановленные, все эти трупы.
docker ps

# Остановить контейнер. Вежливо попросить его завершиться.
docker stop my-running-app

# А это если он не понимает по-хорошему. Жёсткий пинок.
docker kill my-running-app

Вот и вся магия, если без лишней воды. Собрал, запустил, работает — красота. Не работает — ну, бывает, иди читай логи, там обычно всё написано, почему твоё творение — говно.