0

CUỘC ĐỐI ĐẦU SINH TỬ TRONG DOCKER: MARIADB:LATEST VS MARIADB:10.2.9

Khi xây dựng một file docker-compose.yml để chạy cơ sở dữ liệu MariaDB, sự lựa chọn giữa việc điền tag :latest hay :10.2.9 sẽ quyết định xem hệ thống của bạn là một tòa lâu đài vững chắc hay là một quả bom hẹn giờ.


1. mariadb:latest - Quả Bom Hẹn Giờ Cho Dữ Liệu

Khi bạn khai báo image: mariadb:latest, Docker sẽ tự động tải phiên bản MariaDB mới nhất đang có mặt trên Docker Hub tại thời điểm đó (ví dụ: bản 11.2).

Điều này sinh ra 3 hiểm họa chí mạng:

  • Sự cố bất đồng bộ Môi trường (Cỗ máy thời gian bị hỏng): Hôm nay bạn code ở Local, Docker kéo bản 11.2. Nửa năm sau có nhân sự mới vào team, họ chạy lại lệnh docker-compose up, Docker lại kéo bản 11.5. Code chạy trên máy bạn thì ngon, sang máy người mới thì lỗi cú pháp SQL vì bản 11.5 đã thay đổi một số hàm mặc định. Đội dev sẽ mất hàng tuần chỉ để cãi nhau xem lỗi do code hay do máy.
  • Thảm họa Nâng cấp ngầm (Silent Upgrade): Trên Server Production, mỗi lần restart container, nếu Docker Hub có bản MariaDB mới (ví dụ từ 11.2 lên 11.6), hệ thống sẽ tự động cập nhật. Sự thay đổi Engine Database đột ngột mà không có sự kiểm thử (Testing) trước sẽ khiến hệ thống sập toàn tập.
  • Xung đột Volume (Data Corruption): Đây là điều tồi tệ nhất. Dữ liệu vật lý (các file .ibd của InnoDB) được lưu trữ trên ổ cứng (Volume) định dạng theo cấu trúc của bản 11.2. Khi bị tự động nâng cấp lên 11.6, database engine mới không đọc được định dạng file cũ. Kết quả: Database crash ngay lúc khởi động, báo lỗi Corrupted, và công ty đối mặt với nguy cơ mất trắng dữ liệu khách hàng.

2. mariadb:10.2.9 - Bức Tường Thành Kiên Cố (The Immutable Shield)

Khai báo rõ ràng phiên bản image: mariadb:10.2.9 chính là giải pháp của một Kỹ sư hệ thống (System Engineer) thực thụ. Con số 10.2.9 tuân theo chuẩn Semantic Versioning (SemVer):

  • 10 (Major): Phiên bản chính, thay đổi kiến trúc lõi.
  • 2 (Minor): Phiên bản phụ, thêm tính năng mới.
  • 9 (Patch): Phiên bản vá lỗi, vá lỗ hổng bảo mật.

Những lợi ích tuyệt đối khi khóa cứng phiên bản:

  • Tính Lặp Lại Hoàn Hảo (Reproducibility): Bất kể bạn chạy file cấu hình này ở Local, trên máy Test, hay trên Production vào 5 năm sau, Docker cũng sẽ chỉ tải đúng và duy nhất phiên bản 10.2.9. Môi trường ở khắp mọi nơi giống nhau đến từng byte.
  • An toàn cho Volume Dữ liệu: Vì phiên bản Database không bao giờ tự động nhảy số, cấu trúc file vật lý lưu trên ổ cứng sẽ luôn tương thích 100% với Engine đang chạy.
  • Làm chủ vòng đời phần mềm (Lifecycle Control): Việc nâng cấp version (ví dụ lên 10.3.0) sẽ không bao giờ xảy ra ngẫu nhiên. Nó bắt buộc phải thông qua một quyết định có chủ đích của con người: Dev phải tự tay sửa file config thành :10.3.0, tự backup dữ liệu, tự test trước trên môi trường Staging rồi mới đẩy lên Production.

💡 Tóm Lại

Trong thế giới của Stateless App (ứng dụng không lưu trạng thái như API Backend), dùng :latest đã là một tội ác. Nhưng trong thế giới của Stateful App (ứng dụng lưu trữ dữ liệu lõi như MariaDB, PostgreSQL, Redis), việc dùng :latest chẳng khác nào bạn giao sinh mạng của công ty cho một sự "hên xui" của các bản cập nhật trên mạng.

Hãy luôn "khóa cứng" (pin version) bằng những thông số chính xác như :10.2.9. Chậm mà chắc, đó là triết lý thiết kế hệ thống bền vững.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí