Hướng dẫn chạy MySQL và Adminer bằng Docker Compose – Bài 10

Chào các bạn! Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách tạo một hệ thống đơn giản gồm một container MySQL và một container Adminer để quản lý cơ sở dữ liệu, sử dụng Docker và Docker Compose. Bài viết này sẽ giúp bạn nắm được khái niệm cơ bản về Docker network, volume, và sự khác nhau giữa cách chạy thủ công và dùng Docker Compose.

1. Giới thiệu hệ thống

Hệ thống của chúng ta sẽ bao gồm:

  • MySQL: là cơ sở dữ liệu, nơi lưu trữ dữ liệu.
  • Adminer: là giao diện web giúp bạn dễ dàng truy cập và quản lý MySQL.

Mục tiêu là kết nối hai container này lại với nhau thông qua cùng một mạng Docker, để Adminer có thể truy cập MySQL bằng tên DNS.

2. Tạo thủ công bằng Docker CLI

Bước 1: Tạo network và volume

docker network create web
docker volume create web-data
docker volume create adminer-data

Bước 2: Chạy MySQL container

docker run -d \
  --name mysql-container \
  --network web \
  -v web-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=admin123 \
  mysql

Bước 3: Chạy Adminer container

docker run -d \
  --name adminer-container \
  --network web \
  -p 8080:8080 \
  adminer

Giờ bạn có thể truy cập http://localhost:8080 để mở giao diện Adminer.

Đăng nhập bằng:

  • Server: mysql-container
  • Username: root
  • Password: admin123

Bước 4: Kiểm tra kết nối

Bạn có thể tạo thử một database trên Adminer để xác nhận mọi thứ hoạt động đúng. Sau đó dùng dòng lệnh truy cập vào container MySQL để xác minh:

docker exec -it mysql-container bash
mysql -u root -p
# nhập mật khẩu admin123
SHOW DATABASES;

3. Chuyển sang Docker Compose

Docker Compose giúp bạn gom toàn bộ cấu hình thành một file duy nhất, tiện lợi hơn khi triển khai. Dưới đây là file docker-compose.yaml tương đương với những gì chúng ta đã làm ở trên:

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql-container
    volumes:
      - web-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: admin123
    networks:
      - my-network

  adminer:
    image: adminer
    container_name: adminer-container
    ports:
      - "8080:8080"
    networks:
      - my-network

volumes:
  web-data:

networks:
  my-network:
    driver: bridge

Chạy bằng Docker Compose:

docker compose up -d

Sau khi chạy xong, bạn sẽ thấy Docker tự tạo network và volume cần thiết.

Cách xoá sau khi chạy Docker Compose

Mục đích Lệnh
Chỉ dừng và xoá container, network docker compose down
Xoá cả volume docker compose down --volumes
Xoá cả image và volume docker compose down --rmi all --volumes

4. Lưu ý khi dùng Docker Compose

  • Docker sẽ tự tạo network tên theo thư mục chứa file Compose. Ví dụ: nếu thư mục tên là project, network mặc định sẽ là project_default.
  • Volume cũng sẽ được đặt tên dạng project_web-data.

Bạn có thể kiểm tra:

docker network ls
docker volume ls

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em