Зачем использовать образы Docker в рабочей среде, если виртуальные машины уже есть?

Действительно, в вашем коде diffполучает вывод killвместо program. Вы можете решить эту проблему, объединив команды перед каналом в подоболочке с ().

Другая потенциальная проблема с вашим скриптом заключается в том, что killне предназначен для ожидания завершения program; вместо этого он просто посылает ему сигнал. Поэтому вы можете столкнуться с состоянием гонки, когда diffработает, не перехватывая весь вывод program. Я советую программно дождаться завершения фонового процесса с помощью встроенной команды waitbash.

Вот пример вашего кода, содержащего вышеуказанные исправления:

#!/bin/bash
(
   ./program <input1.txt &
    PID=$!
    sleep 1
    kill -INT $PID
    wait
) | diff -y reference_output.txt -
1
28.06.2020, 11:24
2 ответа

Я совсем недавно начал с контейнеров и докеров. Это лучше, потому что вы можете запускать контейнеры где угодно, у них легкая архитектура и они могут запускаться быстрее, чем виртуальные машины. У вас может быть много образов из Docker Hub для сборки инфраструктуры. Например, если вам нужен веб-сервер с wordpres или LAMP, вы можете просто установить общедоступный образ в Docker Hub и все

И на следующем этапе вы сможете понять прекрасный мир kubernetes.

Надеюсь, что ответ был полезен.

0
18.03.2021, 23:24

Экосистема Docker имеет довольно хороший набор инструментов для (повторного )создания контейнеров Docker с нуля в соответствии со спецификацией в Dockerfile.

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

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

По сути, цель состоит в том, чтобы сделать производственные обновления легкой -задачей :«просто остановить виртуальную машину/контейнер, выбросить старый, развернуть этот новый образ/контейнер виртуальной машины на его месте и перезапустить. Повторите для любого количества виртуальных машин/контейнеров, на которых параллельно запущено одно и то же приложение».

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

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

3
18.03.2021, 23:24

Теги

Похожие вопросы