F# 类型提供可以与容器化 (Docker) 资源一起使用吗?

cme*_*ren 5 f# type-providers docker docker-compose

我知道如何使用某些 F# 类型的提供程序,例如SQLProvider用于非 Docker 开发:#if DEBUG连接到本地数据库,否则连接到生产数据库。或者,如果类型提供程序支持它(与 SQLProvider 一样),请在配置文件中指定一个连接字符串。然而,在这两种情况下,数据库在构建时都可用(因为它必须如此)。

但是,我刚刚开始使用 Docker 容器,当数据库在运行时仅在另一个容器中可用时(例如,通过由docker-compose.创建的专用网络),我无法看到如何使用类型提供程序。对于开发,虽然肯定不理想,但我可以通过在本地(在 Docker 外部)设置相同的数据库来解决这个问题,这样类型提供程序就可以获取模式。然而,在部署时,数据库需要可用,但我的理解是,虽然docker-compose将按依赖顺序启动容器,但实际上构建容器是完全隔离的。

是否有使用类型提供程序访问容器化数据库的好方法?

Dzo*_*ukr 3

您可以使用多阶段 docker 构建。设置一个包含数据库的“构建”docker 映像,并传递您要使用的构建程序集。这是我们代码库中的简短示例。

# 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"]
Run Code Online (Sandbox Code Playgroud)

有些行可能不是必需的(它是相当旧的代码库),但只是为了给您一些提示。重要的部分是COPY --from=builder。希望能帮助到你。