Русский
Русский
English
Статистика
Реклама

Перевод Написание Dockerfile. Лучшие практики

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

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



Если вы новичок в Docker, вы можете выбрать шаблон (базовый образ) и определить свои инструкции (команды Docker file), чтобы разместить свой код внутри образа и запустить его.

Хотя простота Docker помогает выполнять работу, его оптимизация приходит с опытом и обычно требует времени.

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

1. Определите кэшируемые юниты


Знаете ли вы, что каждая команда RUN, включенная в Dockerfile, влияет на уровень кэширования?

Использование нескольких команд RUN для установки пакетов повлияет на производительность и эффективность процесса сборки. Использование одной команды RUN для установки всех пакетов и зависимостей поможет создать один кэшируемый юнит вместо нескольких.

RUN apt-get update && apt-get install -y \    aufs-tools \    automake \    build-essential \    curl \    dpkg-sig \    libcap-dev \    libsqlite3-dev \    mercurial \    reprepro \    ruby1.9.1 \    ruby1.9.1-dev \    s3cmd=1.1.*

2. Уменьшите размер образа


Размер образа играет важную роль в создании хорошего Dockerfile. Использование образов меньшего размера приведет к более быстрому развертыванию и меньшей возможности для атак.

Удалите ненужные зависимости

Избегайте установки в образ ненужных инструментов, таких как инструменты отладки.

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

RUN apt-get update && apt-get -y install --no-install-recommends

Совет: делитесь компонентами, которые используете повторно, между проектами с помощью Bit (Github).

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

Bit поддерживает Node, TypeScript, React, Vue, Angular и др.


Изучите компоненты, опубликованные на Bit.dev

3. Поддержка образа


Выбор правильного базового образа для приложения очень важен.

Используйте официальный образ Docker

Использование официального образа Docker снижает нагрузку на ненужные зависимости, которые делают образ больше. Использование официального образа дает 3 основных преимущества:

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

# загрузить официальный базовый образFROM node:13.12.0-alpine# установить рабочий каталогWORKDIR /app# добавить `/app/node_modules/.bin` в $PATHENV PATH /app/node_modules/.bin:$PATH

Использовать определенные теги

При выборе базового образа рекомендуется использовать определенный тег. Не используйте для образа latest тег. Latest тег со временем может претерпевать критические изменения.

# загрузить официальный базовый образFROM node:13.12.0-alpine

Используйте минимальные Flavors

Минимальные Flavors уменьшают размер образа. Это помогает разворачивать приложения быстрее и безопаснее.



Как видно из приведенного выше изображения, при использовании минимального flavors образ занимает меньший объём. Большинство образов используют alpine flavor. Alpine это очень легкий образ со стандартным размером 2 МБ.

Используя образ на основе alpine, мы можем значительно уменьшить размер образа.

4. Воспроизводимость


Сборка из исходного кода в согласованной среде

При создании приложения с помощью Docker лучше создавать приложение в управляемой среде для обеспечения согласованности.

Мы должны избегать создания приложений в локальной среде и добавлять их в реестр.

В противном случае пакеты, которые вы могли установить в своей локальной среде, могут повлиять на согласованность образа. Я надеюсь, что вы не захотите оказаться в такой ситуации, поскольку это ставит под угрозу одно из основных преимуществ Docker согласованное выполнение в разных средах.

Использование многоэтапных сборок для удаления зависимостей

Рекомендуется использовать многоэтапный способ развертывания приложений.

Это исключает использование зависимостей сборки в работающем контейнере.

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

# Stage 0, "build-stage", based on Node.js, to build and compile the frontendFROM node:13.12.0 as build-stageWORKDIR /appCOPY package*.json /app/RUN npm installCOPY ./ /app/RUN npm run build# Stage 1, based on Nginx, to have only the compiled app, ready for production with NginxFROM nginx:1.15COPY --from=build-stage /app/build/ /usr/share/nginx/html

В приведенном выше Dockerfile есть два отдельных этапа. Этап 0 используется для сборки node-приложения из исходного образа node, а этап 1 используется для копирования бинарных файлов из образа сборки в образ веб-сервера (Nginx), который в конечном итоге обслуживает приложение.

Заключение


Это все, что я хотел рассказать. Если вы новичок в Docker, я рекомендую попробовать описанные практики при создании своего первого образа. Это поможет вам понять тему глубже и позволит эффективно использовать Docker с самого начала.

Если вам известны другие крутые практики, делитесь в комментариях. Спасибо за прочтение!
Источник: habr.com
К списку статей
Опубликовано: 30.12.2020 18:06:06
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Блог компании timeweb

Devops

Dockerfile

Docker

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru