Complete Vue.js Docker Setup: Step-by-Step Tutorial for Beginners

Vue.js is a popular JavaScript framework for building interactive user interfaces. Docker simplifies the development process by containerizing applications, ensuring consistency across environments. Combining Vue.js with Docker allows developers to create, test, and deploy Vue applications efficiently. This tutorial provides a step-by-step guide for beginners to set up Vue.js with Docker from scratch.

Prerequisites

  • Basic knowledge of Vue.js
  • Docker installed on your machine
  • Node.js and npm installed

Step 1: Create a Vue.js Application

Open your terminal and run the following commands to create a new Vue.js project using Vue CLI:

npm install -g @vue/cli

vue create my-vue-app

Navigate into the project directory:

cd my-vue-app

Step 2: Create a Dockerfile

In the root of your Vue.js project, create a file named Dockerfile with the following content:

FROM node:14-alpine

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

EXPOSE 8080

CMD ["npm", "run", "serve"]

Step 3: Create a Docker Compose File

Create a file named docker-compose.yml in the root directory with the following content:

version: '3'

services:

vue-app:

build: .

ports:

- "8080:8080"

Step 4: Build and Run the Docker Container

In your terminal, run the following command to build the Docker image:

docker-compose build

Then, start the container:

docker-compose up

Step 5: Access Your Vue.js Application

Open your browser and navigate to http://localhost:8080. You should see your Vue.js application running inside a Docker container.

Additional Tips

  • Use docker-compose down to stop and remove containers.
  • Modify your Vue.js source code and rebuild the Docker image as needed.
  • Ensure Docker Desktop is running before executing commands.

By following these steps, you can efficiently develop and deploy Vue.js applications using Docker, ensuring consistency across different environments and simplifying the development workflow.