Docker is a platform for developing, shipping, and running applications inside containers. It allows developers to package applications with all their dependencies into a single, portable unit that can run reliably in any environment.
| Term | Description |
|---|---|
| Image | A read-only template used to create containers (like a recipe). |
| Container | A running instance of an image (like a baked cake from the recipe). |
| Dockerfile | A file with instructions to build a Docker image. |
| Docker Hub | A public registry where you can find and share Docker images. |
Imagine you’re baking a cake. Docker is like a sealed box that contains not just the cake, but also the oven, ingredients, and instructions to make it—so it bakes the same way in any kitchen. This “box” is what we call a container.
Why Docker Is Useful
-
Consistency: It runs the same code on your laptop, a testing server, or a production cloud environment.
-
Portability: Since containers package everything needed, they can run on any system with Docker installed.
-
Isolation: Each app runs in its own container, so it won’t interfere with others.
-
Efficiency: Containers are lightweight and start much faster than traditional virtual machines (VMs).
Example in Action
Let’s say you have a Python app. Normally, someone else would need:
-
Python installed
-
The correct version of libraries
-
Environment variables set up
With Docker, you can wrap your app and all its requirements into a container using a Dockerfile. Now anyone can run it using one simple command:
You can Try VPS HOSTING if you buy this URL get Extra DISCOUNT -20%
Advantages of Using Docker:
- No need to manually install any Run Time Environments on the server.
- Consistent environments between development and production.
- Easy to restart or redeploy your app.
1. Create a Dockerfile in your Next.js project root
Dockerfile
CopyEdit
# Use official Node.js image
FROM node:20-alpine
# Set working directory
WORKDIR /app
# Copy package files and install dependencies
COPY package*.json ./
RUN npm install
# Copy all files
COPY . .
# Build the Next.js app
RUN npm run build
# Expose the Next.js default port
EXPOSE 3000
# Start the app
CMD [“npm”, “start”]
2. Create a .dockerignore file
Prevent large or unnecessary files from being added to the image:
lua
CopyEdit
node_modules
.next
Dockerfile
docker-compose.yml
.git
3. Build the Docker image
Run this in your project directory:
bash
CopyEdit
docker build -t my-nextjs-app .
4. Run the Docker container
bash
CopyEdit
docker run -d -p 3000:3000 –name nextjs-container my-nextjs-app
Now your app is available at http://your-vps-ip:3000
✅ Optional: Reverse Proxy with Apache2 or Nginx
You can still use Apache2 to forward traffic to the Docker container:
Apache config example:
apache
CopyEdit
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
🧠 Tips
- You can use Docker Compose to include a database or Redis if needed.
- Use pm2-runtime if you’re using PM2 inside Docker, but usually npm start is enough.
Would you like a full example using docker-compose or help setting up SSL with Docker and Apache?