Giới thiệu
Docker đã trở thành công cụ không thể thiếu trong việc đóng gói và triển khai ứng dụng, giúp môi trường phát triển trở nên đồng nhất và dễ dàng chia sẻ. Khi làm việc với cơ sở dữ liệu, việc cài đặt và quản lý MySQL trên máy thật có thể gây ra nhiều phiền toái về phiên bản, cấu hình và xung đột. Docker giúp giải quyết vấn đề này bằng cách cung cấp một container MySQL tách biệt, dễ dàng khởi động, dừng và xóa khi cần. Trong bài viết này, chúng ta sẽ tìm hiểu cách setup MySQL trong Docker một cách nhanh chóng và hiệu quả, từ những bước cơ bản đến các tùy chỉnh nâng cao.
Cài đặt Docker
Để bắt đầu, bạn cần cài đặt Docker trên máy của mình. Docker có sẵn cho Windows, macOS và Linux. Truy cập trang chủ Docker và tải về phiên bản phù hợp với hệ điều hành của bạn. Sau khi cài đặt xong, mở terminal hoặc command prompt và chạy lệnh:
docker --version
Nếu Docker đã được cài đặt thành công, bạn sẽ thấy thông báo phiên bản. Tiếp theo, đăng nhập vào Docker Hub (nếu cần) để có thể pull image từ kho chính thức.
Pull và chạy MySQL container
Docker cung cấp image MySQL chính thức trên Docker Hub. Để pull image mới nhất, sử dụng lệnh:
docker pull mysql:latest
Sau khi pull xong, bạn có thể chạy container MySQL với các tham số cơ bản:
docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=yourpassword -p 3306:3306 mysql:latest
Giải thích các tham số:
- -d: chạy container ở chế độ background.
- --name: đặt tên cho container, giúp dễ dàng quản lý.
- -e MYSQL_ROOT_PASSWORD: thiết lập mật khẩu cho tài khoản root.
- -p 3306:3306: ánh xạ cổng 3306 bên trong container ra cổng 3306 trên host.
- mysql:latest: tên image và tag sử dụng.
Với lệnh này, bạn đã có một MySQL server sẵn sàng lắng nghe trên cổng 3306 của máy host.
Kiểm tra và quản lý container
Để kiểm tra xem container có đang chạy hay không, dùng lệnh:
docker ps
Nếu container đang hoạt động, bạn sẽ thấy nó trong danh sách. Để kết nối vào MySQL từ host, bạn có thể dùng client command line hoặc các công cụ như MySQL Workbench. Ví dụ, kết nối từ command line:
docker exec -it mysql-container mysql -uroot -pyourpassword
Ngoài ra, để xem logs của container:
docker logs mysql-container
Để dừng container:
docker stop mysql-container
Để xóa container (dữ liệu sẽ mất nếu không mount volume):
docker rm mysql-container
Mount volume để lưu dữ liệu
Một vấn đề quan trọng khi sử dụng container là dữ liệu sẽ mất khi container bị xóa. Để lưu trữ dữ liệu MySQL một cách bền vững, bạn cần mount một thư mục trên host vào container. Ví dụ:
Quảng cáo
300x250 In-Content Advertisement
docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=yourpassword -p 3306:3306 -v mysql_data:/var/lib/mysql mysql:latest
Hoặc mount vào một thư mục cụ thể trên host:
docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=yourpassword -p 3306:3306 -v /path/to/host/data:/var/lib/mysql mysql:latest
Với cách này, dữ liệu MySQL sẽ được lưu trữ trong thư mục /path/to/host/data trên máy host và vẫn tồn tại ngay cả khi container bị xóa.
Sử dụng file docker-compose
Để đơn giản hóa việc setup và quản lý, bạn có thể sử dụng docker-compose. Tạo một file docker-compose.yml với nội dung:
version: '3.8'
services:
mysql:
image: mysql:latest
container_name: mysql-container
environment:
MYSQL_ROOT_PASSWORD: yourpassword
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
restart: unless-stopped
volumes:
mysql_data:
Chạy lệnh:
docker-compose up -d
Compose sẽ tự động pull image (nếu chưa có) và khởi động container với cấu hình đã định nghĩa. Để dừng và xóa:
docker-compose down
Các tùy chỉnh nâng cao
MySQL container hỗ trợ nhiều biến môi trường để tùy chỉnh. Ví dụ:
- MYSQL_DATABASE: tên database mặc định khi khởi tạo.
- MYSQL_USER và MYSQL_PASSWORD: tạo tài khoản user mới.
- MYSQL_ROOT_HOST: cho phép root login từ host cụ thể.
Bạn cũng có thể tùy chỉnh file cấu hình MySQL bằng cách mount file my.cnf vào /etc/mysql/conf.d/. Ví dụ:
-v /path/to/my.cnf:/etc/mysql/conf.d/custom.cnf
Nếu cần, bạn có thể chạy script SQL khi khởi tạo container bằng cách mount thư mục chứa file .sql vào /docker-entrypoint-initdb.d/.
Kết luận
Setup MySQL trong Docker không chỉ giúp tiết kiệm thời gian mà còn đảm bảo môi trường phát triển đồng nhất giữa các thành viên trong nhóm. Với vài dòng lệnh đơn giản, bạn đã có một MySQL server hoàn chỉnh, có thể tùy chỉnh và mở rộng theo nhu cầu. Việc sử dụng volume giúp bảo vệ dữ liệu, trong khi docker-compose giúp quản lý dễ dàng hơn. Docker thực sự là giải pháp lý tưởng cho những ai muốn nhanh chóng bắt tay vào làm việc với MySQL mà không phải lo lắng về cài đặt và cấu hình phức tạp.