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

Создание первого 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, логи и т.д.) — это ускоряет сборку и уменьшает образ.

Подготовьте простой 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 .
Проверьте список образов
После успешной сборки убедитесь, что образ появился:
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).
Мини-методика проверки образа
- Собрать образ локально: sudo docker build -t myapp:dev .
- Запустить контейнер и проверить логи: sudo docker run –rm myapp:dev
- Просканировать образ на уязвимости.
- Протестировать поведение в staging (в том же окружении, где будет продакшен).
- Запушить в реестр и пометить релизный тег.
Критерии приёмки
- Образ собирается без ошибок из указанного 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.
Важно: всегда тестируйте образ в окружении, максимально близком к продакшену.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone