Основы Docker: Полное руководство для начинающих
Автор: Javohir Abdullayev · · Сервер и DevOps

Что такое Docker и почему он нужен каждому разработчику?
Одна из самых частых проблем при разработке программного обеспечения — это ситуация «На моем компьютере все работало, а на сервере почему-то не работает». Различия между средой локальной разработки (local environment) и боевым сервером (production) становятся причиной множества ошибок. Docker был создан специально для того, чтобы раз и навсегда решить эту проблему.
Docker — это платформа контейнеризации, которая позволяет упаковать приложение со всеми его зависимостями (библиотеками, версией Python, системными настройками) в единый легковесный пакет — контейнер — и гарантированно запускать его на любой системе с абсолютно одинаковым результатом.
Разница между контейнерами и виртуальными машинами (VM)
Многие начинающие разработчики путают контейнеры с виртуальными машинами, такими как VirtualBox или VMware. Однако между ними есть принципиальная разница:
- Виртуальная машина: для каждой гостевой системы устанавливается полноценная независимая операционная система (Guest OS). Она функционирует через гипервизор, потребляет значительный объем оперативной памяти (RAM) и места на диске, а также долго загружается.
- Контейнер Docker: использует общее ядро (kernel) хостовой операционной системы (Host OS). Внутри находятся только необходимые библиотеки и файлы самого приложения. Благодаря этому контейнеры стартуют за доли секунды и расходуют минимум ресурсов.
Ключевые концепции Docker
Перед началом работы с Docker важно четко усвоить четыре основополагающих понятия:
- Dockerfile: пошаговый конфигурационный файл с инструкциями по сборке образа приложения.
- Image (Образ): неизменяемый шаблон, собранный на основе Dockerfile. Его можно представить как «снимок» или чертеж программы.
- Container (Контейнер): работающий экземпляр образа. Если образ — это класс (class), то контейнер — это запущенный объект этого класса (instance).
- Docker Hub: публичный реестр готовых образов (например, официальные образы Python, PostgreSQL, Redis).
Практический шаг: написание Dockerfile для приложения на Python
Давайте упакуем простое веб-приложение на Python в Docker-контейнер. Для этого создадим в корне проекта файл с именем Dockerfile:
# Берем официальный легковесный образ Python в качестве базового
FROM python:3.11-slim
# Задаем рабочую директорию внутри контейнера
WORKDIR /app
# Сначала копируем только requirements.txt (для эффективной работы кэша)
COPY requirements.txt .
# Устанавливаем зависимости
RUN pip install --no-cache-dir -r requirements.txt
# Копируем остальные файлы проекта
COPY . .
# Указываем рабочий порт приложения
EXPOSE 8000
# Главная команда, выполняемая при запуске контейнера
CMD ["python", "main.py"]Самые используемые команды Docker в ежедневной работе
Основные команды, к которым вы будете обращаться чаще всего при управлении проектами:
docker build -t mening-ilovam .— сборка нового образа на основе Dockerfile.docker run -d -p 8000:8000 --name mening_konteynerim mening-ilovam— создание и запуск контейнера из образа в фоновом режиме (с пробросом порта 8000 на локальный компьютер).docker ps— просмотр списка активных запущенных контейнеров (для отображения всех, включая остановленные, добавьте флаг-a).docker logs -f mening_konteynerim— отслеживание логов и ошибок внутри контейнера в режиме реального времени.docker stop mening_konteynerim— остановка работающего контейнера.docker rm mening_konteynerim— удаление остановленного контейнера.docker rmi mening-ilovam— полное удаление ненужного образа с диска.
Что такое Docker Compose и зачем он нужен?
Реальные проекты редко состоят из одного сервиса. Например, сайту на Django обычно требуются база данных PostgreSQL и система кэширования Redis. Запускать каждый сервис вручную отдельной командой неудобно.
Docker Compose — это инструмент для конфигурации многоконтейнерных приложений через единый файл docker-compose.yml и одновременного их запуска одной командой docker compose up.
version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_DB: mydatabase
POSTGRES_USER: user
POSTGRES_PASSWORD: secretpassword
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:4 важных совета для начинающих
- Используйте файл .dockerignore: не копируйте в образ лишние каталоги, такие как
.git,venv,__pycache__. Это заметно уменьшит размер образа. - Выбирайте компактные базовые образы: по возможности отдавайте предпочтение образам с тегами
alpineилиslim. - Грамотно используйте кэш слоев: копируйте часто меняющийся код приложения только после установки всех зависимостей.
- Безопасность: избегайте постоянного запуска процессов внутри контейнера под пользователем root.
Docker — это признанный современный стандарт, который упрощает жизнь разработчика, выводит деплой и командную разработку на новый уровень. Освоив его, вы существенно повысите свою ценность как IT-специалиста.
Теги: #Docker #DevOps #Server #Linux #Dockerfile