Могут ли типы F # использоваться с контейнерными (Docker) ресурсами? - PullRequest
0 голосов
/ 24 мая 2018

Я знаю, как можно использовать определенных поставщиков F # -типа, например, SQLProvider для разработки без Docker: #if DEBUG, подключаться к локальной базе данных, в противном случае подключаться к производственной базе данных.Или, если поставщик типов поддерживает его (как в SQLProvider), укажите строку подключения в файле конфигурации.Однако в обоих случаях база данных доступна во время сборки (как и должно быть).

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

Существуют ли хорошие способы использования поставщиков типов для доступа к контейнерным базам данных?

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

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

Например, в случае поставщика типов JSON вы можетепредоставьте текстовый файл с образцами объектов, чтобы убедиться, что вы можете создать его, даже если удаленная веб-служба недоступна.

С SQLProvider это должно быть возможно при использовании параметра ContextSchemaPath способом, аналогичнымэто отличная статья: https://medium.com/real-world-fsharp/continuous-integration-with-type-providers-6ddf40ee31b3

0 голосов
/ 24 мая 2018

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

# BUILDER IMAGE (with DB in it)
FROM microsoft/dotnet:2-sdk-jessie as builder

RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

RUN echo "deb http://download.mono-project.com/repo/debian jessie main" > /etc/apt/sources.list.d/mono-official.list

RUN apt-get update && apt-get install -y \ 
    mono-devel

ADD ./ /app
WORKDIR /app

RUN ./build.sh Publish

# FINAL IMAGE
FROM microsoft/dotnet:runtime

COPY --from=builder /app/deploy/ app/

WORKDIR ./app/
CMD ["dotnet", "MY_AMAZING_APP.dll"]

Некоторые строки, возможно, не являются необходимыми (это довольно старая кодовая база), но просто чтобы дать вам подсказку.Важной частью является COPY --from=builder.Надеюсь, это поможет.

...