What is docker?

Docker is a platform for building, shipping, and running applications in lightweight, portable containers. These containers package your code with all its dependencies, ensuring that it runs consistently across different environments.

For JavaScript developers, Docker simplifies development by removing the “works on my machine” problem and easing deployment to staging and production.

How does docker work?

Docker uses images to define what runs inside a container. An image includes your app code, Node.js runtime, dependencies, and any OS-level libraries. When you run a Docker container, it starts from this image and creates an isolated environment.

Key concepts

  • Dockerfile: A script that defines how your Docker image is built.
  • Image: A snapshot of your application and environment.
  • Container: A running instance of an image.
  • Docker Hub: A public registry where images are stored and shared.

Basic example

Here’s a basic Dockerfile for a Node.js app:

# Use official Node.js image
FROM node:18

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
COPY package*.json ./
RUN npm install

# Copy app source code
COPY . .

# Expose port and start app
EXPOSE 3000
CMD ["npm", "start"]

To build and run:

docker build -t my-node-app .
docker run -p 3000:3000 my-node-app

Why use docker as a javascript developer?

BenefitExplanation
Consistent environmentsEliminate platform differences between dev/stage/prod
Easy onboardingShare one container config—no need for manual setup
IsolationRun apps without affecting your local machine
Simplified deploymentDeploy containers directly to cloud services
Works with any JS frameworkReact, Next.js, Express, etc.

Important notes

  • Docker containers are ephemeral—any data not saved to a volume will be lost.
  • Always use .dockerignore to avoid copying unnecessary files.
  • Keep your images lean by removing unnecessary packages.
  • Use multi-stage builds for optimized production images.

Best practices

  • Use official base images (e.g., node:18-alpine for smaller size).
  • Separate dependencies and source code in Dockerfile to improve cache efficiency.
  • Use environment variables for configuration (.env or Docker secrets).
  • Map ports and volumes for development:
docker run -p 3000:3000 -v $(pwd):/usr/src/app my-node-app
  • Automate builds with Docker Compose or GitHub Actions.

Conclusion

Docker is a powerful tool that helps JavaScript developers create portable, consistent, and isolated development environments. By learning the Docker basics, you can streamline your workflow, avoid environment-related bugs, and deploy your apps more reliably across teams and platforms.