Ответ оказался гораздо проще и красивее, чем я предполагал.
У докера с версии 17.05 появилась такая замечательная штука, как
Multi-stage build. Она позволяет в одном докерфайле сначала сделать контейнер с nodejs, сбилдить в нём статику, а потом создать ещё один контейнер с nginx, в который скопировать артефакты сборки из первого. При этом результирующий образ не будет содержать данных из образа nodejs и исходников (если вы их явно на втором шаге не скопируете), что позволяет сделать его максимально лёгким.
FROM node:8 as build
WORKDIR /web
COPY package.json yarn.lock ./
RUN yarn
COPY . ./
RUN yarn build
FROM nginx:alpine
WORKDIR /usr/share/nginx/html
RUN rm -rf *
COPY --from=build /web/dist .