Cách Sử Dụng MySQL với Docker: Hướng Dẫn Thực Hành Chi Tiết

18/04/2026 P T P Chung 8 phút đọc 0 bình luận

Giới thiệu

Docker đã trở thành công cụ không thể thiếu trong phát triển phần mềm hiện đại, giúp đóng gói ứng dụng và môi trường chạy thành các container nhẹ và di động. Khi làm việc với cơ sở dữ liệu quan hệ, MySQL là một trong những lựa chọn phổ biến nhất. Việc kết hợp MySQL với Docker mang lại nhiều lợi ích: dễ dàng thiết lập môi trường phát triển, tái tạo môi trường sản xuất, và đơn giản hóa việc quản lý phiên bản và cấu hình.

Bài viết này sẽ hướng dẫn chi tiết cách sử dụng MySQL với Docker, từ việc khởi chạy container đơn giản đến các tình huống nâng cao như kết nối từ ứng dụng bên ngoài, lưu trữ dữ liệu, và quản lý nhiều container. Dù bạn là người mới bắt đầu hay đã có kinh nghiệm, hướng dẫn này sẽ giúp bạn tự tin làm việc với MySQL trên Docker.

Khởi động MySQL container cơ bản

Để bắt đầu, bạn cần có Docker đã cài đặt trên máy. Mở terminal và chạy lệnh sau để khởi động một container MySQL:

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:8

Lệnh này sẽ tải image MySQL phiên bản 8 từ Docker Hub (nếu chưa có) và khởi chạy container với tên mysql-container. Biến môi trường MYSQL_ROOT_PASSWORD thiết lập mật khẩu cho tài khoản root, đây là bước bắt buộc để bảo mật.

Để kiểm tra container đang chạy, dùng:

docker ps

Nếu bạn muốn truy cập MySQL shell bên trong container, chạy:

docker exec -it mysql-container mysql -uroot -p

Nhập mật khẩu đã thiết lập, bạn sẽ được đưa vào prompt của MySQL.

Lưu trữ dữ liệu bên ngoài container

Một vấn đề quan trọng khi làm việc với container là dữ liệu sẽ bị mất khi container bị xóa. Để tránh điều này, bạn nên sử dụng volume để lưu trữ dữ liệu MySQL bên ngoài container.

Có hai cách chính để làm điều này:

1. Sử dụng named volume:

docker run --name mysql-container -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:8

Trong lệnh này, mysql-data là tên của volume, dữ liệu sẽ được lưu tại /var/lib/mysql bên trong container và được quản lý bởi Docker.

2. Mount thư mục host vào container:

docker run --name mysql-container -v /path/to/local/dir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:8

Cách này cho phép bạn truy cập trực tiếp vào thư mục dữ liệu trên máy host, tiện lợi cho việc backup hoặc di chuyển dữ liệu.

Kết nối MySQL từ ứng dụng bên ngoài

Trong môi trường phát triển, thường bạn sẽ cần kết nối MySQL từ ứng dụng (ví dụ: PHP, Python, Node.js) chạy trên host hoặc container khác. Để làm điều này, bạn cần publish port của MySQL ra ngoài:

Quảng cáo

300x250 In-Content Advertisement

docker run --name mysql-container -p 3306:3306 -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:8

Lệnh này map port 3306 (mặc định của MySQL) của container ra port 3306 trên host. Bây giờ, bạn có thể kết nối từ ứng dụng bằng localhost:3306 hoặc IP của host.

Nếu bạn muốn container MySQL và ứng dụng nằm trên cùng một mạng riêng (recommended cho môi trường sản xuất), bạn có thể tạo network và attach container vào đó:

docker network create my-network
docker run --name mysql-container --network my-network -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:8
docker run --name my-app --network my-network -d my-app-image

Trong ứng dụng, kết nối đến MySQL bằng hostname mysql-container.

Quản lý nhiều MySQL container

Trong một số dự án, bạn có thể cần chạy nhiều phiên bản MySQL khác nhau hoặc nhiều database cho mục đích testing. Docker giúp việc này trở nên đơn giản:

# MySQL 5.7
docker run --name mysql57 -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:5.7

# MySQL 8.0 docker run --name mysql80 -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:8

Mỗi container sẽ chạy độc lập, với dữ liệu và cấu hình riêng. Bạn có thể dễ dàng start, stop, hoặc xóa từng container mà không ảnh hưởng đến các container khác.

Một số mẹo và lưu ý

- Backup và restore: Để backup dữ liệu, bạn có thể dùng docker exec để chạy mysqldump bên trong container, hoặc copy file dữ liệu từ volume ra ngoài.

- Health check: Thêm option --health-cmd để Docker kiểm tra trạng thái của MySQL và chỉ báo khi container sẵn sàng nhận kết nối.

- Biến môi trường: Ngoài MYSQL_ROOT_PASSWORD, bạn có thể thiết lập MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD để tự động tạo database và user khi khởi động.

- Security: Tránh expose port MySQL ra internet nếu không cần thiết. Sử dụng network riêng và chỉ cho phép kết nối từ các dịch vụ tin cậy.

Kết luận

Docker đã đơn giản hóa việc làm việc với MySQL, giúp developer nhanh chóng thiết lập môi trường phát triển và triển khai ứng dụng một cách nhất quán. Qua hướng dẫn này, bạn đã biết cách khởi chạy MySQL container, lưu trữ dữ liệu an toàn, kết nối từ ứng dụng, và quản lý nhiều môi trường khác nhau.

Hãy thử áp dụng những kiến thức này vào dự án của bạn và tận hưởng sự tiện lợi mà Docker mang lại. Nếu có bất kỳ thắc mắc hoặc góp ý, hãy để lại bình luận bên dưới. Chúc bạn thành công!

Quảng cáo

728x90 Bottom Advertisement

Thay thế bằng mã Google AdSense

Chia sẻ bài viết

Facebook Twitter

Bình luận

Chia sẻ ý kiến của bạn về bài viết này

Viết bình luận

Bình luận của bạn sẽ được kiểm duyệt trước khi hiển thị

Chưa có bình luận nào

Hãy là người đầu tiên bình luận về bài viết này!