Khi mọi người nói về việc chạy cơ sở dữ liệu trong Docker, họ không có nghĩa là lưu trữ dữ liệu trong một thùng chứa; họ đang nói về việc có một hình ảnh docker với phần mềm DB và gắn dữ liệu dưới dạng một khối lượng (một khối lượng liên kết, không phải là một khối lượng container).
Các tập là một phần thiết yếu trong Docker, và không phải là thứ gì đó dễ vỡ hoặc chỉ được xử lý. Docker không chỉ được thực hiện cho các dịch vụ phi trạng thái (vi mô).
Mong muốn như tôi có thể, tôi không thể tìm thấy lý do kỹ thuật để không chạy cơ sở dữ liệu trong Docker, vì vậy thật không may, tôi sẽ chọn phía bên kia của đối số và do đó có thể không cung cấp cho bạn câu trả lời mà bạn đang tìm kiếm.
(Tôi đang sử dụng Oracle làm ví dụ vì tôi quen thuộc với nó, cả kim loại trần và neo, và bởi vì nó khá là một con thú khét tiếng vì chỉ hoạt động một chút không tầm thường nếu bạn đi qua các cài đặt mặc định.)
- Việc tự đóng gói phần mềm DB trong một thùng chứa mang lại cho bạn những lợi ích thông thường - có cùng một phiên bản ở mọi nơi, tránh các vấn đề thư viện / chia sẻ phụ thuộc, có thể tạo ra DB chính xác trên máy tính xách tay của nhà phát triển hoặc bất cứ nơi nào bạn cần.
- Đó là một snap khiến nó chạy ở bất cứ đâu; cập nhật là tầm thường, và như vậy. Tất cả các lợi ích Docker áp dụng. Có một hình ảnh Oracle trên Dockerhub cho phép bạn quay DB hoạt động trong một hoặc ba phút (và tất nhiên là cho cả những người khác).
- Mọi người đã thực hiện các bài kiểm tra hiệu suất và không tìm thấy sự khác biệt I / O giữa khối lượng và kim loại trần ( https://www.percona.com/blog/2016/02/11/measuring-docker-io-overhead/ , https: // stackoverflow .com / câu hỏi / 21889053 / what-is-the-runtime-Performance-cost-of-a-docker-container ).
- Dù sao, nó không giống như Docker bằng cách nào đó chặn tất cả I / O. Nó chỉ sáng tạo với các công cụ Linux tiêu chuẩn (liên kết gắn kết trong trường hợp này, xáo trộn các bảng nhân bên trong làm cho Docker-fu hoàn toàn có thể).
- Rõ ràng điều đó không có nghĩa là bạn có thể chạy hai phiên bản của DB và chỉ để chúng hoạt động trên cùng một tệp, nhưng không ai ngụ ý điều đó. Docker không cung cấp cho bạn quyền truy cập tự động đồng thời và không có phép thuật vào các tập, và không bao giờ giả vờ làm như vậy. Phần còn lại của lợi ích vẫn được áp dụng. Nếu bản thân DB của bạn không phát hiện ra các xung đột như thế này, tốt hơn hết bạn nên cung cấp tập lệnh CMD cho hình ảnh từ chối quay một thùng chứa thứ hai khi âm lượng đã được sử dụng.
- Bạn phải cẩn thận hơn một chút khi quay / tắt container (giống như bạn sẽ không đơn giản tắt máy chủ DB kim loại trần), nhưng điều đó khá dễ quản lý.
Bây giờ, tùy thuộc vào hoàn cảnh, có thể có những lý do mềm để không làm điều đó:
- Ví dụ, Oracle (công ty) chắc chắn sẽ không hỗ trợ bạn nếu bạn chạy RDBMS của họ trong bộ chứa Docker. Nhưng có lẽ bạn đang sử dụng các hình ảnh Oracle RDBMS được dockerized chỉ cho các nhà phát triển và môi trường thử nghiệm, nơi bạn sẽ không cần sự hỗ trợ của họ trong mọi trường hợp, hãy đặt nó cho một máy chủ sản xuất kim loại trần. (Nhưng đừng quên thanh toán giấy phép của bạn ...).
- Nếu các anh chàng không quen với Docker, có thể dễ dàng hơn một chút để vô tình giết tất cả mọi thứ, phá hủy các tệp dữ liệu của bạn, v.v.
- Nếu bạn đã có máy DB kim loại chuyên dụng lớn, với số lượng lớn bộ lưu trữ SAN chuyên dụng rất nhanh và không có gì khác, thì sẽ không có lý do gì khi sử dụng Docker để chứa chúng vì bạn sẽ không bao giờ quay máy chủ khác khi ở đó là 100 GB hoặc thậm chí TB dữ liệu. Xét cho cùng, đối với sản xuất, một RDBMS như Oracle rất, rất tiên tiến trong tất cả các bản sao, tích hợp dữ liệu, chuyển đổi dự phòng không ngừng hoạt động, v.v. Lưu ý rằng đối số này chỉ nói "bạn không cần phải chứa RDBMS". Nó không nói "bạn không nên làm điều đó" - có thể bạn muốn làm điều đó bởi vì bạn muốn triển khai nâng cấp phần mềm cơ sở dữ liệu thông qua các container hoặc vì bất kỳ lý do nào khác mà bạn có thể tưởng tượng.
Vì vậy, có bạn đi. Bằng mọi cách, hãy cập bến DB của bạn, ít nhất là cho các nhà phát triển của bạn (người sẽ biết ơn mãi mãi) và môi trường thử nghiệm của bạn. Về sản xuất, nó sẽ đi xuống để hương vị, và có ít nhất, tôi cũng muốn các giải pháp mà ngồi tốt nhất với DBA / Ops chuyên - nếu họ có hàng chục năm kinh nghiệm làm việc bare metal máy chủ DB, sau đó bằng mọi cách tin tưởng họ để tiếp tục như vậy. Nhưng nếu bạn là một người khởi nghiệp có tất cả CNTT trong đám mây, thì một Docker container sẽ chỉ là một mảnh hành nữa trong toàn bộ bức tranh.