Гид по технологиям

Как создать первый Docker-образ из Dockerfile

5 min read Контейнеризация Обновлено 04 Dec 2025
Первый Docker-образ из Dockerfile — пошагово
Первый Docker-образ из Dockerfile — пошагово

Кратко: напишите Dockerfile — последовательность инструкций для сборки образа, выполните команду docker build, проверьте образ и запустите контейнер. В статье показаны исправленные примеры команд, шаблон Dockerfile для Python, рекомендации по безопасности, чек-листы для разработчика и оператора и раздел с часто задаваемыми вопросами.

Создание Docker-образа — иллюстрация процесса

Создание первого Docker-образа из Dockerfile похоже на написание рецепта: вы описываете шаги, которые Docker выполнит для сборки автономного пакета приложения. Dockerfile указывает базовый образ, копирует код, устанавливает зависимости и определяет команду запуска. Docker читает этот файл и создаёт образ, который одинаково запускается на любой системе, где установлен Docker — это избавляет от ручной настройки окружения на каждом сервере.

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

Что такое Docker-образ

Docker-образ — это самодостаточный пакет, включающий код приложения, runtime, библиотеки и зависимости. Образ гарантирует одинаковое поведение приложения в разных окружениях и упрощает деплой.

Что такое Dockerfile

Dockerfile — это текстовый файл с набором команд (DSL), которые Docker выполняет строго сверху вниз, формируя итоговый образ. Dockerfile является исходником образа: изменив его, вы определяете новую версию окружения.

Краткое определение: Dockerfile — это пошаговый сценарий сборки образа.

Пример: шаги создания Docker-образа для простого Python-приложения

Ниже показан базовый рабочий пример: создайте Dockerfile в папке проекта и файл с простым Python-скриптом. В объяснениях приведены варианты улучшений (микрооптимизация, безопасность, multi-stage).

Создайте Dockerfile

Откройте редактор в каталоге проекта:

nano Dockerfile

Важно: Docker по умолчанию ищет файл с именем Dockerfile в контексте сборки. Если вы используете другое имя — укажите его через флаг -f.

Пример корректного Dockerfile для Python

FROM ubuntu:latest
WORKDIR /usr/src/app
COPY . .
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*
CMD ["python3", "mteScript.py"]

Объяснение инструкций:

  • FROM: базовый образ (можно выбрать alpine для меньшего размера).
  • WORKDIR: рабочая директория внутри контейнера.
  • COPY . .: копирует файлы из контекста сборки в образ.
  • RUN: выполняет команды на этапе сборки (здесь установка пакетов); очищаем кеш apt, чтобы уменьшить размер образа.
  • CMD: команда по умолчанию при запуске контейнера.

Важно: используйте .dockerignore, чтобы исключить лишние файлы из контекста сборки (node_modules, .git, логи и т.д.) — это ускоряет сборку и уменьшает образ.

Добавление инструкций в Dockerfile — пример

Подготовьте простой Python-скрипт

Создайте файл mteScript.py в той же папке:

def message():
    print("Hi Geeks! Welcome to maketecheasier.com")

if __name__ == "__main__":
    message()

Этот скрипт служит для проверки: при запуске контейнера вы должны увидеть строку в выводе.

Соберите Docker-образ

Запустите команду сборки. Обратите внимание на пробел после sudo:

sudo docker build -t python-docker-demo .

Если Dockerfile имеет нестандартное имя, укажите его явно:

sudo docker build -f ExampleDockerfile -t python-docker-demo .

Сборка Docker-образа — вывод команды

Проверьте список образов

После успешной сборки убедитесь, что образ появился:

sudo docker images

Запустите контейнер для теста

Чтобы проверить работу образа локально:

sudo docker run --rm python-docker-demo

Флаг –rm удаляет контейнер после завершения; полезно для тестов.

Частые ошибки и как их избежать

  • Неправильный контекст сборки: команда docker build берёт файлы из текущей директории или указанного пути. Убедитесь, что Dockerfile и файлы приложения находятся в нужном контексте.
  • Забыт .dockerignore: большие контексты замедляют сборку и приводят к большим образам.
  • Неправильные инструкции RUN: объединяйте apt-get update и install в одну команду и очищайте кеш.
  • Отсутствие версий зависимостей: фиксируйте версии, чтобы сборки были детерминированы.

