1. Введение в Docker: архитектура, установка и запуск первых контейнеров
Введение в Docker: архитектура, установка и запуск первых контейнеров
Добро пожаловать в «Полный курс по Docker: от новичка до профи». Мы начинаем наше путешествие с фундаментальных основ. Если вы когда-либо слышали фразу «на моем компьютере это работает, я не знаю, почему не работает у тебя», то вы уже понимаете, какую главную проблему решает Docker.
В этой статье мы разберем, что такое контейнеризация, чем она отличается от виртуализации, как устроен Docker изнутри, и, конечно же, запустим ваши первые приложения в изолированной среде.
Что такое Docker и зачем он нужен?
Docker — это открытая платформа для разработки, доставки и запуска приложений. Она позволяет отделить ваше приложение от инфраструктуры, так что вы можете быстро доставлять программное обеспечение.
Представьте себе грузоперевозки до появления стандартных морских контейнеров. Грузчики носили мешки, бочки и ящики разного размера. Это было долго, неудобно и часто приводило к порче груза. Появление стандартного металлического контейнера революционизировало логистику: теперь неважно, что внутри — автомобили или зерно — контейнер всегда имеет стандартные крепления и габариты.
Docker делает то же самое для кода. Он упаковывает приложение и все его зависимости (библиотеки, системные инструменты, код, среду исполнения) в стандартный блок, называемый контейнером. Это гарантирует, что приложение будет работать одинаково везде: на ноутбуке разработчика, на тестовом сервере или в облаке.
Контейнеризация против Виртуализации
Чтобы понять гениальность Docker, нужно сравнить его с классическими виртуальными машинами (VM).
Виртуальные машины (VM)
Виртуальная машина — это эмуляция целого компьютера. На физическом сервере работает гипервизор, который позволяет запускать несколько гостевых операционных систем (ОС). Каждая VM имеет свою полную копию ОС, выделенную оперативную память и дисковое пространство. Это надежно, но очень «тяжело». Если вам нужно запустить 5 микросервисов, вам придется запустить 5 операционных систем, каждая из которых потребляет ресурсы просто на свое существование.Контейнеры
Контейнеры работают иначе. Они не требуют отдельной ОС для каждого приложения. Вместо этого они используют ядро основной (хостовой) операционной системы, но изолируют процессы друг от друга. Контейнеры легковесны: они занимают мегабайты, а не гигабайты, и запускаются за секунды, а не минуты.Архитектура Docker
Docker использует клиент-серверную архитектуру. Понимание этих компонентов критически важно для работы.
1. Docker Daemon (dockerd)
Это «мозг» системы. Фоновый процесс, работающий на хост-машине. Он управляет объектами Docker (образами, контейнерами, сетями, томами) и выполняет всю тяжелую работу по их созданию и запуску.2. Docker Client (docker)
Это то, с чем вы взаимодействуете в терминале. Когда вы пишете команду docker run, клиент отправляет запрос демону через REST API. Клиент и демон могут работать как на одной системе, так и на разных.3. Docker Registry (Реестр)
Это хранилище образов. Самый известный публичный реестр — Docker Hub. Когда вы просите Docker запустить программу, которой у вас нет локально, он ищет её именно там.!Схема взаимодействия клиента, демона и реестра при выполнении команд.
Основные понятия: Образ и Контейнер
Новички часто путают эти два понятия. Давайте раз и навсегда проясним разницу, используя аналогию из объектно-ориентированного программирования.
Образ (Image): Это класс*. Это неизменяемый шаблон, содержащий исходный код, библиотеки, зависимости, инструменты и другие файлы, необходимые для приложения. Образ «заморожен» и доступен только для чтения. Контейнер (Container): Это экземпляр класса (объект)*. Это запущенный образ. Когда вы создаете контейнер, Docker добавляет к образу тонкий слой для записи, позволяя вносить изменения во время работы программы. Из одного образа можно запустить сколько угодно контейнеров.
> Контейнер — это процесс в операционной системе, который изолирован от других процессов и имеет собственное пространство имен файловой системы.
Установка Docker
Процесс установки зависит от вашей операционной системы. Я приведу краткий обзор, но всегда рекомендую обращаться к официальной документации Docker.
Windows и macOS
Для этих систем существует Docker Desktop. Это удобное приложение, которое устанавливает всё необходимое (Docker Engine, Docker CLI, Docker Compose) и предоставляет графический интерфейс.Linux (Ubuntu/Debian)
На Linux Docker работает нативно, поэтому производительность здесь максимальная. Установка обычно производится через терминал:После установки проверьте, что все работает, введя в терминале:
Практика: Запуск первых контейнеров
Теперь самое интересное. Давайте перейдем от теории к практике. Откройте ваш терминал (или PowerShell/CMD в Windows).
Hello World
По традиции, начнем с простейшего. Введите команду:
Что произошло?
hello-world.Запуск веб-сервера Nginx
hello-world сразу выключается. Давайте запустим что-то, что работает постоянно, например, веб-сервер Nginx.
Введите команду:
Разберем флаги этой команды, так как вы будете использовать их постоянно:
* docker run: команда создания и запуска контейнера.
* -d (detach): запуск в фоновом режиме. Контейнер не захватит ваш терминал, а вернет вам длинный ID контейнера.
* -p 8080:80 (publish): проброс портов. Это критически важно. Синтаксис: хост_порт:порт_контейнера. Мы говорим: «Перенаправь всё, что приходит на порт 8080 моего компьютера, на порт 80 внутри контейнера».
* nginx: имя образа.
Теперь откройте браузер и перейдите по адресу http://localhost:8080. Вы увидите приветственную страницу «Welcome to nginx!». Поздравляю, вы запустили веб-сервер в изолированном контейнере за одну секунду!
Управление контейнерами
Поскольку мы запустили контейнер в фоновом режиме, нам нужно уметь им управлять.
1. Посмотреть запущенные контейнеры:
Вы увидите таблицу с ID контейнера, образом, статусом и портами.
2. Остановить контейнер:
Возьмите CONTAINER ID (достаточно первых 3-4 символов) из предыдущей команды и выполните:
3. Удалить контейнер:
Остановленный контейнер все еще занимает место на диске. Чтобы удалить его:
> Важно: Команда docker rm удаляет контейнер, а docker rmi удаляет образ.
Жизненный цикл контейнера
Подводя итог, типичный жизненный цикл выглядит так:
docker pull или автоматически при run).В следующей статье мы углубимся в работу с образами, научимся создавать свои собственные Dockerfile и упаковывать ваши личные приложения. А пока — выполните домашнее задание, чтобы закрепить материал.