К содержанию

Wiki · Технологии разработки

Docker

Docker – это платформа, которая упаковывает приложение вместе со всем, что ему нужно для работы, в контейнер. Такой контейнер одинаково запускается на ноутбуке разработчика, на тестовом и на рабочем сервере.

Знакомая ситуация: подрядчик сдаёт доработку, на тестовой копии всё работает, а после выкладки на боевой сайт ломается форма заказа. Причина часто банальная: на сервере другая версия PHP или не установлено нужное расширение. Docker закрывает этот класс ошибок. Окружение описывают один раз в файле, и дальше оно собирается одинаково везде.

Docker развивает компания Docker, Inc. Публично его впервые показали 15 марта 2013 года на конференции PyCon. Движок Docker Engine открытый, его код развивается в проекте Moby, а изоляцию контейнеров дают механизмы ядра Linux.

Образ, контейнер и реестр

В Docker три основных понятия.

  • Образ (image). Шаблон только для чтения: минимальная операционная система, PHP нужной версии, расширения, код сайта. Его собирают по инструкции из файла Dockerfile.
  • Контейнер. Запущенный экземпляр образа. Из одного образа запускают сколько угодно одинаковых контейнеров.
  • Реестр. Хранилище готовых образов. Самый известный публичный реестр называется Docker Hub, свой частный можно завести, например, в GitLab или Yandex Cloud.

Dockerfile для простого PHP-сайта занимает несколько строк:

FROM php:8.2-apache
RUN docker-php-ext-install pdo_mysql
COPY . /var/www/html/

Первая строка берёт готовый образ с PHP 8.2 и веб-сервером Apache, вторая добавляет расширение для работы с MySQL, третья копирует файлы сайта. Файл лежит в репозитории рядом с кодом, и окружение не приходится восстанавливать по памяти администратора.

Обратите внимание на тег php:8.2-apache: версия указана точно. С тегом latest через полгода сборка подтянет другой PHP, и сайт сломается так же, как без Docker. Пароли и ключи доступа в Dockerfile тоже не пишут: они попадают в образ и расходятся вместе с ним.

Схема работы Docker: из Dockerfile собирают образ, кладут его в реестр и запускают контейнер на сервере с тем же окружением, что у разработчика
Как код попадает на сервер

Контейнер и виртуальная машина

Виртуальная машина везёт с собой целую операционную систему со своим ядром. Контейнеры на одном сервере делят общее ядро и при этом изолированы друг от друга. Поэтому контейнер запускается за секунды и тратит меньше ресурсов.

Контейнер DockerВиртуальная машинаУстановка прямо на сервер
Что внутриПриложение и его зависимостиПолная ОС со своим ядромВсё ставится в систему сервера
ЗапускСекундыДольше, грузится вся ОССайт работает постоянно
Для каких задачПроекты из нескольких сервисов, частые выкладки, одинаковые средыРазные ОС на одном железе, сильная изоляцияНебольшой сайт на CMS, готовое окружение хостинга

На обычном виртуальном хостинге Docker, как правило, не запустить: нужен VPS или выделенный сервер. Про виды хостинга подробно в статье Хостинг. Лендингу или небольшому сайту на CMS контейнеры часто не нужны вовсе: ему хватит обычного хостинга с подходящими версиями PHP и базы.

Docker Compose: когда контейнеров несколько

Сайт редко состоит из одного сервиса. Обычно это веб-сервер, PHP, база данных, иногда Redis для кеша. Docker Compose описывает всю связку в одном файле compose.yaml и поднимает её одной командой:

docker compose up -d

Новый человек в команде запускает проект у себя за минуты, а не за день настройки. Для вас это значит, что проект меньше зависит от одного конкретного специалиста.

Базу данных и загруженные пользователями файлы в такой связке выносят в тома (volumes), которые живут отдельно от контейнеров. Всё, что записано только внутрь контейнера, пропадёт при его пересоздании.

Что Docker меняет в поддержке сайта

  • Тестовая и рабочая версии собираются из одного описания, ошибок «у меня работало» меньше.
  • Переезд на другой сервер проще: переносят образы, данные и файл с настройками.
  • Неудачное обновление откатывают запуском прошлой версии образа.
  • Нужен специалист, который понимает Docker. Если подрядчик уйдёт, без такого человека поддерживать проект будет трудно.
  • Образы тоже надо обновлять: в старых базовых образах находят уязвимости.

Сколько стоит Docker и где держать образы

Docker Engine, который работает на сервере, распространяется как открытое ПО. Docker Desktop, программа для компьютеров разработчиков, на октябрь 2026 года бесплатна для личного использования, обучения и компаний, где меньше 250 сотрудников и годовая выручка меньше 10 млн долларов. Крупной компании нужна платная подписка. Условия доступа к Docker Hub для России уточняйте у Docker, а образы проекта надёжнее держать в своём реестре.

Docker и 1С-Битрикс