Альтернативные подходы и улучшения

  • Alpine вместо Ubuntu: используйте alpine-образы для уменьшения размера, но проверьте совместимость бинарных зависимостей.
  • Многоступенчатая сборка (multi-stage): полезна для сборки артефактов в одном образе и копирования только результатов в финальный лёгкий образ.
  • Buildx и кросс-компиляция: для сборки multi-arch образов используйте docker buildx.
  • CI/CD: автоматизируйте сборку и пуш в реестр (Docker Hub, GitHub Container Registry, приватный реестр) в пайплайне.

Безопасность и рекомендации по хардению

  • Минимизируйте базовый образ: меньше пакетов — меньше уязвимостей.
  • Сканы уязвимостей: интегрируйте сканеры (например, Trivy) в CI.
  • Запускайте процессы с непривилегированным пользователем внутри контейнера (USER).
  • Не храните секреты в образе и не передавайте их в Dockerfile с ENV; используйте секреты на уровне оркестратора или CI.

Чек-листы по ролям

Разработчик:

  • Есть Dockerfile с рабочим CMD.
  • Добавлен .dockerignore.
  • Закреплены версии зависимостей.
  • Локальная сборка проходит без ошибок.

Оператор/инженер по доставке:

  • Образ проходит сканирование безопасности.
  • Образ залит в реестр с тегами релизов.
  • Настроен деплой в окружение (Compose/Kubernetes).

Мини-методика проверки образа

  1. Собрать образ локально: sudo docker build -t myapp:dev .
  2. Запустить контейнер и проверить логи: sudo docker run –rm myapp:dev
  3. Просканировать образ на уязвимости.
  4. Протестировать поведение в staging (в том же окружении, где будет продакшен).
  5. Запушить в реестр и пометить релизный тег.

Критерии приёмки

  • Образ собирается без ошибок из указанного Dockerfile.
  • Контейнер запускается и выполняет ожидаемую работу (smoke-test).
  • Образ прошёл базовое сканирование безопасности.
  • Размер образа и время сборки соответствуют целям команды.

Глоссарий — 1 строка на термин

  • Образ: неизменяемый артефакт, содержащий всё нужное для запуска приложения.
  • Контейнер: запущенный экземпляр образа.
  • Dockerfile: инструкция для сборки образа.
  • Контекст сборки: папка и её содержимое, откуда Docker читает файлы при сборке.

Типичные сценарии, когда этот подход не подходит

  • GUI-приложения с графическим интерфейсом, требующие сложной интеграции с хостовой X-сессией (хотя есть способы запуска GUI в контейнерах).
  • Требования к реальному оборудованию/специальным драйверам: контейнеры ограничены возможностями хоста.

Шаблоны и полезные команды (чек-лист команд)

  • Сборка: sudo docker build -t <репозиторий>/<имя>:<тег> .
  • Список образов: sudo docker images
  • Удаление образа: sudo docker rmi
  • Просмотр логов контейнера: sudo docker logs
  • Запуск с пробросом портов: sudo docker run -p 8080:80 –rm

Часто задаваемые вопросы

Как уменьшить размер образа?

Используйте лёгкие базовые образы (alpine), многоступенчатую сборку, удаляйте кеши и не копируйте ненужные файлы.

Можно ли собирать образ без sudo?

Да — если ваш пользователь в группе docker. Иначе sudo нужен для работы с daemon.

Как хранить секреты при сборке?

Не добавляйте секреты в Dockerfile. Используйте механизмы секретов CI/CD или runtime-секреты оркестратора.


Краткое резюме

Создание Docker-образа — это создание воспроизводимого окружения для вашего приложения. Начните с простого Dockerfile, корректно настраивайте контекст сборки и используйте .dockerignore. Улучшайте образ по мере роста: оптимизируйте размер, добавляйте проверки безопасности и интегрируйте сборку в CI/CD.

Важно: всегда тестируйте образ в окружении, максимально близком к продакшену.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство