Chuyển đến nội dung

Giải pháp · Container

Docker cần máy chủ cỡ nào?

Container là các tiến trình dùng chung một kernel, không phải máy ảo thu nhỏ: daemon chiếm khoảng 100 MB và mọi thứ sau đó chỉ là các tiến trình của bạn. Vì vậy câu trả lời nhỏ hơn bạn nghĩ: một proxy, một ứng dụng, một cơ sở dữ liệu và một cache cộng lại khoảng 515 MB, vừa thoải mái trên BD-8 giá $12.90.

Một container thực sự chiếm bao nhiêu

Khoảng ước tính, không phải benchmark

Image, cấu hình và lưu lượng của bạn ảnh hưởng đến các con số này nhiều hơn bất kỳ bảng nào. Hãy chạy docker stats trên stack của bạn: đó là con số duy nhất áp dụng cho bạn.

Bộ nhớ thường trú thông thường của các khối lượng công việc container phổ biến
ContainerBộ nhớ thông thườngVừa trên BD-8 (8 GB)
Một reverse proxynginx, Caddy, Traefik15–60 MB129 ở mức cao
Một ứng dụng web nhỏNode, Python, Go: một tiến trình60–200 MB38 ở mức cao
PostgreSQL hoặc MySQLtập dữ liệu nhỏ, pool mặc định200–500 MB15 ở mức cao
Redislàm cache, giới hạn bởi maxmemory20–200 MB38 ở mức cao
Một dịch vụ JVMJava, Kotlin, Elasticsearch500–2000 MB3 ở mức cao

Phép tính

Mỗi gói chứa được bao nhiêu

Bộ nhớ, trừ 300 MB cho hệ điều hành và 100 MB cho daemon, chia cho lượng bộ nhớ container của bạn chiếm. Cột giữa là một stack hoàn chỉnh (proxy, ứng dụng, cơ sở dữ liệu, cache) khoảng 515 MB.

Dung lượng container và stack theo từng gói, kèm ổ đĩa và giá trực tiếp
GóiRAMStack hoàn chỉnhỨng dụng nhỏỔ đĩaGiáTriển khai
VPS-11 GB1325 GB$9.90Triển khai
BD-88 GB1538100 GB$12.90Triển khai
BD-1212 GB2359200 GB$17.90Triển khai
BD-2424 GB46120300 GB$31.90Triển khai

Ổ đĩa là điều bất ngờ thứ hai, và người ta gặp nó muộn hơn: image, volume và log tích tụ âm thầm. Hãy đặt docker system prune vào cron hằng tuần trước khi nó trở nên cấp bách, đừng đợi đến sau.

So với chính chúng tôi

Khi nào bạn không nên mua

Nền tảng container được quản trị đắt hơn vì nó lo việc vận hành. Đó là một thứ thực sự đáng để mua.

VPS trao cho bạn quyền root và giao cho bạn việc cập nhật, khởi động lại, chứng chỉ và trực sự cố. Cách này rẻ hơn rất nhiều và thực sự tốn công hơn. Nếu bạn không muốn làm những việc đó, nền tảng được quản trị là câu trả lời trung thực, và chúng tôi thà giới thiệu nó còn hơn bán một máy rồi bị bỏ mặc với daemon chưa vá lỗi phơi ra internet. Hai lời khuyên nhỏ hơn cùng tinh thần: đặt giới hạn bộ nhớ cho mọi container để container gặp sự cố bị dừng thay vì cơ sở dữ liệu của bạn, và đừng dùng Kubernetes trên một máy duy nhất: một bộ điều phối không có gì để lập lịch chỉ là sự phức tạp.

Câu hỏi

Những điều mọi người hỏi trước khi mua.

Bản thân Docker dùng bao nhiêu RAM?
Rất ít, và đây là phần khiến người ta bất ngờ. Docker daemon chiếm khoảng 100 MB và mỗi container sau đó chỉ là một tiến trình: không có hệ điều hành thứ hai, không có kernel thứ hai, không có chi phí cố định cho mỗi container như với máy ảo. Vì vậy phép tính đơn giản là: bộ nhớ của máy, trừ khoảng 300 MB cho hệ điều hành và 100 MB cho daemon, chia cho các tiến trình bạn thực sự chạy.
Một VPS nhỏ chạy được bao nhiêu container?
Nhiều hơn câu hỏi ngụ ý, vì "một container" không phải là đơn vị kích thước. Mười reverse proxy và một Elasticsearch là những máy khác nhau hoàn toàn. Trên BD-8 (8 GB giá $12.90), một proxy, một ứng dụng web, một cơ sở dữ liệu và một cache cộng lại khoảng 515 MB, để trống phần lớn máy. Bảng phía trên đã làm phép chia; hãy chạy `docker stats` trên stack của bạn để có con số thực sự áp dụng cho bạn.
VPS có rẻ hơn nền tảng container được quản trị không?
Hầu như luôn rẻ hơn về giá, nhưng đó không phải toàn bộ phép so sánh. Nền tảng tính phí cao hơn vì nó lo việc vận hành: cập nhật, khởi động lại, chứng chỉ, trực sự cố lúc 3 giờ sáng. VPS trao cho bạn quyền root và giao lại tất cả những việc đó cho bạn. Nếu bạn muốn chạy container và sẵn sàng tự đảm nhận công việc đó, VPS rẻ hơn rất nhiều. Nếu không, hãy trả tiền cho nền tảng; chúng tôi thà nói thẳng còn hơn bán cho bạn một máy rồi bị bỏ mặc với daemon chưa vá lỗi.
Tôi có cần Docker Swarm hay Kubernetes không?
Trên một máy thì không. Compose là đủ cho một stack nằm trên một máy chủ, và đó là câu trả lời đúng cho tuyệt đại đa số hệ thống tự host: việc của bộ điều phối là lập lịch trên nhiều máy, và với một máy thì không có gì để lập lịch. Hãy dùng Kubernetes khi bạn thực sự có nhiều máy và có lý do cho sự phức tạp đó, đừng dùng sớm hơn.
Cái gì hỏng trước: bộ nhớ, CPU hay ổ đĩa?
Thường là bộ nhớ, và nó hỏng một cách rõ ràng: trình diệt khi hết bộ nhớ của kernel chọn một tiến trình và kết thúc nó, trông như một container tự khởi động lại bí ẩn. Hãy đặt giới hạn bộ nhớ cho từng container để container gặp sự cố là cái bị dừng chứ không phải cơ sở dữ liệu của bạn. Ổ đĩa là điều bất ngờ thứ hai: image, volume và log tích tụ âm thầm, nên `docker system prune` nên nằm trong cron hằng tuần từ lâu trước khi nó trở nên cấp bách.
Máy chủ nên chạy image nào?
Bất kỳ image nào của chúng tôi: mọi gói đều chạy mọi image và Docker chạy trên tất cả. Ubuntu LTS là lựa chọn mặc định đáng dùng nếu bạn không có ý kiến riêng, đơn giản vì phần lớn tài liệu về container giả định dùng nó. Bản phân phối ít quan trọng hơn nhiều so với cảm giác: container mang theo userland riêng, nên máy chủ gần như chỉ là một kernel và một daemon.