09/10/2026 · VietTechies · Biên tập

Ngày 15 tháng 3 năm 2013, tại hội nghị PyCon US ở Santa Clara, Solomon Hykes trình bày một bài nói chớp nhoáng (lightning talk) mang tên “The future of Linux Containers”. Ở PyCon, mỗi bài nói kiểu này dài năm phút. Phần giới thiệu trong chương trình hội nghị tóm gọn thông điệp của bài nói: dotCloud đã vận hành container (gói ứng dụng chạy độc lập) trong nội bộ từ trước; công nghệ này phức tạp nên họ chưa từng nói ra ngoài. “Cho đến bây giờ: Docker.”
Một tuần sau, ngày 23 tháng 3, Docker 0.1.0 xuất hiện trong nhật ký thay đổi (changelog) của dự án, và phần ghi chú cho phiên bản này mở đầu bằng dòng: “Bản phát hành đầu tiên.” Bài nói thì ngắn, nhưng quyết định đằng sau nó thì không. Hykes đã chọn đặt cược cả dotCloud vào một công cụ miễn phí, thôi chia sức giữa công cụ ấy và mảng kinh doanh đang nuôi sống công ty.
Trước ngã ba đường
dotCloud là một công ty cung cấp nền tảng dịch vụ đám mây (PaaS): lập trình viên đẩy code lên, dotCloud lo phần chạy. Công ty từng tham gia vườn ươm khởi nghiệp Y Combinator năm 2010 và có khách hàng thật sự. Trong một cuộc phỏng vấn với Y Combinator năm 2016, Hykes mô tả vấn đề rất bình thản: “dotCloud hoàn toàn không phải là một thất bại, nhưng về cơ bản là nó thành công chưa đủ nhanh.”
Đội ngũ dotCloud vốn đã đi tìm một thứ gì đó lớn hơn. “Docker có lẽ là lần thứ sáu chúng tôi thử làm một điều gì đó để giải quyết vấn đề ấy,” Hykes nói. “Còn năm lần trước thì rõ ràng đều đã thất bại.” Ông kể rằng vào khoảng cuối năm 2012, “tôi đại loại là đã tự chốt với bản thân”. Theo lời ông, thời điểm bắt tay vào làm “về cơ bản là đầu năm 2013”.
Ba phương án
Các nguồn tư liệu mô tả ba hướng đi thực tế, chứ không phải một loạt bản ghi nhớ chiến lược bí mật:
- Tiếp tục làm PaaS. Mảng này có người dùng trả tiền, nhưng theo chính lời Hykes thì tăng trưởng không đủ nhanh.
- Làm song song cả hai. Giữ PaaS chạy hết tốc lực, đồng thời làm thứ mới như một dự án phụ. Đó là cách dotCloud đã làm với năm lần thử trước.
- Dồn toàn lực cho Docker, dưới dạng mã nguồn mở. Phát hành công khai công cụ container và để mảng kinh doanh cũ lùi xuống hàng thứ yếu.
Phương án thứ hai có vẻ là lựa chọn thận trọng. Nhưng Hykes nói thẳng thừng về nguyên nhân các lần trước thất bại: “Tôi nghĩ thật ra các lần đó thất bại là vì chúng tôi không dồn toàn lực. Chúng tôi đã cố làm cả hai.”
Hykes chọn gì và Docker thực chất là gì
Hykes chọn con đường thứ ba, nhưng lựa chọn ấy không dễ thuyết phục người khác. Theo SD Times, nhà đầu tư Dan Scholnick nhớ lại một cuộc họp hội đồng quản trị trong quý I năm 2013, “khi Hykes hỏi hội đồng liệu ông có thể mở mã nguồn Docker.io hay không”. Bài báo cho biết “hội đồng, kể cả Scholnick, đã lưỡng lự”. Các nguồn không ghi lại cụ thể hội đồng đã phản đối những gì, nên nếu bài viết này tự điền vào chỗ trống đó thì chẳng khác nào bịa chuyện. Còn kết quả thì tư liệu có ghi lại: tháng 3 năm đó, Docker ra mắt dưới dạng mã nguồn mở.
Đến đây cần đính chính một lầm tưởng phổ biến: Docker không phát minh ra container. Cơ chế jail của hệ điều hành FreeBSD, cho phép chia một máy thành nhiều môi trường tách biệt, đã được mô tả từ năm 2000. Tháng 1 năm 2008, Linux 2.6.24 bổ sung control groups và PID namespaces, hai tính năng lần lượt giúp giới hạn tài nguyên và cô lập các nhóm tiến trình. Docker thời đầu chạy trên LXC, bộ công cụ container cho Linux đã có từ trước; chính trang chủ Docker khi đó viết: “Docker bổ sung cho LXC một API cấp cao, hoạt động ở mức tiến trình.” Đóng góp của Docker nằm ở cách đóng gói và ở trải nghiệm dành cho lập trình viên: image (bản mẫu để tạo container) gồm nhiều lớp xếp chồng, một kho chứa (registry) để đẩy image lên và kéo về, cùng một giao diện dòng lệnh đơn giản. Ngay cả việc gọi quyết định năm 2013 là một cú chuyển hướng (pivot) cũng chỉ đúng một nửa. Hykes kể với SD Times rằng “trước khi làm PaaS, chúng tôi đã dành hai năm xây dựng một phiên bản Docker đầu tiên”. Năm 2013, công ty quay về với nền móng của chính mình.
Cái giá phải trả
Dồn toàn lực cho Docker kéo theo một cái giá trực tiếp. “Trong trường hợp của mình, chúng tôi đã phải cắt giảm nhân sự, vì không kham nổi việc vừa làm một thứ mới, vừa giữ cho việc đang làm chạy hết tốc lực,” Hykes nói. Công ty nhanh chóng thay đổi diện mạo. Tháng 7 năm 2013, Ben Golub trở thành giám đốc điều hành (CEO), còn Hykes chuyển sang làm giám đốc công nghệ (CTO). Ngày 29 tháng 10 năm 2013, dotCloud đổi tên thành Docker. Theo cách nói của SD Times, “đến tháng 10, cái tên DotCloud và kế hoạch PaaS đều đã bị vứt vào sọt rác”.
Tháng 8 năm 2014, Docker bán nền tảng dotCloud cùng khoảng 500 khách hàng cho công ty cloudControl ở Berlin. TechCrunch cho biết trong khoảng 50 nhân viên của Docker, vẫn còn bốn người chuyên lo nền tảng này, và Golub từ chối tiết lộ giá bán. Lý do ông đưa ra là công ty cần tập trung vào mảng container: “Mọi chuyện đã đến mức chúng tôi cần dồn toàn bộ công sức và nguồn lực vào đó.”
Phép thử của thời gian
Về mặt công nghệ, canh bạc năm 2013 được đền đáp rất nhanh. Khi Docker 1.0 ra mắt vào tháng 6 năm 2014, công ty nêu con số hơn 2,75 triệu lượt tải, còn trang Data Center Knowledge cho biết 95% đóng góp cho dự án đến từ bên ngoài công ty. Ngay từ bản 0.9, Docker đã chuyển lựa chọn mặc định từ LXC sang libcontainer, thư viện do chính Docker viết bằng ngôn ngữ Go để giao tiếp trực tiếp với nhân hệ điều hành (kernel). Dù vậy, LXC vẫn được giữ lại như một tùy chọn.
Còn về mặt kinh doanh, cái giá phải đánh đổi lộ ra muộn hơn. Kubernetes, do Google mở mã nguồn năm 2014, trở thành tiêu chuẩn để chạy container trong môi trường vận hành thực tế (production), vượt lên trước công cụ điều phối container của chính Docker. Tháng 3 năm 2018, Hykes rút khỏi công việc điều hành hằng ngày. Tháng 11 năm 2019, Docker bán cho Mirantis mảng doanh nghiệp cùng “hàng trăm khách hàng doanh nghiệp”, rồi quay về tập trung vào lập trình viên dưới thời CEO mới Scott Johnston. Một bài nhìn lại năm 2021 trên tạp chí Increment tóm gọn vấn đề trong một câu: “Docker giải quyết phần lớn vấn đề của người dùng quá tốt, mà lại miễn phí, đến mức chẳng còn mấy thứ để bán.”
Nhưng chừng ấy chuyện không chứng minh rằng quyết định năm 2013 là sai. Cũng trong bài viết đó, Kelsey Hightower nhận xét: “Tôi nghĩ họ đã làm đúng; họ đã dứt khoát chuyển hướng.” Con đường thận trọng trước đó đã thất bại năm lần. Con đường táo bạo thì tạo ra một tiêu chuẩn mà cả ngành áp dụng, dù công ty phát hành Docker chỉ thu về một phần giá trị.
Nguyên tắc rút ra
Bài học của Hykes về sự tập trung đến nay vẫn đúng: những thử nghiệm làm nửa vời thường lặng lẽ lụi tàn. Câu chuyện Docker còn đặt ra câu hỏi thứ hai mà các nhà sáng lập trong giới mã nguồn mở vẫn phải đối mặt. Trước khi dồn toàn lực để cho không một thứ gì đó, hãy tự hỏi: nếu thứ đó thành công vượt mọi dự báo, người ta vẫn sẽ cần trả tiền cho chúng ta vì điều gì?
Đọc bằng ngôn ngữ khác: English · Español · Deutsch · Français · Português (Brasil) · Tiếng Việt
Nguồn
- “Lightning Talk – The future of Linux Containers,” Solomon Hykes, PyCon US 2013 (PyVideo)
- Y Combinator, phỏng vấn Solomon Hykes về Docker và dotCloud, 2016
- Alex Handy, “Docker grows to harbor innovation,” SD Times, tháng 2 năm 2014
- Docker CHANGELOG (bản 0.1.0, 23 tháng 3 năm 2013), bản sao của kho moby/moby
- The Changelog, bài về việc dotCloud phát hành Docker, tháng 4 năm 2013
- TechCrunch, “Docker sells dotCloud to cloudControl to focus on core container business,” tháng 8 năm 2014
- Data Center Knowledge, bài về bản phát hành Docker 1.0, tháng 6 năm 2014
- Blog Docker, “Docker 0.9: introducing execution drivers and libcontainer,” tháng 3 năm 2014
- Poul-Henning Kamp và Robert N. M. Watson, “Jails: Confining the omnipotent root,” 2000
- Kernelnewbies, ghi chú phát hành Linux 2.6.24 (control groups, PID namespaces), 2008
- Solomon Hykes, “Au revoir,” blog Docker, tháng 3 năm 2018
- Mirantis, “Mirantis acquires Docker Enterprise,” tháng 11 năm 2019
- Thông cáo báo chí của Docker về hướng đi mới và CEO Scott Johnston, tháng 11 năm 2019
- Lucy Wyman, Increment, bài về Docker CE và EE, 2021
- Ảnh đầu bài: Solomon Hykes tại TechCrunch Disrupt Europe, London, tháng 10 năm 2014 (không phải bài nói tại PyCon 2013). TechCrunch, qua Wikimedia Commons, CC BY 2.0
