Рубрики
Uncategorized

[DevOps / Docker] Как написать хороший dockerfile

Чтение или написание Dockerfile, как только вы немного познакомьтесь с синтаксисом, тихо просто. B … с меткой CI, DevOps, Docker.

Docker (2 серии деталей)

Чтение или написание Dockerfile, как только вы немного познакомьтесь с синтаксисом, тихо просто. Но сколько раз вы потратили некоторое время, задаваясь вопросом, почему ваше изображение настолько большое, или почему изображение, которое вы загружаете, было настолько большим, сколько времени потеряно, пытаясь найти порт, определенный объем, вы потеряли. Итак, написать хороший файл Docker не так просто. Я постараюсь объяснить процесс, который мы определили с Жюль

Если вы хотите какое -то введение в Docker, посмотрите на сообщение Аурели

Понимание Docker: Часть 1 — Получить и тянуть изображения

Aurélie Vache ・ 3 августа ・ 1 мин. читать

Прежде всего, что такое хороший файл Docker? Это безопасный? , читаемый?, Один, который генерирует небольшое изображение Docker? все это ? Это вызов.

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

Начнем с простого примера:

FROM node  
WORKDIR /usr/src/app  
COPY babel.config.js ./  
COPY package.json ./  
COPY yarn.lock ./  
COPY public ./public  
COPY src ./src  
RUN yarn  
RUN yarn lint  
RUN yarn build  
RUN yarn serve

Если мы построим это изображение, мы сможем заметить несколько пунктов:

  1. Он может скачать новую версию указанного изображения «Узел»
  2. Это создает несколько слоев. Слой — это неизменная набор файлов, которые можно поделиться между несколькими изображениями Docker для выступлений и оптимизации использования дисков. Если вы используете несколько изображений, имеющих одинаковое изображение Root, у вас будут файлы этих изображений, присутствующих только один раз на вашем диске.

Если вы восстановите это изображение без каких -либо изменений, вы заметите, что Docker использует механизм кэша. Чтобы дать некоторые подсказки, если ничто не изменится на вашем диске (например, вы не измените Package.json), это не повредит шаг (и если все предыдущие шаги не изменились). Таким образом, Docker сделает минимальные вещи, необходимые.

Итак, давайте возьмем это 2 очка в учетной записи.

FROM  node: **10.15.0-Alpine**  
WORKDIR /usr/src/app  
COPY  "babel.config.js" "package.json" "yarn.lock" ./  
COPY public ./public  
COPY src ./src  
RUN yarn  
RUN yarn lint  
RUN yarn build  
RUN yarn serve

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

Теперь, когда мы уменьшили две первые «проблемы», давайте воспользуемся механизмом кеша.

FROM  node:10.15.0-Alpine  
WORKDIR /usr/src/app  
COPY "babel.config.js" "package.json" "yarn.lock" ./  
RUN yarn  
COPY public ./public  
COPY src ./src  
RUN yarn lint  
RUN yarn build  
RUN yarn serve

Итак, я перемещаю вверх по «run yart» сразу после копии файла конфигурации. Таким образом, пока файлы конфигурации не изменяются, моя «запуск пряжа» не будет выполнена, и я пользуюсь механизмом кеша Docker.

Теперь я не запускаю прямое использование пряжи для запуска моего приложения. Давайте быстро настроим сервер Nginx перед ним. Итак, я использую функцию Multi Stage Docker. Это позволяет мне повторно использовать результат изображения Docker в другом, определите в том же Dockerfile. Давай сделаем это.

FROM  node:10.15.0-Alpine **AS builder**  
WORKDIR /usr/src/app  
COPY "babel.config.js" "package.json" "yarn.lock" ./  
RUN yarn  
COPY public ./public  
COPY src ./src  
RUN yarn lint  
RUN yarn build  
RUN yarn serve 

# Volume inherited from nginx image  
# VOLUME /usr/share/nginx/html  
# VOLUME /etc/nginx   

FROM nginx:1.12.1-alpine  
EXPOSE 80    
HEALTHCHECK –interval=5m –timeout=3s -CMD curl -f http://localhost/ || exit 1   
COPY –from=builder /usr/src/app/dist/ /usr/share/nginx/html/

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

Затем я определил новое изображение от Nginx, и я копирую контент веб -сайта с первого изображения. Таким образом, мое изображение NGINX минимально и содержит только обязательные вещи (из безопасности, чем меньше у вас есть, тем лучше).

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

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

Docker (2 серии деталей)

Оригинал: «https://dev.to/ouelcum/devops-docker-how-to-write-a-good-docker-file-2af3»