Для сайтов на 1С-Битрикс долго стандартом было готовое окружение BitrixVM. В июне 2025 года «1С-Битрикс» выпустила официальный репозиторий с контейнерами для своих продуктов, так что у платформы появился и официальный путь через Docker.

BitrixVM при этом никуда не делась. Её ставят на чистый VPS, по документации на октябрь 2026 года подходят CentOS Stream 9, Rocky Linux 9, AlmaLinux 9 и Oracle Linux 9. Если остальные проекты команды уже живут в контейнерах, официальный вариант через Docker избавит от второго способа администрирования.

Как узнать, использует ли проект Docker

Загляните в репозиторий проекта (что это такое, рассказываем в статье про Git). Если в корне лежат файлы Dockerfile, compose.yaml или docker-compose.yml, проект собран в контейнерах. На сервере это покажет команда docker ps: она выводит список запущенных контейнеров. Проще всего спросить подрядчика.

Чек-лист вопросов подрядчику о проекте на Docker: файлы описания, список контейнеров, хранение данных, версии образов, реестр и обновления
Что спросить у подрядчика про Docker

Если проект уже работает на Docker, берём его на доработку и техническую поддержку. Новый проект можно заказать в разделе Разработка сайтов.

Установка, запуск, данные и пароли в Docker

Как установить Docker на компьютер и на сервер?

На Windows и macOS ставят Docker Desktop, на Windows он работает поверх WSL 2. На Linux-сервер, например с Ubuntu, устанавливают Docker Engine из официального репозитория Docker по инструкции для своего дистрибутива. Перед установкой Desktop в компании сверьтесь с условиями лицензии: бесплатна она не для всех.

Как запустить контейнер или весь проект из compose.yaml?

Один контейнер запускают командой docker run с именем образа. Проект из нескольких сервисов поднимают в папке с compose.yaml командой docker compose up, ключ -d оставляет его работать в фоне. Убедиться, что всё поднялось, поможет docker ps.

Где Docker хранит образы, контейнеры и данные томов?

На Linux-сервере всё лежит в /var/lib/docker, тома в подпапке volumes. Править файлы там вручную не стоит, а в резервную копию тома включают обязательно: в них база и загрузки сайта. Docker Desktop на Windows и Mac держит те же данные внутри своей виртуальной машины.

Как посмотреть логи контейнера?

Командой docker logs с именем контейнера, а с ключом -f вывод будет обновляться в реальном времени. Для всех сервисов из compose.yaml сразу есть docker compose logs.

Как обновить Docker и образы проекта?

Сам Docker Engine на сервере обновляют пакетным менеджером системы, как любую программу. С образом иначе: меняют версию в Dockerfile или compose.yaml, пересобирают и пересоздают контейнер. Данные в томах при этом сохраняются, а прошлый образ оставляют, чтобы при проблеме быстро вернуться назад.

Чем Docker отличается от Kubernetes?

Docker собирает образы и запускает контейнеры на одной машине. Kubernetes управляет контейнерами на многих серверах: раскладывает нагрузку, перезапускает упавшие, добавляет копии при росте трафика. Обычному сайту хватает Docker с Compose, Kubernetes нужен крупным системам из множества сервисов.

Зачем Docker, если сайт и так работает на хостинге?

Чтобы окружение перестало быть тайной одного администратора. Версии PHP, расширения и настройки записаны в файле и одинаково собираются у разработчика, на тесте и на боевом сервере, а переезд сводится к переносу образов и данных. Если же над сайтом работает один человек и выкладки редкие, обычный хостинг проще и дешевле в поддержке.

Где хранить пароли от базы, если не в Dockerfile?

Передавать при запуске через переменные окружения. В Compose их удобно держать в файле .env рядом с compose.yaml, но сам файл в репозиторий не кладут, там лежит только пример без значений. Для особо чувствительных ключей у Compose есть секреты, которые не попадают в образ.

Почему после пересоздания контейнера пропали загруженные файлы?

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

Чем Docker Desktop отличается от Docker Engine?

Engine это сам движок, который запускает контейнеры, он открытый и работает на серверах, обычно под Linux. Desktop это программа для компьютеров разработчиков с графическим интерфейсом, внутри неё тот же движок в небольшой виртуальной машине. Ограничения лицензии касаются именно Desktop.

Документация Docker и новость 1С-Битрикс

  • Docker Docs: What is Docker?
  • Docker Docs: What is a container?
  • Docker Docs: Docker Desktop license agreement
  • Блог Docker: Docker: Nine Years YOUNG
  • 1С-Битрикс: новость «Продукты 1С-Битрикс теперь можно запустить в докер-контейнерах»

См. также: Хостинг, CMS, Linux, Git.

Остались вопросы по теме «Docker»?

Напишите нам в Telegram или MAX. Ответит специалист, который отвечает за эту тему, или руководитель проектов в рабочее время.

Сергей ЧерняковОтвечает по темеСергей ЧерняковWeb-разработчик

Посчитайте стоимость проекта за 2 минуты

Калькулятор соберёт смету по нашим тарифам: сайт, дизайн, интеграции и поддержка.