Nano Hash - криптовалюты, майнинг, программирование

Docker: сборка внутри корпоративного брандмауэра, развертывание снаружи?

У меня есть пакет программного обеспечения (веб-сервер узла, база данных, другие инструменты), который я разрабатываю внутри корпоративного брандмауэра, встраиваю в образы докеров и развертываю с помощью docker-compose. Чтобы фактически установить все программное обеспечение в образы, мне нужно настроить среду для использования сетевого прокси, а также отключить строгую проверку SSL (поскольку брандмауэр включает проверку ssl) не только с точки зрения переменных среды, но и для npm, apt и так далее.

У меня все это работает, так что я могу создавать в брандмауэре и развертывать в брандмауэре, а также настроил свои файлы Dockerfile и скрипты сборки, чтобы включение всех элементов конфигурации прокси/ssl зависело от докера --build-arg, который устанавливает среду переменная через ENV enable_proxies=$my_build_arg, так что я также могу просто пропустить всю эту конфигурацию для сборки и развертывания за пределами брандмауэра.

Однако мне нужно иметь возможность создавать все внутри брандмауэра и развертывать за его пределами. Это означает, что все прокси-компоненты должны быть включены во время сборки (чтобы все программные пакеты могли быть установлены), если указан соответствующий --build-arg, а затем отдельно либо включен, либо отключен во время выполнения с помощью --env enable_proxies=true или чего-то подобного.

Я все еще относительно новичок в некоторых аспектах Docker, но я понимаю, что единственное, что выполняется при запуске образа, — это содержимое записи CMD в Dockerfile, и что CMD может выполнять только одну команду.

Кто-нибудь знает, как я могу/должен разделять настройки прокси/ssl во время сборки и выполнения, как это?


Ответы:


1

Вы должны быть в состоянии создать и отправить один образ; «Построить внутри брандмауэра, развернуть снаружи» — вполне нормально.

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

FROM ... AS build
ARG my_build_arg
ENV enable_proxies=$my_build_arg
WORKDIR /artifacts
RUN curl http://internal.source.example.com/...

FROM ...
COPY --from=build /artifacts/ /artifacts/
...
CMD ["the_app"]

Поскольку на втором этапе нет директивы ENV, у него никогда не будет установлен $enable_proxies, а это то, что вам нужно для фактического образа среды выполнения.

Другой аналогичный подход заключается в написании скрипта, который запускается на хосте и загружает зависимости в локальное дерево сборки, а затем запускает docker build. (Это может потребоваться, если вам нужно поддерживать особенно старые докеры.) Затем вы можете использовать все, что хост установил для $http_proxy, и не беспокоиться о специальной обработке прокси-сервера против прокси-сервера.

06.02.2019
  • Многоступенчатая сборка звучит идеально и довольно просто. вообще не знал о такой функции! 06.02.2019
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..