Docker

Getting Started with Docker: A Beginner's Guide

Zachary Carciu • • 5 min read

Getting Started with Docker: A Beginner’s Guide

Docker solves the “works on my machine” problem by packaging your app and its dependencies into isolated, reproducible containers. If Docker is installed, anyone can clone your repo and spin it up in minutes—without installing language runtimes, databases, or touching system packages. This guide walks through the essentials so you can get productive fast with containerization.

What is Docker?

Docker is a platform for developing, shipping, and running applications in containers. Containers are lightweight, standalone executable packages that include everything needed to run an application: code, runtime, system tools, libraries, and settings.

Put simply, containers give you a consistent environment that behaves the same on any machine or in the cloud.

Why use Docker?

  • Reproducibility: Ship the same environment from dev to CI to production.
  • Isolation: No conflicts with your host OS or global packages; dependencies live inside the container.
  • Fast onboarding: New contributors can run your app with a single command—no local setup headaches.
  • Portability: Run the same image on Linux, macOS, Windows, or your cloud provider.
  • Lightweight: Starts faster and uses fewer resources than full virtual machines.

With Docker installed, many projects can be run without installing language runtimes or databases locally:

git clone https://github.com/yourname/yourapp
cd yourapp
# If the project includes Docker Compose
docker compose up --build

# Or run a published image directly
docker run --rm -p 3000:3000 ghcr.io/yourname/yourapp:latest

# Tear everything down cleanly (including volumes) when you're done
docker compose down -v

Installation

First, you’ll need to install Docker on your system. Visit the official Docker website and download Docker Desktop for your operating system.

Verify Installation

After installation, open a terminal and run:

docker --version
docker run hello-world

This will confirm that Docker is installed correctly and can run containers.

Basic Docker Commands

Here are some essential Docker commands to get you started:

1. Images

# List all images
docker images

# Pull an image
docker pull ubuntu

# Remove an image
docker rmi image_name

2. Containers

# Run a container
docker run -it ubuntu

# List running containers
docker ps

# List all containers (including stopped)
docker ps -a

# Stop a container
docker stop container_name

# Remove a container
docker rm container_name

Creating Your First Dockerfile

A Dockerfile is a text file that contains instructions for building a Docker image. Here’s a simple example:

# Use an official Python runtime as the base image
FROM python:3.9-slim

# Set the working directory
WORKDIR /app

# Copy requirements file
COPY requirements.txt .

# Install dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Copy the rest of the application
COPY . .

# Command to run the application
CMD ["python", "app.py"]

Building and Running

To build and run your Docker image:

# Build the image
docker build -t my-python-app .

# Run the container
docker run -p 8080:8080 my-python-app

Best Practices

  1. Use Official Base Images

    • Start with official images from Docker Hub
    • Keep base images minimal
  2. Optimize Layer Caching

    • Order instructions from least to most frequently changing
    • Combine related commands using &&
  3. Security

    • Don’t run containers as root
    • Scan images for vulnerabilities
    • Keep base images updated

Docker Compose

Docker Compose is a tool for defining and running multi-container Docker applications. Here’s a simple example:

version: '3'
services:
  web:
    build: .
    ports:
      - "8080:8080"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

Running with Compose

# Start services
docker compose up

# Stop services
docker compose down

Want a full, practical example of using Compose for a Python stack (Postgres, Jupyter, Streamlit, pytest)? Read: Setting Up a Python Development Environment with Docker Compose.

Common Use Cases

  1. Development Environments

    • Consistent development environments across team
    • Easy setup for new team members
  2. Testing

    • Isolated testing environments
    • Reproducible test conditions
  3. Deployment

    • Consistent deployment across different environments
    • Easy scaling and updates

Troubleshooting

Common issues and solutions:

  1. Container won’t start

    • Check logs: docker logs container_name
    • Verify port mappings
    • Check resource limits
  2. Image won’t build

    • Review Dockerfile syntax
    • Check file permissions
    • Verify base image availability

Next Steps

  1. Learn about Docker networking
  2. Explore Docker volumes for persistent storage
  3. Study container orchestration with Kubernetes
  4. Implement CI/CD pipelines with Docker

Docker is a powerful tool that can significantly improve your development workflow. Start with these basics and gradually explore more advanced features as you become comfortable with the fundamentals.

Remember: The key to mastering Docker is practice. Start with simple containers and gradually work your way up to more complex configurations.