Что такое Docker? Контейнеры простыми словами для не-программистов
Docker — это инструмент, который упаковывает приложение вместе со всем, что нужно для его работы: нужной версией языка, библиотеками, системными утилитами и настройками, — в стандартную единицу под названием контейнер. Контейнер работает одинаково на ноутбуке разработчика, на тестовом сервере или в облаке, что решает классическую проблему «но у меня-то работало». Рецепт сборки контейнера — это короткий текстовый файл под названием Dockerfile.
Почему Docker важен, когда вы создаёте приложение с ИИ
Если у вашего приложения есть бэкенд — API на Python, Node, C# или Java, — он должен работать там, где установлено точно нужное программное обеспечение. Docker — самый распространённый способ сделать это повторяемым.
- Развёртывание бэкендов. Многие хостинги, включая Mythex, развёртывают бэкенды, собирая контейнер из Dockerfile. В Mythex, если попросить «C# Web API» или «Java-бэкенд», вы получаете приложение и Dockerfile, а публикация собирает образ и разворачивает его (API-бэкенды).
- Переезд с платформы. Если вы экспортируете приложение, созданное с ИИ, Dockerfile существенно упрощает запуск на другом хостинге. См. как экспортировать и развернуть у себя приложение, созданное с ИИ.
- Работа с разработчиками. Разработчик, который присоединяется к проекту, может запустить всё приложение одной-двумя командами, а не тратить день на установку всего.
Бытовая аналогия: морские контейнеры
До появления стандартных морских контейнеров грузы загружали по частям — мешки, бочки, ящики — и каждый порт обрабатывал их по-своему. Стандартный стальной контейнер всё изменил: его упаковали один раз, и любой корабль, кран, поезд или грузовик может перевезти его, не важно, что внутри.
Docker делает то же самое для программ:
- Dockerfile — это упаковочный лист и инструкция.
- Образ — это запечатанный, упакованный контейнер.
- Запущенный контейнер — это тот же ящик, который работает на корабле, то есть на сервере.
- Docker Engine — это кран и судно: программа на сервере, которая умеет запускать любой контейнер.
Как работает Docker
| Компонент | Что это |
|---|---|
| Dockerfile | Текстовый файл с пошаговыми инструкциями для сборки образа. |
| Образ (image) | Пакет только для чтения: базовые части операционной системы, среда выполнения, библиотеки и ваш код. |
| Контейнер | Запущенный экземпляр образа, изолированный от других приложений на той же машине. |
| Реестр (registry) | Место для хранения и обмена образами, например Docker Hub или реестр облачного провайдера. |
| Docker Engine | Фоновая служба, которая собирает образы и запускает контейнеры. Бесплатна и с открытым исходным кодом. |
| Docker Desktop | Приложение для Mac, Windows и Linux, которое объединяет движок с графическим интерфейсом. |
Контейнеры против виртуальных машин: виртуальная машина притворяется отдельным полноценным компьютером со своей операционной системой, поэтому она тяжёлая и медленно запускается. Контейнер использует ядро системы хоста и изолирует только приложение и его файлы, поэтому обычно запускается за секунды и расходует гораздо меньше памяти. На одном сервере может работать много контейнеров одновременно.
Пример: небольшой API на Python
Допустим, ваш ИИ-конструктор создал бэкенд на Python FastAPI для приложения записи. Dockerfile может выглядеть так:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Построчно:
| Строка | Что делает |
|---|---|
FROM python:3.12-slim | Начинаем с официального образа, в котором уже установлен Python 3.12. |
WORKDIR /app | Работаем внутри папки /app в контейнере. |
COPY requirements.txt . и RUN pip install ... | Копируем список библиотек и устанавливаем их. |
COPY . . | Копируем код самого приложения. |
EXPOSE 8000 | Отмечаем, что приложение слушает порт 8000. |
CMD [...] | Команда, которая запускает веб-сервер при старте контейнера. |
Простыми словами: «Возьми Python 3.12. Установи библиотеки из requirements.txt. Скопируй код. Запусти веб-сервер на порту 8000».
Потом разработчик (или платформа хостинга) выполняет две команды:
docker build -t booking-api .
docker run -p 8000:8000 booking-api
Первая собирает образ и называет его booking-api. Вторая запускает контейнер и соединяет порт 8000 на машине с портом 8000 внутри контейнера. API теперь работает — так же, как будет работать на любом сервере с Docker.
Обратите внимание, чего в образе нет: паролей и API-ключей. Их передают при запуске контейнера как переменные окружения, поэтому один и тот же образ может работать в тестовой и в боевой среде с разными настройками.
Ключевые термины
| Термин | Значение |
|---|---|
| Контейнер | Изолированный, запущенный пакет приложения и его зависимостей. |
| Образ | Шаблон, из которого запускается контейнер. |
| Базовый образ | Отправная точка в строке FROM Dockerfile, например python:3.12-slim или node:22. |
| Слой (layer) | Каждый шаг Dockerfile добавляет кэшируемый слой, что ускоряет пересборку. |
| Проброс портов (port mapping) | Соединение порта хост-машины с портом внутри контейнера. |
| Том (volume) | Хранилище, которое переживает замену контейнера. Сами контейнеры одноразовые. |
| Docker Compose | Файл, описывающий несколько контейнеров, которые работают вместе, например API и базу данных. |
| Kubernetes | Система для запуска множества контейнеров на множестве серверов. Небольшим приложениям обычно не нужна. |
Распространённые заблуждения
- «Docker — это виртуальная машина». Он легче: контейнеры используют ядро хоста.
- «Данные внутри контейнера в безопасности». Контейнеры задуманы как одноразовые и заменяемые. Всё, что должно сохраняться — данные пользователей, загрузки, — хранится в базе данных, файловом хранилище или томе.
- «Хранить секреты в Dockerfile нормально, ведь он приватный». Образы передаются и загружаются в реестры. Передавайте секреты во время запуска.
- «Docker делает приложение безопасным». Изоляция помогает, но контейнер с устаревшим ПО и слабыми настройками всё равно уязвим.
- «Каждому приложению нужен Docker». Статичный сайт или простой фронтенд обычно публикуются как обычные файлы, без всякого контейнера.
- «Docker Desktop бесплатен для всех». Движок бесплатен; Docker Desktop требует платной подписки для крупных компаний, согласно условиям Docker.
Что спросить у вашего ИИ-конструктора
- «Нужен ли этому приложению Dockerfile? Если да, объясни каждую строку простым языком».
- «Используй небольшой официальный базовый образ и зафиксируй версию языка».
- «Держи секреты вне образа. Читай их из переменных окружения во время запуска».
- «Убедись, что загрузки и данные хранятся в базе данных или файловом хранилище, а не внутри контейнера».
- «Добавь файл Docker Compose, чтобы разработчик мог запустить фронтенд, API и базу локально одной командой».
- «Добавь эндпоинт проверки работоспособности, чтобы хостинг мог понять, работает ли API».
Docker в Mythex
Чтобы пользоваться Mythex, Docker устанавливать и запускать не нужно. Ваш проект работает в закрытой облачной песочнице, а когда вы просите бэкенд, которому нужен контейнер — например на C#, Java или собственный сервис на Node или Python, — Mythex пишет приложение и Dockerfile, показывает его в песочнице и разворачивает при публикации, без какой-либо настройки хостинга (как выбирается технология). На Pro можно экспортировать проект или синхронизировать его с GitHub и забрать Dockerfile с собой. О том, как бэкенды и фронтенды сочетаются между собой, см. фронтенд и бэкенд.
Вопросы
Что такое Docker простыми словами?
Docker — это инструмент, который упаковывает приложение вместе со всем, что нужно для работы: средой выполнения языка, библиотеками и настройками, — в стандартную единицу под названием контейнер. Контейнер работает одинаково на ноутбуке, тестовом сервере или облачном хостинге.
В чём разница между образом Docker и контейнером?
Образ — это упакованный шаблон только для чтения: приложение и его зависимости, собранные по Dockerfile. Контейнер — это запущенная копия образа. Из одного образа можно запустить много контейнеров.
Docker — это виртуальная машина?
Нет. Виртуальная машина эмулирует целый компьютер со своей операционной системой. Контейнеры используют ядро операционной системы хост-машины и изолируют только приложение, поэтому запускаются быстрее и расходуют меньше памяти.
Docker бесплатный?
Docker Engine, ядро, которое запускает контейнеры, бесплатно и имеет открытый исходный код. По условиям Docker на сентябрь 2026 года Docker Desktop бесплатен для некоммерческих проектов с открытым кодом и для компаний с менее чем 250 сотрудниками и годовой выручкой меньше 10 миллионов долларов; крупным компаниям нужна платная подписка.
Нужно ли изучать Docker, чтобы создавать приложение с ИИ?
Обычно нет. Многие ИИ-конструкторы сами занимаются контейнерами. Полезно знать, что такое Dockerfile, чтобы понимать, как упаковывается бэкенд, и чтобы при экспорте можно было запустить приложение на другом хостинге.