From a93cae1c02c28c51e5bce1f03132a211bbda7dce Mon Sep 17 00:00:00 2001 From: Pranas Kiziela Date: Fri, 17 Apr 2020 07:49:04 -0700 Subject: [PATCH] Improve Docker build (#341) Summary: * Reduces size of final image from 5GB to 130MB * Builds any checkout (not locked to the master) * Doesn't run stack on CMD (executes static build of Duckling instead) Pull Request resolved: https://github.com/facebook/duckling/pull/341 Reviewed By: chinmay87 Differential Revision: D21083018 Pulled By: patapizza fbshipit-source-id: d909158f20f5b8da5b0248a25103b850797bc3a3 --- .dockerignore | 1 + Dockerfile | 31 ++++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..8ee1bf94 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.stack-work diff --git a/Dockerfile b/Dockerfile index 9c928416..3576547b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,22 +1,39 @@ -FROM haskell:8 +FROM haskell:8 AS builder -RUN git clone https://github.com/facebook/duckling.git +RUN apt-get update -qq && \ + apt-get install -qq -y libpcre3 libpcre3-dev build-essential --fix-missing --no-install-recommends && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* RUN mkdir /log WORKDIR /duckling -RUN apt-get update - -RUN apt-get install -qq -y libpcre3 libpcre3-dev build-essential --fix-missing --no-install-recommends +ADD stack.yaml . ENV LANG=C.UTF-8 RUN stack setup + +ADD . . + # NOTE:`stack build` will use as many cores as are available to build # in parallel. However, this can cause OOM issues as the linking step # in GHC can be expensive. If the build fails, try specifying the # '-j1' flag to force the build to run sequentially. -RUN stack build +RUN stack install -ENTRYPOINT stack exec duckling-example-exe +FROM debian:stretch + +ENV LANG C.UTF-8 + +RUN apt-get update -qq && \ + apt-get install -qq -y libpcre3 libgmp10 --no-install-recommends && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +COPY --from=builder /root/.local/bin/duckling-example-exe /usr/local/bin/ + +EXPOSE 8000 + +CMD ["duckling-example-exe", "-p", "8000"]