PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    Docker для начинающих разработчиков: полное руководство

    Docker для начинающих разработчиков: полное руководство

    Аватар автора Docker для начинающих разработчиков: полное руководство

    Антон Ларичев

    Иконка календаря12 сентября 2026
    DockerDevOpsКонтейнеризацияBackendjuniorИконка уровня junior
    Картинка поста Docker для начинающих разработчиков: полное руководство

    Введение

    Docker давно стал стандартом де-факто для разработки, тестирования и развёртывания приложений. Если вы только начинаете путь в веб-разработке или бэкенде, рано или поздно столкнётесь с фразой "просто задеплой это в докере". В этой статье разберём, что такое Docker, зачем он нужен и как написать свой первый Dockerfile без лишней магии.

    Что такое Docker и зачем он нужен разработчику

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

    Главные проблемы, которые решает Docker:

    • "У меня локально работает" — контейнер включает все зависимости, версии библиотек и настройки окружения.
    • Долгая настройка окружения для новых разработчиков — вместо инструкции на две страницы достаточно одной команды.
    • Конфликты версий — можно одновременно запускать проекты с разными версиями Node.js, PostgreSQL или Python без конфликтов на одной машине.

    Установка Docker

    Для начала работы установите Docker Desktop (Windows, macOS) или Docker Engine (Linux). После установки проверьте, что всё работает:

    docker --version
    docker run hello-world
    

    Если вторая команда вывела приветственное сообщение, значит Docker установлен и настроен верно.

    Ключевые понятия: образы и контейнеры

    Docker образ (image)

    Образ — это неизменяемый шаблон, который содержит код приложения, зависимости и инструкции для запуска. Образы хранятся в реестрах, например Docker Hub.

    Docker контейнер

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

    # скачать образ node версии 20
    docker pull node:20
    
    # запустить контейнер и зайти в его консоль
    docker run -it node:20 bash
    

    Пишем свой первый Dockerfile

    Dockerfile — это текстовый файл с инструкциями по сборке образа. Рассмотрим пример для простого Node.js приложения.

    # базовый образ с нужной версией node
    FROM node:20-alpine
    
    # рабочая директория внутри контейнера
    WORKDIR /app
    
    # сначала копируем только файлы зависимостей для кеширования слоёв
    COPY package*.json ./
    
    # устанавливаем зависимости
    RUN npm ci --production
    
    # копируем остальной код приложения
    COPY . .
    
    # порт, который слушает приложение
    EXPOSE 3000
    
    # команда запуска
    CMD ["node", "index.js"]
    

    Соберите образ и запустите контейнер:

    docker build -t my-app:1.0 .
    docker run -p 3000:3000 my-app:1.0
    

    Флаг -p 3000:3000 пробрасывает порт контейнера на порт хост-машины, а -t задаёт имя и тег образа.

    Docker Compose для многоконтейнерных приложений

    Реальные приложения редко состоят из одного контейнера — обычно нужны ещё база данных, кеш и очередь сообщений. Для управления такими связками используется Docker Compose.

    version: "3.9"
    
    services:
      app:
        build: .
        ports:
          - "3000:3000"
        depends_on:
          - db
        environment:
          DATABASE_URL: postgres://user:pass@db:5432/mydb
    
      db:
        image: postgres:16
        environment:
          POSTGRES_USER: user
          POSTGRES_PASSWORD: pass
          POSTGRES_DB: mydb
        volumes:
          - db_data:/var/lib/postgresql/data
    
    volumes:
      db_data:
    

    Запуск всей связки одной командой:

    docker compose up -d
    

    Частые ошибки

    • Копирование всего проекта до установки зависимостей. Если сначала выполнить COPY . ., а потом RUN npm install, Docker будет пересобирать зависимости при каждом изменении кода, а не только при изменении package.json. Правильный порядок — сначала файлы зависимостей, потом код.
    • Хранение секретов в Dockerfile. Пароли и API-ключи не должны попадать в образ через ENV или ARG — используйте переменные окружения при запуске контейнера или секрет-менеджеры.
    • Игнорирование .dockerignore. Без этого файла в образ попадают node_modules, .git и другие ненужные файлы, что увеличивает размер образа и время сборки.
    • Использование тяжёлых базовых образов. Полноценный node:20 весит гораздо больше, чем node:20-alpine. Для продакшена почти всегда стоит выбирать облегчённые версии.
    • Запуск процессов от root внутри контейнера. Это снижает безопасность — лучше явно создать непривилегированного пользователя в Dockerfile.
    • Хранение данных внутри контейнера. Контейнеры эфемерны: при удалении контейнера все данные внутри него теряются. Для баз данных обязательно используйте volumes.

    Заключение

    Docker избавляет от бесконечной настройки окружений и делает процесс разработки предсказуемым: то, что работает у вас локально, будет работать точно так же на сервере. Начните с простого Dockerfile для своего проекта, затем добавьте Docker Compose, когда появятся дополнительные сервисы вроде базы данных. Освоив базовые команды — build, run, compose up — вы уже закроете большинство повседневных задач junior-разработчика.

    Иконка глаза426

    Комментарии

    0

    Постройте личный план изучения Neovim - практика и настройка до уровня Middle — бесплатно!

    Neovim - практика и настройка — часть карты развития Frontend, Backend, DevOps

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    React и Redux Toolkit

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Zustand

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Next.js - с нуля

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.7
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста Как настроить CI/CD пайплайн с нуля: полное руководство
    Иконка аватараАнтон
    Иконка календаря14 октября 2026
    CI/CDDevOpsGitHub Actions+ 2middleИконка уровня middle

    Как настроить CI/CD пайплайн с нуля: полное руководство

    CI/CD пайплайн с нуля: как собрать рабочий конвейер сборки, тестов и деплоя на примере GitHub Actions и Docker без лишней теории.

    Иконка чипа0
    Иконка глаза210
    Иконка комментариев0
    Картинка поста CLAUDE.md: как написать инструкции для Claude Code
    Иконка аватараАнтон
    Иконка календаря11 октября 2026
    AI-инструментыClaude CodeDevOps+ 1middleИконка уровня middle

    CLAUDE.md: как написать инструкции для Claude Code

    CLAUDE.md — это файл с инструкциями по проекту, который Claude Code читает в начале каждой сессии. Положите его в корень репозитория и опишите внутри, чем проект собирается, чем запускаются тесты и каких соглашений держаться в коде. После этого агент перестанет спрашивать одно и то же в каждом новом диалоге и предлагать решения, которые в вашей кодовой базе не приняты. Формат предельно простой: обычный Markdown, обязательных полей нет, заголовки любые. Дальше — где именно создавать файл и как Claude Code собирает инструкции сразу из нескольких мест, что писать внутрь, как подключать к файлу другие документы и чем CLAUDE.md отличается от AGENTS.md. Одна оговорка перед началом: Claude Code обновляется часто, набор команд и поддерживаемых файлов пополняется. Если какая-то деталь ниже ведёт себя у вас иначе, сверяйтесь с документацией той версии, которая стоит у вас.

    Иконка чипа0
    Иконка глаза646
    Иконка комментариев0
    Иконка аватараАнтон
    Иконка календаря10 октября 2026
    AI-инструментыClaude CodeDevOps+ 2middleИконка уровня middle

    Агенты в OpenCode: как создать своего агента

    Агент в OpenCode — это именованный профиль работы: своя модель, свой системный промпт и свой список разрешённых инструментов. Чтобы создать своего агента, нужно описать его отдельным markdown-файлом в папке `.opencode/agent/` внутри проекта (или в `~/.config/opencode/agent/`, если агент нужен во всех проектах) либо объявить его в блоке `agent` файла `opencode.json`. После этого агент появляется в списке доступных, и его можно вызвать прямо в сессии.

    Иконка чипа0
    Иконка глаза1 062
    Иконка комментариев0
    Иконка чипа0