- Host World
- Компания
- Блог
- Программирование
- Многоэтапные сборки Docker: как оптимизировать и уменьшить размер образа Docker
Многоэтапные сборки Docker: как оптимизировать и уменьшить размер изображения Docker
-
5 min Читать
-
389
Docker революционизировал способ разработки, доставки и запуска приложений. Однако одной из распространенных проблем, с которыми сталкиваются разработчики, является размер образов Docker. Большие образы могут медленно загружаться и занимать больше места на диске, что приводит к неэффективности разработки и развертывания. К счастью, многоэтапные сборки Docker помогают создавать меньшие и более эффективные образы контейнеров с лучшим кэшированием и повышенной безопасностью. Другими словами, можно сказать, что многоэтапные сборки Docker идеально подходят для тех, кому сложно оптимизировать файлы Dockerfiles , обеспечивая при этом их понятность и простоту управления.
В этой статье мы рассмотрим некоторые продвинутые техники, выходящие за пределы базовой практики передачи файлов между этапами сборки и исполнения. Эти советы помогут вам в полной мере использовать возможности многоэтапных сборников Docker . Если вы не знакомы с принципом работы многоэтапных файлов Docker, рекомендуем сначала ознакомиться со вводным пособием.
ЧТО ТАКОЕ МНОГОЭТАПНАЯ СБОРКА DOCKER?
Чтобы понять концепцию многоэтапного сборника Docker, сначала следует узнать, что такое образ Docker. Образ Docker – это портативный пакет, содержащий все необходимые компоненты для запуска программы. Для создания образа Docker для программы все инструкции, указанные в Dockerfiles, обеспечивают быстрое и надежное функционирование программного обеспечения.
В многоэтапной сборке Docker можно использовать несколько операторов FROM в файле Dockerfile, каждый из которых начинает новый этап сборки и, возможно, использует другой базовый образ. Такой подход позволяет передавать артефакты с одного этапа в другой, исключая из конечного образа все ненужные компоненты.
ПОЧЕМУ СТОИТ ИСПОЛЬЗОВАТЬ МНОГОЭТАПНУЮ КОМПИЛЯЦИЮ DOCKER?
Вот некоторые преимущества использования многоэтапной компиляции Docker:
Уменьшенный размер образа контейнера: включая в конечный образ только необходимые компоненты, многоэтапные компиляции Docker помогают устранить ненужные файлы и зависимости, что приводит к уменьшению размера образа.
Повышенная безопасность: Меньший образ с меньшим количеством компонентов уменьшает площадь атаки, улучшая общую безопасность программы.
Прощее обслуживание: Многоэтапные сборки Docker разделяют среды сборки и выполнения, что делает Dockerfiles более простыми для понимания и обслуживания.
КАК ИСПОЛЬЗОВАТЬ МНОГОЭТАПНЫЕ СБОРКИ DOCKER? (Руководство шаг за шагом)
Давайте рассмотрим, как создать Dockerfile с помощью многоэтапной сборки Docker для простой программы React. Чтобы создать многоэтапный сборник Docker, выполните следующие действия.
ШАГ 1: СОЗДАЙТЕ ПРОГРАММУ REACT
Сначала откройте vscode и создайте новую программу React, если вам еще нужно ее создать. Вы можете создать программу React с помощью следующих команд:
> npx create-react-app testapp
> cd testapp
ШАГ 2: СОЗДАТЬ ФАЙЛ DOCKERFILE ДЛЯ
В корневой папке программы React создайте файл Dockerfile. В файл docker вставьте следующий код:
# Use node:16-alpine image как parent image
FROM node:16-alpine AS build
# Create app directory
WORKDIR /usr/src/app
# Copy package.json files to working directory
COPY package*.json ./
# Install app dependencies
RUN npm install
# Copy the source files
COPY. .
# Build the React app for production
RUN npm run build
# Use nginx image as a parent image for serving the app
FROM nginx:alpine
# Copy built files from the previous stage to nginx default directory
COPY --from=build /usr/src/app/build /usr/share/nginx/html
# Expose port 80 для обслуживания app
EXPOSE 80
# Command to start nginx
CMD ["nginx", "-g", "daemon off;"]
Dockerfile употребляет многоэтапный процесс построения Docker. На начальном этапе строится приложение React, а на следующем этапе построенное приложение обслуживается с помощью Nginx. На втором этапе команда COPY переносит содержимое каталога построения с первого этапа, обозначенного как "build", в каталог по умолчанию веб-сервера Nginx. Эта конфигурация настраивает Nginx на хостинг вашего приложения React.
ШАГ 3: СОЗДАНИЕ И ЗАПУСК ОБРАЗА DOCKER
Создайте образ Docker с помощью команды docker build следующим образом:
> docker build -t testapp
ШАГ 4: ПРОВЕРКА РАЗМЕРА ОБРАЗА
Чтобы оценить влияние многоступенчатой сборки Docker на размер образа, можно еще раз перечислить свои образы Docker:
> docker images
Вышеуказанная команда отобразит список всех образов Docker в вашей системе, что позволит сравнить размеры до и после внедрения многоэтапного процесса построения Docker.
После завершения постройки запустите контейнер из образа:> docker run -d -p 80:80 testapp
Теперь вы можете получить доступ к программе React в браузере по адресу http://localhost.
Используя многоэтапные сборки Docker, мы создали образ Docker, содержащий только необходимые файлы для обслуживания программы React, уменьшив ее размер и повысив безопасность.
КАКИЕ ПРОБЛЕМЫ МОГУТ ВОЗНИКАТЬ ПРИ ИСПОЛЬЗОВАНИИ МНОГОЭТАПНЫХ СБОРОК DOCKER?
Многоэтапные сборки, хотя и полезны, могут создавать определенные проблемы:
- Скорость сборки: из-за наличия нескольких этапов в Dockerfile процесс сборки может быть медленным. Создание готового к производству образа предполагает несколько шагов, что может увеличить время, необходимое для сборки.
- Кэширование: если вы используете последнюю версию Docker с включенным BuildKit, кэширование может помочь повысить скорость сборки. Однако это не устраняет проблему, и сборники все равно могут быть трудоемкими.
- Читабельность : Еще одной проблемой является сложность и читабельность Dockerfile. С добавлением новых этапов Dockerfile может стать сложнее для понимания и обслуживания, особенно для тех, кто только начинает работать с проектом.
Зная об этих проблемах, вы сможете лучше управлять и оптимизировать использование многоэтапных сборок Docker.
КАКИЕ ЕСТЬ ЛУЧШИЕ ПРАКТИКИ СОЗДАНИЯ МНОГОЭТАПНЫХ СБОРОК DOCKER?
Вот несколько важных практик, о которых следует помнить при использовании многоэтапных сборок Docker:
Минимизируйте зависимости на этапах: убедитесь, что на каждом этапе процесса сборки включены только самые необходимые зависимости и файлы. Это поможет уменьшить размер конечного образа Docker и улучшить общую производительность.
Выберите оптимальные базовые образы: выберите базовые или родительские образы, содержащие только необходимые пакеты для программы. Использование легких базовых образов, таких как Alpine Linux, может еще больше уменьшить размер образа и потребление ресурсов.
Отделите данные программы: избегайте включения данных программы непосредственно в образ Docker, так как это может увеличить его размер. Вместо этого используйте тома Docker для управления и хранения данных программы отдельно от самого контейнера. Такой подход не только уменьшает размер образа, но повышает гибкость и масштабируемость.
Следуя вышеприведенным рекомендациям, вы можете оптимизировать эффективность и производительность многоэтапных сборок Docker, что приведет к созданию меньших и более оптимизированных образов контейнеров.
ЗАКЛЮЧЕНИЕ
Правильное создание образов Docker является важным, поскольку это делает вашу программу более быстрой и безопасной. Большие образы могут иметь больше проблем с безопасностью, поэтому важно не торопиться и быть осторожным. Многоэтапные сборки упростили процесс, упростив шаги, которые необходимо выполнить. Многоэтапные сборки Docker – это мощная функция, позволяющая использовать в dockerfile несколько операторов from, помогающих создать несколько этапов. Разделив этапы сборки и выполнения, вы можете оптимизировать свои Dockerfiles и гарантировать, что в конечный образ будут включены только самые необходимые компоненты. Попытайтесь это на своих приложениях и убедитесь в результатах!
Ищете надежного хостинг-провайдера для VPS или выделенного сервера, а может, SSL-услуг? Host World – лучший выбор для всех ваших потребностей в хостинге. Вот несколько наших ключевых преимуществ, выделяющих нас среди конкурентов.
Оставьте свои отзывыПоделитесь своим мнением и помогите нам стать лучше! Ваши отзывы важны для нас.