API cửa hàng chạy tốt trên máy người viết nhưng máy bạn báo không tìm thấy Node, hoặc kết nối database thất bại. Hai máy có cùng file server vẫn có thể khác runtime, dependency, cấu hình, quyền file và dịch vụ phụ thuộc. Trước khi học Docker, ta cần gọi đúng những phần đang khác nhau.
Đóng gói không chỉ là nén source. Nó mô tả một môi trường có thể tái tạo để chạy chương trình. Docker giúp đóng gói nhiều phần, nhưng không tự biết secret, dữ liệu đơn hàng hay địa chỉ database của môi trường đích. Phân biệt các phần này ngay từ đầu giúp tránh một image trông đầy đủ mà không phục vụ được request.
Lập inventory từ bằng chứng
Với API Node, ghi phiên bản Node, manifest dependency và lockfile. Ghi lệnh khởi động, thư mục làm việc, port nội bộ, địa chỉ listen và các biến cấu hình cần thiết. Với PostgreSQL, ghi phiên bản chính, tên database, cơ chế cấp credential và nơi dữ liệu phải lưu.
Đừng chỉ viết "cần Node". Một chương trình có thể dùng API chưa có trong phiên bản cũ. Đừng chỉ viết "npm install": dependency không được khóa có thể thay đổi giữa hai máy. Inventory tốt nói rõ điều cần biết để tái chạy và cách xác nhận thực tế.
Lab dùng node --version hoặc process.versions.node trong container. Đây là bằng chứng về runtime được dùng trong lần đó, không phải suy từ tên thư mục. Tag image ghi Node22 là một tham chiếu tiện cho bài học; muốn tái tạo chính xác cần lưu digest và phiên bản quan sát được.