Complete guide to setting up and using Docker with databases in your development environment.
docker --version # Should show Docker version
docker run hello-world # Should print hello message
# View images
docker images
# View running containers
docker ps
# View all containers (including stopped)
docker ps -a
# Run a container
docker run -d --name my-container image-name
# Stop a container
docker stop my-container
# Start a container
docker start my-container
# Remove a container
docker rm my-container
# View logs
docker logs my-container
docker logs -f my-container # Follow logs
# Execute command in container
docker exec -it my-container bash
# Remove an image
docker rmi image-name
Docker Compose allows you to define and run multiple containers as a single application.
version: '3.8'
services:
postgres:
image: postgres:16
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
mongodb:
image: mongo:7.0
ports:
- "27017:27017"
volumes:
- mongodb_data:/data/db
volumes:
postgres_data:
mongodb_data:
# Start services
docker-compose up
# Start in background
docker-compose up -d
# Stop services
docker-compose down
# View logs
docker-compose logs
# Follow specific service logs
docker-compose logs -f postgres
# View services
docker-compose ps
# Execute command in service
docker-compose exec postgres psql -U postgres
# Rebuild services
docker-compose build
# Remove volumes
docker-compose down -v
Your setup includes 5 production-ready databases via Docker:
# Connection details
Host: localhost
Port: 5432
User: postgres
Password: password
Database: postgres
# Connect with psql
docker-compose exec postgres psql -U postgres
# Example SQL
CREATE DATABASE mydb;
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
INSERT INTO users (name, email) VALUES ('John', 'john@example.com');
SELECT * FROM users;
# Connection details
Host: localhost
Port: 27017
Database: admin
# Connect with mongo shell
docker-compose exec mongodb mongosh
# Example commands
use mydb
db.users.insertOne({ name: 'John', email: 'john@example.com' })
db.users.find()
db.users.updateOne({ name: 'John' }, { $set: { status: 'active' } })
db.users.deleteOne({ name: 'John' })
# Connection details
Host: localhost
Port: 6379
# Connect with redis-cli
docker-compose exec redis redis-cli
# Example commands
SET mykey "Hello"
GET mykey
INCR counter
LPUSH mylist "item1"
LRANGE mylist 0 -1
DEL mykey
# Connection details
Host: localhost
Port: 3306
User: root
Password: rootpassword
# Connect with mysql
docker-compose exec mysql mysql -u root -p
# Example SQL
CREATE DATABASE mydb;
USE mydb;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
INSERT INTO users (name, email) VALUES ('John', 'john@example.com');
SELECT * FROM users;
# Connection details
Host: localhost
Port: 9200
# Test connection
curl http://localhost:9200/
# Create index
curl -X PUT http://localhost:9200/my-index
# Add document
curl -X POST http://localhost:9200/my-index/_doc -H "Content-Type: application/json" -d '{"name":"John","age":30}'
# Search
curl http://localhost:9200/my-index/_search
# Navigate to repository
cd developer-environment-setup
# Start all databases
docker-compose up -d
# Check status
docker-compose ps
# Stop all databases
docker-compose down
# All services
docker-compose logs
# Specific service
docker-compose logs postgres
docker-compose logs mongodb
docker-compose logs redis
# Follow logs
docker-compose logs -f postgres
npm install pg
# Create connection
const { Pool } = require('pg');
const pool = new Pool({
user: 'postgres',
password: 'password',
host: 'localhost',
port: 5432,
database: 'postgres'
});
// Query
pool.query('SELECT * FROM users', (err, res) => {
console.log(res.rows);
});
npm install mongoose
# Connect
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/mydb');
const userSchema = new mongoose.Schema({
name: String,
email: String
});
const User = mongoose.model('User', userSchema);
// Create
const user = new User({ name: 'John', email: 'john@example.com' });
user.save();
// Find
User.find({}, (err, users) => {
console.log(users);
});
npm install redis
# Connect
const redis = require('redis');
const client = redis.createClient({
host: 'localhost',
port: 6379
});
client.connect();
// Set
client.set('mykey', 'Hello');
// Get
client.get('mykey', (err, reply) => {
console.log(reply);
});
pip install psycopg2-binary
import psycopg2
conn = psycopg2.connect(
host='localhost',
port=5432,
user='postgres',
password='password',
database='postgres'
)
cur = conn.cursor()
cur.execute('SELECT * FROM users')
rows = cur.fetchall()
print(rows)
cur.close()
conn.close()
pip install pymongo
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
users = db['users']
# Insert
users.insert_one({'name': 'John', 'email': 'john@example.com'})
# Find
for user in users.find():
print(user)
# Update
users.update_one({'name': 'John'}, {'$set': {'status': 'active'}})
pip install redis
import redis
r = redis.Redis(host='localhost', port=6379, decode_responses=True)
# Set
r.set('mykey', 'Hello')
# Get
value = r.get('mykey')
print(value)
# Increment
r.incr('counter')
# List operations
r.lpush('mylist', 'item1', 'item2')
items = r.lrange('mylist', 0, -1)
print(items)
Solution:
Solution:
# Find process using port
netstat -ano | findstr :5432
# Kill process
taskkill /PID <PID> /F
# Or change port in docker-compose.yml
Solution:
# Clean up Docker resources
docker system prune
# Remove unused volumes
docker volume prune
# Remove all unused containers, networks, and images
docker system prune -a
Solution:
# Check logs
docker-compose logs postgres
# Recreate container
docker-compose down
docker-compose up -d
# Force rebuild
docker-compose up -d --build