Comprehensive Guide to Docker for Developers

Comprehensive Guide to Docker for Developers

What is Docker and Why Do Developers Need It?

Docker is a platform for developing, shipping, and running applications inside lightweight containers. Containers allow you to package your application along with all its dependencies, ensuring it works uniformly across different environments.

Key Benefits:

  • Consistency: Eliminates the "works on my machine" issue.
  • Scalability: Easily scale applications using containers.
  • Isolation: Each container runs independently, preventing conflicts between applications.
  • Simplified CI/CD: Integration with CI/CD pipelines for automated testing and deployment.
  • Lightweight: Containers share the host kernel, making them faster and lighter than virtual machines.

Essential Docker Commands: A Complete Guide for Beginners

Here are some fundamental Docker commands you should know:

  • docker pull [image] – Download an image from Docker Hub.
  • docker run [image] – Run a container from an image.
  • docker ps – List running containers.
  • docker ps -a – List all containers (including stopped ones).
  • docker stop [container_id] – Stop a running container.
  • docker start [container_id] – Start a stopped container.
  • docker rm [container_id] – Remove a container.
  • docker rmi [image] – Remove an image.
  • docker exec -it [container_id] bash – Access a running container interactively.
  • docker logs [container_id] – View logs from a container.
  • docker build -t [image_name] . – Build a Docker image from a Dockerfile.
  • docker-compose up – Run a multi-container application using Docker Compose.
  • docker-compose down – Stop and remove containers from a docker-compose.yml file.

Docker for PHP Developers: Installation, Setup, and First Steps

Step 1: Install Docker:

Step 2: Create a Dockerfile for PHP:

FROM php:8.2-fpm
WORKDIR /var/www/html
COPY . .
RUN docker-php-ext-install pdo pdo_mysql
EXPOSE 9000
CMD ["php-fpm"]

Step 3: Build and Run:

docker build -t php-app .
docker run -d -p 9000:9000 php-app

Step 4: Verify: Check your running container with:

docker ps

How Dockerfile Works: Explanation with Examples

A Dockerfile is a script containing instructions to build a Docker image.

Example:

# Use the official PHP image
FROM php:8.2-fpm

# Set working directory
WORKDIR /var/www/html

# Copy application files
COPY . .

# Install PHP extensions
RUN docker-php-ext-install pdo pdo_mysql

# Expose port 9000
EXPOSE 9000

# Start the PHP-FPM server
CMD ["php-fpm"]

Key Instructions Explained:

  • FROM: Specifies the base image.
  • WORKDIR: Sets the working directory.
  • COPY: Copies files from the host to the container.
  • RUN: Executes commands inside the container during build.
  • EXPOSE: Exposes a port for external access.
  • CMD: Specifies the default command to run when the container starts.

Docker Compose: Managing Multi-Container Applications

Docker Compose simplifies managing multiple containers for a single application.

Example docker-compose.yml for PHP and MySQL:

version: '3.8'
services:
  php:
    build: .
    ports:
      - "9000:9000"
    volumes:
      - .:/var/www/html
    depends_on:
      - db
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: test_db
    ports:
      - "3306:3306"

Run the application:

docker-compose up

Difference Between Docker and Virtual Machines: Detailed Comparison

Feature Docker Virtual Machine
Isolation Level Process-level isolation Full OS-level isolation
Performance Lightweight and faster Heavier, slower boot time
Resource Usage Minimal resources needed Consumes more resources
Portability Highly portable Less portable
Use Case Microservices, CI/CD Full OS simulation

Summary:

  • Docker: Ideal for microservices, testing, and development.
  • VMs: Suitable for running full operating systems or legacy applications.

Conclusion

Docker is a game-changing tool for modern developers, providing a consistent and efficient way to manage development and production environments. Whether you're a PHP developer or working with other languages, mastering Docker can significantly improve your workflow. From running basic containers to orchestrating complex multi-container setups with Docker Compose, it covers a wide range of use cases essential for developers.

Recent blogs
Структурные паттерны в программировании

Структурные паттерны в программировании

Порождающие паттерны в программировании

Порождающие паттерны в программировании

Генераторы и итераторы в PHP

Генераторы и итераторы в PHP

Объектно-ориентированное программирование в PHP

Объектно-ориентированное программирование в PHP

Структуры данных в PHP

Структуры данных в PHP