Создание и запуск Docker-контейнера с MCP-сервером
Вы уже знаете, что такое Docker-образ и контейнер, и понимаете, зачем нужна изоляция приложений. Теперь пришло время применить эти знания на практике. Мы создадим настоящий Docker-контейнер с MCP-сервером — и этот контейнер можно будет запускать на любом компьютере, включая облачные серверы. Это ключевой шаг к независимому развёртыванию ваших ИИ-агентов.
Создание Dockerfile: рецепт для вашего MCP-сервера
Dockerfile — это текстовый файл, в котором пошагово описывается, как собрать образ вашего приложения. Его можно сравнить с кулинарным рецептом: вы указываете ингредиенты (базовый образ), добавляете продукты (файлы проекта), выполняете действия (установка зависимостей) и определяете, что будет готово к подаче (запуск сервера).
Вот пример Dockerfile для MCP-сервера на Python с использованием FastAPI:
# Базовый образ: официальный Python 3.11
FROM python:3.11-slim
# Устанавливаем рабочую директорию внутри контейнера
WORKDIR /app
# Копируем файл зависимостей
COPY requirements.txt .
# Устанавливаем зависимости
RUN pip install --no-cache-dir -r requirements.txt
# Копируем исходный код проекта
COPY . .
# Открываем порт 8000 для внешнего доступа
EXPOSE 8000
# Запускаем сервер при старте контейнера
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Каждая строка — это слой в образе. Docker кэширует их, что ускоряет последующие сборки.
💡 Совет: Всегда создавайте файл
.dockerignore, чтобы исключить ненужные файлы из образа (например,.env,__pycache__,.git). Это уменьшает размер и повышает безопасность.Пример
.dockerignore:.env __pycache__ .git .vscode
Сборка образа: превращаем Dockerfile в готовый образ
Когда Dockerfile готов, приходит время сборки образа. Этот процесс создаёт статический шаблон, из которого можно запускать контейнеры.
Выполните в терминале (в папке проекта):
docker build -t mcp-agent-python:latest .
docker build— команда для сборки-t mcp-agent-python:latest— задаёт имя и тег образа.— указывает, что контекст сборки — текущая директория
После завершения проверьте, что образ появился:
docker images
Вы увидите что-то вроде:
REPOSITORY TAG IMAGE ID CREATED SIZE
mcp-agent-python latest a1b2c3d4e5f6 2 minutes ago 280MB
⚠️ Типичная ошибка: забыть точку в конце команды. Без неё Docker не знает, где искать файлы.
Запуск контейнера: ваш MCP-сервер в коробке
Теперь запустим контейнер из собранного образа:
docker run -p 8000:8000 --name mcp-server mcp-agent-python:latest
-p 8000:8000— пробрасывает порт 8000 с хоста на порт 8000 в контейнере--name mcp-server— даёт контейнеру понятное имяmcp-agent-python:latest— имя образа
Если всё прошло успешно, вы увидите логи запуска FastAPI. Откройте http://localhost:8000 — должен открыться интерфейс сервера (например, Swagger, если он подключён).
Для запуска в фоне добавьте флаг -d:
docker run -d -p 8000:8000 --name mcp-server mcp-agent-python:latest
Жизненный цикл контейнера: управление, мониторинг и диагностика
Жизненный цей контейнера — это все этапы его существования: запуск, работа, остановка, перезапуск, удаление. Умение управлять им — ключ к стабильной работе.
Основные команды:
# Остановить контейнер
docker stop mcp-server
# Запустить остановленный контейнер
docker start mcp-server
# Перезапустить контейнер
docker restart mcp-server
# Просмотреть логи (очень важно для диагностики!)
docker logs mcp-server
# Просмотреть логи в реальном времени
docker logs -f mcp-server
# Удалить контейнер
docker rm mcp-server
# Удалить образ
docker rmi mcp-agent-python:latest
💡 Практический совет: Если сервер не отвечает — первое, что нужно сделать, — проверить логи. Ошибка в
requirements.txtили неправильный путь вCOPYпочти всегда видны в выводеdocker logs.
Бонус: краткий пример для TypeScript (Express.js)
Поскольку вы — фронтенд-разработчик, вот как может выглядеть Dockerfile для MCP-сервера на TypeScript:
FROM node:18-slim
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "dist/index.js"]
Сборка и запуск аналогичны — просто с другим именем образа.
Best practices 2025: надёжность и безопасность
- ✅ Используйте многоступенчатую сборку для уменьшения размера образа (особенно при сборке TypeScript).
- ✅ Запускайте приложение от non-root пользователя для безопасности.
- ✅ Передавайте API-ключи через переменные окружения:
docker run -e API_KEY=xxx ... - ✅ Убедитесь, что образ работает на ARM-архитектуре (актуально для M1/M2 и облачных ARM-инстансов).
Что дальше?
Теперь у вас есть полностью автономный MCP-сервер в контейнере. Вы можете запускать его локально, передавать коллегам или — что ещё важнее — развёртывать в облаке.
В следующей теме — Выбор и настройка облачного сервера — мы подготовим виртуальную машину, на которую вы сможете перенести этот самый контейнер. Это будет ваш первый шаг к публичному запуску ИИ-агента.
Вы уже видите, как близко к реальному продукту? Уже завтра вы сможете запустить своего агента в интернете и использовать его в своём стартапе.