The following are dockerfiles that could be used to build sveltekit apps images using different adapters.
- Create a Dockerfile with the following content:
FROM node:alpine
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build
CMD ["node", "build"]
EXPOSE 3000
-
Build the Docker image:
docker build -t sveltekit-node ./adapter-node.Dockerfile
-
Run the Docker container:
docker run -p 3000:3000 sveltekit-node
App should now be accessible athttp://localhost:3000
.
- Create a Dockerfile with the following content:
FROM oven/bun
WORKDIR /app
COPY package.json package.json
RUN bun install
COPY . .
RUN bun run build
EXPOSE 3000
ENTRYPOINT ["bun", "./build"]
-
Build the Docker image:
docker build -t sveltekit-bun ./adapter-bun.Dockerfile
-
Run the Docker container:
docker run -p 3000:3000 sveltekit-bun
App should now be accessible athttp://localhost:3000
.
Since static adapter outputs static html/js files/assets, we can use nginx
to serve the project. The project is first built using node
image, and then uses nginx
image to serve the built files... giving a much smaller image size.
- Create a Dockerfile with the following content:
FROM node:alpine as build
ADD . /app
WORKDIR /app
RUN npm install
RUN npm run build
FROM nginx:stable
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/build /usr/share/nginx/html
- Create an
nginx.conf
file in the same directory as theDockerfile
with the following content:
server {
listen 80;
listen [::]:80;
server_name _;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/index.html $uri.html /index.html;
}
include mime.types;
types {
application/javascript js mjs;
}
}
- Build the Docker image:
docker build -t sveltekit-static ./adapter-static.Dockerfile
The image exposes port 80, so to run it on port 3000 locally:
docker run -p 3000:80 sveltekit-static
App should now be accessible at http://localhost:3000
.
Different projects may require different dependencies and dockerization techniques, the above is one of the ways you can achieve this.
Please feel very welcome to contribute/correct/update/enhance.