Running NuxtJS in a Docker container
Guide how to create and run a Nuxt PWA project in a Docker container and how to share the project without Docker Hub
March 30, 2023
NuxtJS
Nuxt is a free and open source JavaScript library based on Vue.js, Node.js, Webpack and Babel.js. Nuxt is inspired by Next.js, which is a framework of similar purpose, based on React.js.
Docker Container
Docker is a set of platform as a service (PaaS) products that use OS-level virtualization to deliver software in packages called containers. Docker is a tool that is used to automate the deployment of applications in lightweight containers so that applications can work efficiently in different environments.
Why I use Nuxt with Docker?
I’ve been running Nuxt projects with pm2, but Nuxt 3 doesn’t provide an easy way to run projects on different ports, so I’ve started using Docker to run multiple Nuxt projects on same server.
NGINX sends the request to the Docker container’s port, and the Docker container forwards the request to Nuxt’s default port.
Create a new Nuxt 3 app
To create a new starter project, open a terminal and enter the following command:
yarn create nuxt-app new-project
cd new-project
yarn
Install Docker
You must first install Docker on your local machine before you can create a container for the Nuxt application. Choose your operating system from the list below and follow the setup instructions:
How to dockerize a Nuxt 3 app without using the Docker Hub
Docker Hub offers only two private Docker containers and I don’t want to share the codes publicly, so I only use Docker containers on my own server.
I develop the Nuxt project locally on port 3000
and update the codes on GitHub from where I get the codes for the server. On the server, I build and run a Docker container with the Dockerfile
file.
The only thing that needs to be changed for the Nuxt project is to create a Dockerfile
file.
FROM node:lts as builder
WORKDIR /app
COPY . .
RUN yarn install
--prefer-offline
--frozen-lockfile
--non-interactive
--production=false
RUN yarn build
RUN rm -rf node_modules &&
NODE_ENV=production yarn install
--prefer-offline
--pure-lockfile
--non-interactive
--production=true
FROM node:lts
WORKDIR /app
COPY --from=builder /app .
ENV HOST 0.0.0.0
EXPOSE 3000
CMD [ "node", ".output/server/index.mjs" ]
Building and running the Docker container
docker build -t new-project .
docker run -it -p 3500:3000 new-project
The command tells Docker to run the container and forward the exposed port 3500
to port 3000
on your server. You can now use http://localhost:3500
to access your Nuxt app.
The following command displays the Docker containers that are currently running on your system:
docker ps -a
To stop your Docker container:
docker stop id
Thanks for reading!