Создание Docker образа пошаговое руководство

Как создать docker образ

Как создать docker образ

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 образа выполняется с помощью команды docker build. Для указания пути к Dockerfile используют опцию -f, а для присвоения имени и тега – -t:

docker build -f Dockerfile -t myapp:1.0 .

Рекомендации при сборке образа:

  • Используйте семантические теги: 1.0, 1.0.1, latest.
  • Разделяйте стадии сборки с помощью многоступенчатых Dockerfile для уменьшения размера итогового образа.
  • Собирайте образ из актуального контекста проекта, проверяя наличие всех необходимых файлов.

Пошаговый пример сборки:

  1. Перейдите в директорию с Dockerfile: cd /path/to/project
  2. Выполните команду сборки: docker build -t myapp:1.0 .
  3. Проверьте наличие образа: 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, чтобы проверить корректность конфигурации.

Ссылка на основную публикацию