Vì sao mình ngưng dùng docker


Có hai lý do cho hành động này. Thứ nhất xuất phát từ góc nhìn của khách hàng, và kế đến là của người lập trình.

Với khách hàng, họ trả tiền cho việc ta làm để đem đến giá trị cho họ, không phải cho việc đem lại giá trị cho ta. Trong bài viết [Tinh gọn Là gì?] từ Viện nghiên cứu Tinh gọn, ý tưởng cốt lõi của tinh gọn là tối đa hóa giá trị cho khách hàng trong khi giảm thiểu hao phí. Với tinh thần đó, quy trình ánh xạ giá trị phân chia các thao tác thành ba loại, đem lại giá trị, không đem lại giá trị nhưng cần thiết, hoàn toàn không đem lại giá trị. Mình muốn nói "khách hàng" ở đây là người sử dụng sản phẩm cuối cùng, kể cả phần mềm.

Rõ ràng, các công việc liên quan đến docker không thuộc loại thứ nhất. Chúng không đem lại giá trị gì cho khách hàng. Chúng chỉ giúp người lập trình phát triển và triển khai các ứng dụng.

Từ góc nhìn của người lập trình, khi làm việc với một cái gì, mình cần tìm lý do vì sao dùng cái đó. Với docker, và đặc biệt là multi-container, mình bắt gặp bài viết [Vì sao dùng Docker, Tạo một Multi-Container]. Có hai lý do nhưng từ sự phân tích [5 Tại sao], một cái gây ra cái kia.

Lý do thứ nhất, "Khó mà duy trì các môi trường nhất quán", là do cái thứ hai "Mất thời gian để cài các thành phần cần thiết cho ứng dụng trên máy cục bộ". Khi không có nhiều thời gian để cài, ta thường bỏ qua một số việc, tưởng chừng tốn thời gian nhưng lại rất quan trọng để lặp lại việc cài cho các môi trường khác. Đó là ghi lại các bước để cài.

Nhưng rồi, thay vì tiếp tục phân tích [5 Tại sao], ta nhanh chóng sử dụng một giải pháp tạo ra thêm công việc cho ta, tên là docker. Giờ đây, cạnh việc quản lý các phần cần thiết cho ứng dụng đang được phát triển, ta còn phải quản lý các phần cần thiết cho các ảnh/kho chứa của docker. Đây là một dạng lặp lại công việc.

Bây giờ, tiếp tục với lý do thứ hai, tại sao mất thời gian cho việc cài đặt? Vì ta không có đoạn lệnh để tự động làm việc đó. Tại sao ta không có? Vì ta không có thời gian để viết chúng. Vậy, tại sao ta có thời gian để học và xây dựng các ảnh docker mà ta không có thời gian để viết các đoạn lệnh đơn giản để cài các phần cần thiết? Với việc viết các đoạn lệnh, ta không chỉ làm việc dễ dàng hơn, Các bạn Quản trị Hệ thống sẽ cảm ơn ta vì họ cũng làm việc dễ hơn. Một lợi ích nữa là, giả sử ta có một bộ các đoạn lệnh cho mỗi môi trường cần cài ứng dụng, ta sẽ biết chính xác điều kiện các môi trường mà ta sẽ triển khai ứng dụng xuất sắc của ta: môi trường phát triển, kiểm thử, trung chuyển, sản xuất.

Vậy, thay vì lệ thuộc vào một công nghệ tạo thêm công việc cho mình, mình tiếp tục thông lệ của mình là duy trì các bộ đoạn lệnh để cài các phần cần thiết. Mình cũng ưa thích cách Python quản lý môi trường ứng dụng. Thật dễ dàng để tạo một môi trường ảo mới và cài đặt tất cả các phần cần thiết cho ứng dụng mới. Với các môi trường tách biệt, ta sẽ không bao giờ có xung đột.

[Tinh gọn Là gì?]: https://www.lean.org/whatslean/
[5 Tại sao]: https://www.lean.org/lexicon/five-whys
[Vì sao dùng Docker, Tạo một Multi-Container]: https://dev.to/abiodunjames/why-docker-creating-a-multi-container-application-with-docker--1gpb