Блог компании 3v-Hosting

Как создать собственный Docker образ

Администрирование

6 мин.


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

 

 


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

 

Docker образ по сути является снимком файловой системы, которая содержит все необходимое для запуска приложения: код, среду выполнения, библиотеки, переменные среды и файлы конфигурации. Образы Docker используются для создания контейнеров, которые являются изолированными средами, запускающими экземпляры этих образов. В процессе создания Docker образа вы берете существующий базовый образ (например, официальный образ Ubuntu или Node.js) и настраиваете его, чтобы включить зависимости вашего приложения, настройки среды и конфигурации.

 

 

 

Зачем создавать собственный Docker образ?

 

Создание собственного Docker образа дает несколько преимуществ, особенно при управлении несколькими средами или развертывании приложений на различных платформах. Пользовательский образ позволяет:

    - Включать только необходимые зависимости, уменьшая размер образа.
    - Стандартизировать среды разработки, тестирования и производства.
    - Сделать развертывание более эффективным и последовательным.
    - Оптимизировать производительность, настраивая конфигурации специально для вашего приложения.

Создание собственного Docker образа также повышает воспроизводимость, поскольку каждый член команды может работать с одной и той же средой, устраняя проблему «это работает на моей машине».

 

 

 

Шаги по созданию пользовательского Docker образа 

1. Выбор базового образа

Создание образа производится путем написания некой инструкции, скрипта, по которому будет создан будущий образ. Этот скрипт пишется в специализированном файле - Dockerfile. И первым шагом в создании своего Docker образа является выбор базового образа. Docker предоставляет широкий спектр официальных образов, включая операционные системы (например, Ubuntu, Alpine Linux) и среды разработки (например, Node.js, Python). Вы можете просмотреть репозиторий Docker Hub, чтобы найти подходящий базовый образ для вашего приложения.

Пример:

    FROM ubuntu:20.04

В этом примере мы создаем образ Docker на основе Ubuntu 20.04. Использование небольшого, эффективного базового образа — это наилучшая практика оптимизации образа Docker.

 

 

2. Создайте Dockerfile

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

Вот простой Dockerfile, который создает пользовательский образ для приложения Node.js:

    # Используйте официальную среду выполнения Node.js в качестве базового образа

    FROM node:14

    # Установите рабочий каталог в контейнере
    WORKDIR /usr/src/app

    # Скопируйте package.json и установите зависимости
    COPY package*.json ./
    RUN npm install

    # Скопируйте код приложения
    COPY . .

    # Раскройте порт приложения
    EXPOSE 8080

    # Определите команду для запуска приложения
    CMD ["node", "app.js"]

Этот пример иллюстрирует, как использовать инструкции Dockerfile для сборки и запуска образов Docker для приложения Node.js. Следуя этому подходу, вы можете настроить среду в соответствии с потребностями вашего приложения.

 

 

3. Сборка образа Docker

После того, как Dockerfile готов, следующим шагом будет сборка образа Docker с помощью команды docker build. Эта команда обрабатывает инструкции в Dockerfile и создает новый образ Docker на основе этих инструкций.

    docker build -t my-custom-node-app .

Флаг -t позволяет пометить образ именем, в данном случае "my-custom-node-app". Docker выполнит каждую строку в Dockerfile и создаст соответствующие слои.

 

 

4. Тестирование образа Docker

После сборки образа Docker важно протестировать его, запустив как контейнер. Команда docker run позволяет создать экземпляр контейнера из образа и проверить, ведет ли он себя так, как ожидается.

    docker run -p 8080:8080 my-custom-node-app

Эта команда запускает контейнер и сопоставляет порт 8080 контейнера с портом 8080 на хост-машине, что позволяет получить доступ к приложению, запущенному внутри контейнера.

 


 

Другие полезные статьи в нашем Блоге:


    - Как открыть порт в UFW

    - Как установить Node.js на Ubuntu 22.04

    - Pip: Основы управления пакетами в Python

    - Что такое LVM и как настроить LVM в Ubuntu

 


 

 

Оптимизация Docker образа 

 

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

    Используйте небольшие базовые образы: Alpine Linux — это облегченный базовый образ, который может значительно уменьшить размер конечного образа по сравнению с более крупными дистрибутивами, такими как Ubuntu.
    Ограничьте количество слоев: каждая инструкция в Dockerfile создает новый слой в конечном образе. Чтобы уменьшить размер образа, объедините несколько инструкций в один слой, где это уместно. Например:

        RUN apt-get update && apt-get install -y \
            curl \
            git

    Очистка после установки: удалите временные файлы, кэш и неиспользуемые зависимости после установки, чтобы образ оставался компактным.

        RUN apt-get update && apt-get install -y curl && \
            rm -rf /var/lib/apt/lists/*

 

Следуя этим рекомендациям, вы сможете создавать эффективные, компактные образы Docker, которые проще распространять и развертывать.

 

 


Рекомендации по Dockerfile

 

Хорошо структурированный Dockerfile может стать решающим фактором между эффективным образом и раздутым или сложным в обслуживании. Вот несколько рекомендаций по Dockerfile:

    Используйте многоэтапные сборки: многоэтапные сборки позволяют отделить среду сборки от окончательной среды выполнения, уменьшая размер окончательного образа. Например, вы можете использовать один этап для сборки приложения, а другой — для создания среды выполнения только с необходимыми файлами.
    Упорядочение инструкций для кэширования: Docker кэширует результаты каждой инструкции в Dockerfile. Упорядочивая инструкции, которые часто меняются (например, изменения кода) позже в файле, вы можете воспользоваться кэшированием и сократить время сборки.
    Использование .dockerignore: подобно .gitignore, файл .dockerignore сообщает Docker, какие файлы или каталоги следует исключить при сборке образа. Это предотвращает включение ненужных файлов (например, журналов, временных файлов) в окончательный образ.

 

 

 

Отправка образа Docker в реестр

 

После того, как вы создали и протестировали свой Docker образ, вы можете поделиться им с другими. Docker Hub и другие реестры контейнеров позволяют вам хранить и распространять ваши образы.

Чтобы отправить образ в Docker Hub выполните следующие шаги:

    Пометьте образ:

        docker tag my-custom-node-app username/my-custom-node-app


    Отправьте образ:

        docker push username/my-custom-node-app

Отправив образ в реестр, вы можете легко поделиться им с членами команды или развернуть его на облачных платформах, например таких как AWS.

 

 

 

Заключение

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