MySQL là một trong những hệ thống quản lý cơ sở dữ liệu (CSDL) phổ biến nhất trên toàn cầu. Đây là một phần quan trọng không thể thiếu khi xây dựng các ứng dụng web sử dụng nhiều ngôn ngữ lập trình như PHP, Python, Ruby… Trong bài viết này, chúng tôi sẽ cung cấp hướng dẫn về việc đóng gói CSDL MySQL bằng Docker để giúp bạn thực hiện quá trình này một cách dễ dàng.
Để tiến hành Docker hóa MySQL cho môi trường phát triển ứng dụng, các bạn cần các tiền đề sau:
- Đã cài đặt Docker và Docker Compose
- Tham khảo trang Docker chính thức của MySQL tại đây
Tạo và khởi động MySQL container
Đây là lệnh tạo và chạy 1 docker container đơn giản nhất.
docker run --name <mysql_name> -e MYSQL_ROOT_PASSWORD=<root_password> -d mysql:<tag>
Với
- <mysql_name> là tên của mysql container
- <root_password> là mật khẩu của user root
- <tag> là version của mysql. mysql:latest là sẽ sử dụng version mới nhất của MySQL
VD:
docker run --name vinasupport_mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:lastest
Truy cập vào MySQL Container
docker exec -it <mysql_name> bash
Chỉ định thư mục MySQL Config
docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-v để map thư mục /etc/mysql/conf.d ra ngoài.
Chỉ định thư mục Data của MySQL Container
Để khi mỗi lần tạo và xóa container không làm mất dữ liệu, chúng ta cần mount thư mục data ra ngoài như sau:
docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
Backup và khôi phục Dữ liệu từ MySQL
Để backup dữ liệu
docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
Để khôi phục dữ liệu
docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql
Sử dụng Docker Compose để tạo MySQL Container
Tạo file docker-compose.yml có chứa nội dung sau:
version: '3.1' services: db: image: mysql container_name: mysql-server command: --default-authentication-plugin=mysql_native_password restart: always environment: - MYSQL_ROOT_PASSWORD=123456 - MYSQL_USER=vinasupport - MYSQL_PASSWORD=123456 - MYSQL_DATABASE=vinasupport ports: - "3307:3306" volumes: - ./mysql-data:/var/lib/mysql
Chú ý:
- Port 3306 trong container sẽ được map ra ngoài host là 3307
- Nó sẽ tạo 1 volume cho thư mục data /var/lib/mysql ra thư mục ./mysql-data ở host
Để tạo và khởi động container chúng ta sử dụng command sau:
docker-compose up
Nếu bấm ctrl + c thì nó sẽ stop container vì vậy để chạy background sử dụng command bên dưới.
docker-compose up -d