Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft: use multi-staged build for clean frontend image #348

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions Dockerfiles/Dockerfile.frontend
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
FROM node:20-bookworm
FROM node:20-bookworm as build

ENV REACT_APP_PROXY=http://localhost:9081
ENV REACT_APP_NOMOCK=on
WORKDIR /web/frontend
COPY ../web/frontend .
RUN npm install
ENTRYPOINT ["npm", "start"]
RUN npm ci
RUN npm run build

FROM node:20-bookworm as app

WORKDIR /web/frontend
COPY --from=build /web/frontend/build/ .

ENTRYPOINT ["python3", "-m", "http.server", "3000", "--directory", "/web/frontend/", "--bind", "127.0.0.1"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see you removed npm start in favor of building the static site. There's one caveat to that, which is that during development, you will need to rebuild every time you do a change.

With no npm start, you can get hot reloading, or at least you would need to do docker compose restart container
With this design, you would need docker .... build first then docker .... up second.

but... maybe, if we change the entrypoint to a CMD, we can override it in compose file to a npm run

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please see @ineiti 's comments, now that we want to actually deploy it I agree that it makes sense to have a clean Docker image

personally, I have a separate Dockerfile for developing that kept the npm start for the reasons you mentioned

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can also add a Dockerfile.dev with the npm start in it.

For the npm start, do you use the -v to link your local directory?

Comment on lines +10 to +15
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why use python (and the node image) instead of a webserver, since that's the only thing we need? 🤔