
Docker образ представляет собой готовый к использованию пакет, включающий приложение и все необходимые зависимости. Для его создания требуется Dockerfile – текстовый файл с инструкциями по сборке, который можно хранить в системе контроля версий и использовать для автоматизации сборки образов.
Процесс создания образа начинается с выбора базового образа. Например, для Python-приложений обычно используют python:3.11-slim, что позволяет уменьшить размер конечного образа и ускорить сборку. Важно учитывать версию операционной системы и совместимость с необходимыми библиотеками.
Следующий шаг – настройка окружения внутри образа. Рекомендуется задавать переменные среды через ENV в Dockerfile и копировать только нужные файлы, чтобы сократить размер образа. Для зависимостей используйте отдельный файл, например requirements.txt для Python, и устанавливайте пакеты с указанием конкретных версий.
После настройки файлов и зависимостей образ собирается командой docker build. Для удобства сборки можно использовать теги, указывая имя и версию образа, например myapp:1.0. Теги упрощают управление версиями и обновлениями при работе с контейнерами.
Тестирование образа проводится путем запуска контейнера через docker run и проверки работы приложения в контейнере. Важно убедиться, что все зависимости корректно установлены и приложение выполняется без ошибок перед публикацией образа в локальный или удаленный репозиторий.
Установка Docker и проверка работы
Для установки Docker на Windows 10 и выше рекомендуется использовать Docker Desktop. Скачайте последнюю версию с официального сайта Docker и запустите установочный файл. Во время установки активируйте опцию интеграции с WSL 2, если планируется работа через Linux-подсистему.
На Linux-дистрибутивах установка выполняется через пакетный менеджер. Например, в Ubuntu используйте команды: sudo apt update, sudo apt install docker.io. После установки добавьте пользователя в группу docker, чтобы запускать контейнеры без прав root: sudo usermod -aG docker $USER. Перезайдите в систему для применения изменений.
Если тестовый контейнер не запускается, проверьте статус сервиса Docker. На Windows через меню Docker Desktop, на Linux: sudo systemctl status docker. В случае ошибок обновите драйверы виртуализации и убедитесь, что WSL 2 или поддержка Hyper-V активированы.
Создание Dockerfile с базовым образом
Для начала работы с Docker необходимо выбрать базовый образ. Он задаёт среду, на которой будет строиться ваш контейнер. Например, для Python-проектов подойдёт python:3.12-slim, а для Node.js – node:20-alpine. Базовый образ указывается первой строкой Dockerfile с помощью инструкции FROM:
FROM python:3.12-slim
После указания базового образа рекомендуется обновить пакеты и установить необходимые зависимости. Для Debian/Ubuntu-образов это делается так:
RUN apt-get update && apt-get install -y build-essential libssl-dev
Для Node.js и Alpine часто используют пакетный менеджер apk:
RUN apk add --no-cache git curl
Далее следует указать рабочую директорию контейнера через WORKDIR:
WORKDIR /app
Чтобы добавить исходный код проекта, используют COPY:
COPY . /app
Для автоматической установки зависимостей применяют инструкции RUN с менеджером пакетов проекта, например, для Python:
RUN pip install --no-cache-dir -r requirements.txt
Для Node.js:
RUN npm install
Последний шаг – указание команды, которая будет выполняться при запуске контейнера, через CMD или ENTRYPOINT:
CMD ["python", "app.py"]
Правильная структура Dockerfile с базовым образом упрощает сборку, снижает размер контейнера и ускоряет процесс развертывания. Минимизируйте количество слоёв и объединяйте команды RUN через &&, чтобы уменьшить размер итогового образа.
Добавление файлов и настройка окружения в образе
Для добавления файлов в образ используется инструкция COPY или ADD. COPY копирует файлы из контекста сборки в контейнер без дополнительных действий, ADD поддерживает распаковку архивов и работу с URL:
COPY requirements.txt /app/
ADD archive.tar.gz /app/
Рабочую директорию задают через WORKDIR, чтобы все последующие команды выполнялись в нужной папке:
WORKDIR /app
Переменные окружения определяют с помощью ENV. Это удобно для конфигурации приложения, путей к файлам и ключей:
ENV DATABASE_URL=postgres://user:pass@db:5432/app
Для установки системных переменных используйте одну инструкцию ENV с несколькими значениями через пробел:
ENV PATH="/app/bin:$PATH" NODE_ENV=production
Для временных файлов и кэша применяют RUN с очисткой после установки зависимостей, чтобы уменьшить размер образа:
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
Проверку добавленных файлов и переменных можно выполнить через RUN ls -la /app или RUN echo $DATABASE_URL, чтобы убедиться, что окружение настроено корректно до финальной сборки образа.
Установка зависимостей и библиотек внутри образа
Установка зависимостей в Docker образе выполняется через инструкции RUN с пакетными менеджерами соответствующей системы. Для Debian/Ubuntu используют apt-get, для Alpine – apk, для CentOS – yum.
Примеры команд для разных базовых образов:
| Базовый образ | Команда установки зависимостей |
|---|---|
| python:3.12-slim (Debian) | RUN apt-get update && apt-get install -y build-essential libssl-dev libffi-dev && rm -rf /var/lib/apt/lists/* |
| node:20-alpine | RUN apk add --no-cache git curl make g++ python3 |
| centos:8 | RUN yum install -y gcc gcc-c++ make openssl-devel && yum clean all |
Для Python-зависимостей после копирования файла requirements.txt используют:
RUN pip install --no-cache-dir -r requirements.txt
Для Node.js после копирования package.json и package-lock.json выполняют:
RUN npm install --production
Объединяйте команды установки через &&, чтобы уменьшить количество слоёв и итоговый размер образа. После установки системных пакетов удаляйте кеш и временные файлы, чтобы контейнер оставался компактным.
Сборка Docker образа и присвоение тега

Сборка Docker образа выполняется с помощью команды docker build. Для указания пути к Dockerfile используют опцию -f, а для присвоения имени и тега – -t:
docker build -f Dockerfile -t myapp:1.0 .
Рекомендации при сборке образа:
- Используйте семантические теги:
1.0,1.0.1,latest. - Разделяйте стадии сборки с помощью многоступенчатых Dockerfile для уменьшения размера итогового образа.
- Собирайте образ из актуального контекста проекта, проверяя наличие всех необходимых файлов.
Пошаговый пример сборки:
- Перейдите в директорию с Dockerfile:
cd /path/to/project - Выполните команду сборки:
docker build -t myapp:1.0 . - Проверьте наличие образа:
docker images
Для тестирования собранного образа используйте запуск контейнера:
docker run --rm -it myapp:1.0
Если необходимо создать несколько тегов для одного образа, используйте повторное присвоение тегов:
docker tag myapp:1.0 myapp:latest
Присвоение тегов позволяет управлять версиями и упрощает деплой на разных окружениях.
Тестирование и запуск созданного образа

Для проверки работоспособности собранного образа используют команду docker run. Она позволяет запустить контейнер и проверить выполнение приложения:
docker run --rm -it myapp:1.0
Опции команды:
- —rm – автоматически удаляет контейнер после остановки.
- -it – подключает терминал для интерактивной работы.
Для тестирования сетевых приложений открывают порты с помощью -p:
docker run --rm -p 8080:80 myapp:1.0
Проверку состояния контейнера выполняют через:
docker ps – список запущенных контейнеров.
Если приложение зависит от внешних сервисов, используйте Docker Compose или указывайте переменные окружения:
docker run --rm -e DATABASE_URL=postgres://user:pass@db:5432/app myapp:1.0
После успешного тестирования образ можно пометить тегом latest или версионным тегом для деплоя:
docker tag myapp:1.0 myapp:latest
Тестирование перед деплоем позволяет выявить ошибки конфигурации, проверить установленные зависимости и корректность работы приложения в контейнере.
Вопрос-ответ:
Что такое базовый образ Docker и как его выбрать для проекта?
Базовый образ Docker задаёт исходную систему для контейнера. Его выбирают исходя из требуемого окружения и размера. Например, для Python-проекта часто используют python:3.12-slim, для Node.js — node:20-alpine. Slim и Alpine образы минимальны, содержат только нужные пакеты, что уменьшает размер контейнера.
Какая разница между инструкциями COPY и ADD в Dockerfile?
COPY просто копирует файлы из контекста сборки в контейнер, без обработки. ADD может распаковывать архивы и работать с URL. Для обычных файлов предпочтительнее использовать COPY, чтобы избежать лишних действий и увеличения слоёв образа.
Как установить зависимости и библиотеки внутри Docker образа?
Для Debian/Ubuntu используют apt-get, для Alpine — apk, для CentOS — yum. Системные пакеты объединяют через && и очищают кеш после установки, чтобы уменьшить размер образа. Для языковых зависимостей используют менеджеры пакетов проекта: pip install -r requirements.txt для Python и npm install для Node.js.
Как присвоить тег Docker образу и зачем это нужно?
Тег присваивается командой docker build -t имя_образа:тег .. Теги помогают различать версии образа, например 1.0, latest. Один образ может иметь несколько тегов через команду docker tag, что упрощает управление версиями при деплое и тестировании.
Какие способы есть для тестирования и запуска созданного образа?
Запуск осуществляется через docker run с опциями -it для интерактивного терминала и —rm для автоматического удаления контейнера после остановки. Порты открывают через -p. Логи проверяют командой docker logs , а состояние контейнеров — docker ps. Для приложений с внешними сервисами используют переменные окружения через -e.
Как правильно выбрать базовый образ для Docker контейнера?
Базовый образ задаёт начальное окружение для контейнера. Выбор зависит от языка программирования и требований к системе. Для Python подходят образы python:3.12-slim или python:3.12-alpine, для Node.js — node:20-alpine. Slim и Alpine версии минимальны, содержат только необходимые пакеты, что уменьшает размер контейнера и ускоряет сборку.
Как проверить работу Docker образа после сборки?
После сборки образа его проверяют через docker run. Для интерактивного теста используют docker run --rm -it имя_образа:тег. Если приложение слушает порты, их открывают через -p, например -p 8080:80. Логи проверяют командой docker logs , а список запущенных контейнеров — docker ps. Переменные окружения передают через -e, чтобы проверить корректность конфигурации.
