Docker Install Databases

This chapter covers how to deploy MySQL, PostgreSQL, MongoDB, and Redis using Docker.

MySQL

Quick Start

docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:8.0

Full Configuration

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=my-secret-pw \
  -e MYSQL_DATABASE=mydb \
  -e MYSQL_USER=myuser \
  -e MYSQL_PASSWORD=mypassword \
  -v mysql-data:/var/lib/mysql \
  mysql:8.0

Environment Variables

VariableDescription
MYSQL_ROOT_PASSWORDRoot password (required)
MYSQL_DATABASEInitial database name
MYSQL_USERCreate regular user
MYSQL_PASSWORDRegular user password

Connect

docker exec -it mysql mysql -uroot -p
docker exec -i mysql mysql -uroot -pmy-secret-pw mydb < dump.sql
docker exec mysql mysqldump -uroot -pmy-secret-pw mydb > backup.sql

PostgreSQL

Quick Start

docker run -d --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=my-secret-pw postgres:16

Full Configuration

docker run -d \
  --name postgres \
  -p 5432:5432 \
  -e POSTGRES_PASSWORD=my-secret-pw \
  -e POSTGRES_USER=myuser \
  -e POSTGRES_DB=mydb \
  -v postgres-data:/var/lib/postgresql/data \
  postgres:16

Connect

docker exec -it postgres psql -U myuser -d mydb
docker exec -i postgres psql -U myuser -d mydb < dump.sql
docker exec postgres pg_dump -U myuser mydb > backup.sql

MongoDB

Quick Start

docker run -d --name mongodb -p 27017:27017 mongo:7

With Authentication

docker run -d \
  --name mongodb \
  -p 27017:27017 \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=my-secret-pw \
  -v mongo-data:/data/db \
  mongo:7

Connect

docker exec -it mongodb mongosh
docker exec -it mongodb mongosh -u admin -p my-secret-pw

Redis

Quick Start

docker run -d --name redis -p 6379:6379 redis:7

With Password and Persistence

docker run -d \
  --name redis \
  -p 6379:6379 \
  -v redis-data:/data \
  redis:7 redis-server --requirepass my-secret-pw --appendonly yes

Connect

docker exec -it redis redis-cli
docker exec -it redis redis-cli -a my-secret-pw
docker exec -it redis redis-cli ping   # Output: PONG

Docker Compose Multi-Database Deployment

services:
  mysql:
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: mydb
    volumes:
      - mysql-data:/var/lib/mysql

  postgres:
    image: postgres:16
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: mydb
    volumes:
      - postgres-data:/var/lib/postgresql/data

  mongodb:
    image: mongo:7
    ports:
      - "27017:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: secret
    volumes:
      - mongo-data:/data/db

  redis:
    image: redis:7
    ports:
      - "6379:6379"
    command: redis-server --requirepass secret --appendonly yes
    volumes:
      - redis-data:/data

volumes:
  mysql-data:
  postgres-data:
  mongo-data:
  redis-data:
docker compose up -d
docker compose ps
docker compose down
docker compose down -v   # Also remove volumes

Chapter Summary

Docker makes database deployment simple. Always use volumes for data persistence, configure via environment variables, and back up regularly.

Further Reading