Dockerfile for Fable Express App
FableJS
Fable is a modern transpaler from F# to JavaScript.
Going functional
I had a project written in TypeScript: https://github.com/xbIm/1337x-torrent-telegram-bot. Typescript is much better in code organizing then JS, but it still has not function syntaxes. So I've decided to rewrite it as a Fable app.
After I finish migration to Fable, I need to containerize it. Considering the code is transpiled from F# to JS, It is better to use Multi-Stage builds.
Docker file should contain:
- Dotnet SDK install
- yarn install
- yarn build
- Unit tests run(optional)
The simplest way to compile Fable is with command:
fable-splitter src -o build --commonjs
Docker file
Here is the final Dockerfile
FableJS
Fable is a modern transpaler from F# to JavaScript.
Going functional
I had a project written in TypeScript: https://github.com/xbIm/1337x-torrent-telegram-bot. Typescript is much better in code organizing then JS, but it still has not function syntaxes. So I've decided to rewrite it as a Fable app.
After I finish migration to Fable, I need to containerize it. Considering the code is transpiled from F# to JS, It is better to use Multi-Stage builds.
Docker file should contain:
- Dotnet SDK install
- yarn install
- yarn build
- Unit tests run(optional)
The simplest way to compile Fable is with command:
fable-splitter src -o build --commonjs
Docker file
Here is the final Dockerfile
FableJS
Fable is a modern transpaler from F# to JavaScript.
Going functional
I had a project written in TypeScript: https://github.com/xbIm/1337x-torrent-telegram-bot. Typescript is much better in code organizing then JS, but it still has not function syntaxes. So I've decided to rewrite it as a Fable app.
After I finish migration to Fable, I need to containerize it. Considering the code is transpiled from F# to JS, It is better to use Multi-Stage builds.
Docker file should contain:
- Dotnet SDK install
- yarn install
- yarn build
- Unit tests run(optional)
The simplest way to compile Fable is with command:
fable-splitter src -o build --commonjs
Docker file
Here is the final Dockerfile
FROM node:12 as builder | |
WORKDIR /app/ | |
COPY package.json . | |
COPY yarn.lock . | |
#install .net | |
RUN apt-get update \ | |
&& apt-get install -y --no-install-recommends \ | |
libc6 \ | |
libgcc1 \ | |
libgssapi-krb5-2 \ | |
libicu57 \ | |
libssl1.1 \ | |
libstdc++6 \ | |
zlib1g \ | |
&& rm -rf /var/lib/apt/lists/* | |
ENV DOTNET_SDK_VERSION 3.0.103 | |
RUN curl -SL --output dotnet.tar.gz https://dotnetcli.azureedge.net/dotnet/Sdk/$DOTNET_SDK_VERSION/dotnet-sdk-$DOTNET_SDK_VERSION-linux-x64.tar.gz \ | |
&& dotnet_sha512='22acd337c1f837c586b9d0e3581feeba828c7d6dc64e4c6c9b24bdc6159c635eb7019c3fb0534edeb4f84971e9c3584c7e3a4d80854cf5664d2792ee8fde189b' \ | |
&& echo "$dotnet_sha512 dotnet.tar.gz" | sha512sum -c - \ | |
&& mkdir -p /usr/share/dotnet \ | |
&& tar -zxf dotnet.tar.gz -C /usr/share/dotnet \ | |
&& rm dotnet.tar.gz \ | |
&& ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet | |
#install JS packages | |
RUN yarn install | |
COPY . . | |
RUN yarn build #transpile code | |
RUN yarn test #run tests(optional) | |
FROM node:12-alpine | |
LABEL name=com.xbimz.torrent.bot | |
ENV NODE_ENV=production | |
ENV NPM_CONFIG_LOGLEVEL=warn | |
WORKDIR /app/ | |
COPY package.json . | |
COPY yarn.lock . | |
RUN yarn install | |
#copy js from previous stage | |
COPY --from=builder /app/build . | |
COPY --from=builder /app/src/js/healthcheck.js . | |
EXPOSE 3000 | |
CMD ["node", "App.js"] | |
HEALTHCHECK CMD node healthcheck |
Comments (0)