Notes on setting up a Docker/Vite/React/Redux Toolkit service in Docker. That’s a mouthful.
Docker Files
Start with a name for the project (e.g. “myproject”). Then create these Docker files:
Dockerfile
FROM node:20.10
RUN apt update && apt install -y \
xdg-utils
EXPOSE 5173
docker-compose.yml
version: '3'
services:
app:
build: .
command: >
sh -c "npm run dev"
ports:
- "5173:5173"
expose:
- "5173"
volumes:
- .:/app
tty: true
stdin_open: true
Now build the working image and shell into the container:
docker-compose build
Redux Toolkit Setup
Shell into a container of the working image and initialize the project:
docker-compose run --rm app /bin/bash ... npx degit reduxjs/redux-templates/packages/vite-template-redux myproject
Of course, use the name of the project instead of myproject
.
This will create the starter files for the project under myproject
/.
Exit the shell.
File Updates
Dockerfile
Modify Dockerfile
to build the image with the project:
FROM node:20.10
RUN apt update && apt install -y \
xdg-utils
EXPOSE 5173
WORKDIR /app/myproject
RUN npm install -g npm
vite.config.ts
Modify the Vite config to allow it to host from a Docker container:
import { defineConfig } from "vitest/config"
import react from "@vitejs/plugin-react"
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
server: {
host: true, // <-- ADD THIS
open: true,
},
....
Start
Finally, to start the server, first build the image again:
docker-compose build
Then bring up the app:
docker-compose up
This should now bring up the app at http://localhost:5173/
To work on the project’s settings (e.g. installing packages, running tests, etc.), shell in with:
docker-compose run --rm --service-ports app /bin/bash
The --service-ports
option will allow commands like npm run dev
to start the app correctly (i.e. so that http://localhost:5173/ works). Without it, the port 5173 will not be mapped to the host, and docker-compose up
will be the only way to run the app.