Skillversitas

Docker MySQL

How to run MySQL in Docker.

Docker MySQL

# Run MySQL
docker run -d \
  --name mysql-db \
  -e MYSQL_ROOT_PASSWORD=rootpassword \
  -e MYSQL_DATABASE=myapp \
  -e MYSQL_USER=user \
  -e MYSQL_PASSWORD=password \
  -v mysql-data:/var/lib/mysql \
  -p 3306:3306 \
  mysql:8.0

docker-compose.yml

version: '3.8'

services:
  database:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: myapp
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    ports:
      - "3306:3306"
    networks:
      - app-net

  api:
    build: .
    environment:
      DB_HOST: database
      DB_PORT: 3306
      DB_NAME: myapp
      DB_USER: user
      DB_PASSWORD: password
    networks:
      - app-net

networks:
  app-net:

volumes:
  mysql-data:

Use Case: MySQL Application

# Run MySQL
docker run -d \
  --name myapp-mysql \
  -e MYSQL_ROOT_PASSWORD=secret \
  -e MYSQL_DATABASE=myapp \
  -e MYSQL_USER=admin \
  -e MYSQL_PASSWORD=admin123 \
  -v mysql-data:/var/lib/mysql \
  -p 3306:3306 \
  mysql:8.0

# Connect to MySQL
docker exec -it myapp-mysql mysql -u root -p

Everyday Use Case

Case: A developer needs a MySQL database.

# Run MySQL
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=secret -p 3306:3306 mysql:8.0

# Connect
mysql -h 127.0.0.1 -u root -p

# Back up
docker exec mysql mysqldump -u root -psecret myapp > backup.sql

Best Practices

  1. Use a named volume: For persistent data
  2. Environment variables: For configuration
  3. Health check: To make sure MySQL is ready
  4. Back up regularly: For data safety

Conclusion

MySQL in Docker is easy to set up. Use a named volume for persistent data and environment variables for configuration.