Docker là gì?
Trình duyệt Agent Scrapeless cung cấp một trình duyệt đám mây mà một ứng dụng container hóa có thể điều khiển để tự động hóa web công khai.
Docker là một nền tảng để đóng gói và chạy ứng dụng trong các container. Một image mô tả môi trường ứng dụng đã được đóng gói, và một container khởi chạy môi trường đó với các thiết lập khi chạy. Điều này giúp việc phân phối cùng một ứng dụng và các phụ thuộc của nó trên các máy phát triển và triển khai trở nên dễ dàng hơn.
Để thu thập dữ liệu, Docker có thể đóng gói worker thực hiện yêu cầu tới các nguồn, phân tích nội dung và ghi đầu ra. Container vẫn phụ thuộc vào các dịch vụ bên ngoài, cấu hình mạng và lưu trữ bền vững. Việc hiểu rõ những ranh giới đó quan trọng hơn nhiều so với chỉ đưa một script hiện có vào trong một image và cho rằng vấn đề triển khai đã biến mất.
Hình ảnh mô tả gói; container thực thi nó
Một Docker image là một mẫu được sử dụng để tạo các container. Mô hình ứng dụng Docker tách biệt việc xây dựng và phân phối một image khỏi việc chạy một instance. Một container thêm danh tính khi chạy, cấu hình, và một lớp ghi được xung quanh image đã được đóng gói đó.
Một image có thể chứa môi trường chạy ứng dụng, các phụ thuộc và các tệp ứng dụng. Điểm vào của ứng dụng xác định tiến trình nào sẽ khởi động khi container chạy. Cấu hình được cung cấp lúc chạy sau đó có thể chọn danh sách nguồn đã được phê duyệt hoặc đích xuất mà không cần dựng lại ứng dụng cho mỗi đơn vị công việc.
Các image thường được xây dựng theo từng lớp. Một thay đổi đối với các tệp ứng dụng về mặt khái niệm không nhất thiết phải thay đổi mọi lớp phụ thuộc trước đó, nhưng quy trình build và các đầu vào của nó quyết định những gì được tái sử dụng. Hãy coi một bản build là một hoạt động được kiểm soát: xác định revision nguồn và các phụ thuộc của nó, và lưu giữ đủ thông tin để giải thích artifact ứng dụng nào đã được triển khai lên môi trường production.
The Đặc tả image của Open Container Initiative định nghĩa một định dạng ảnh có khả năng tương tác. Đóng gói được tiêu chuẩn hóa giúp các công cụ trao đổi tạo phẩm, trong khi khả năng tương thích khi chạy vẫn phụ thuộc vào các yếu tố như hệ điều hành và kiến trúc bộ xử lý. Một tên ảnh quen thuộc thôi không đủ để xác định rằng nó sẽ chạy trên mọi máy chủ triển khai.
Cô lập Container Có Một Ranh Giới Máy Chủ
Một container Linux thông thường chia sẻ nhân Linux của máy chủ. Các cơ chế cô lập cung cấp các góc nhìn riêng biệt về tài nguyên và hạn chế các tiến trình, nhưng một container không phải là ranh giới triển khai giống như một máy ảo với nhân khách riêng của nó.
Linux cô lập namespace cung cấp cho các tiến trình những góc nhìn riêng biệt về các tài nguyên như định danh tiến trình và giao diện mạng. Các cơ chế này giúp giải thích tại sao một tiến trình có thể nhìn thấy các đường dẫn hệ thống tệp và môi trường mạng của riêng nó ngay cả khi đang chia sẻ cùng một máy chủ bên dưới.
Docker Desktop có thể cung cấp một môi trường Linux thông qua ảo hóa trên hệ điều hành máy tính để bàn. Điều đó tạo thêm một lớp mạng và hệ thống tệp cần xem xét trong quá trình phát triển cục bộ. Một đường dẫn hoặc hostname hoạt động từ shell trên máy tính để bàn có thể không trỏ đến cùng một tài nguyên khi ở bên trong container.
Bảo mật vẫn phụ thuộc vào cấu hình. Hãy chạy với đúng các quyền mà ứng dụng cần, bảo vệ giao diện quản lý container và tránh gắn (mount) rộng rãi hệ thống host nếu không có mục đích rõ ràng. Đóng gói một collector không phải là lý do chính đáng để cấp cho nó quyền truy cập không hạn chế vào thông tin xác thực (credentials) của host hoặc dữ liệu ứng dụng không liên quan.
Lưu trữ phải tồn tại lâu hơn những thứ phù hợp
Lớp ghi dữ liệu (writable layer) của một container gắn liền với vòng đời của container đó. Nếu ứng dụng ghi toàn bộ dữ liệu đầu ra của nó vào lớp này, việc xóa và thay thế container có thể làm mất dữ liệu mà nhóm đã kỳ vọng sẽ được giữ lại. Do đó, dữ liệu đầu ra cần được lưu trữ trên một đích lưu trữ với vòng đời được thiết kế có chủ đích.
Các volume cung cấp vùng lưu trữ được quản lý tách biệt khỏi một container cụ thể. Bind mount phơi bày các đường dẫn đã chọn trên host vào bên trong container. Cơ sở dữ liệu từ xa và kho đối tượng cung cấp các ranh giới lưu trữ lâu dài khác. Hãy lựa chọn dựa trên quyền sở hữu, khả năng di chuyển, chính sách truy cập và các kiểu đọc/ghi của ứng dụng.
Một worker thu thập có thể giữ HTML tạm thời trong lớp có thể ghi của nó trong khi lưu các bản ghi đã được chấp nhận vào một cơ sở dữ liệu bên ngoài. Điều đó là hợp lý khi tài liệu tạm thời có thể được loại bỏ sau khi đơn vị công việc hoàn thành. Nếu cần một phản hồi bị từ chối để điều tra, hãy lưu một bản chẩn đoán được bảo vệ trước khi worker thoát.
Tính bền vững (persistence) cũng khác với sao lưu (backup). Một volume có thể tồn tại sau khi container được thay thế trong khi vẫn chứa các thao tác xóa nhầm hoặc dữ liệu ứng dụng bị hỏng. Hãy xác định rõ cách bộ dữ liệu được giữ lại sẽ được sao lưu và cách kiểm tra việc khôi phục. Một đường dẫn được mount chỉ là bằng chứng về cấu hình, không phải bằng chứng rằng việc khôi phục hoạt động.
Những Thay Đổi Trong Mạng Ảnh Hưởng Cách Các Dịch Vụ Tìm Thấy Lẫn Nhau
Một container có ngữ cảnh mạng có thể khác với máy chủ của nó. Một địa chỉ loopback bên trong container đề cập đến chính ngữ cảnh của container đó, vì vậy một bộ thu thập (collector) không thể giả định rằng một cơ sở dữ liệu có thể truy cập được thông qua địa chỉ loopback của máy chủ thì cũng có thể được truy cập bằng cùng địa chỉ đó ở bên trong container.
Các cổng đã xuất bản sẽ mở các dịch vụ container đã chọn thông qua máy chủ, trong khi việc giao tiếp giữa các container có thể sử dụng cấu hình mạng được tạo cho ứng dụng. Hãy quyết định dịch vụ nào cần khả năng truy cập từ bên ngoài. Một worker chỉ thực hiện các yêu cầu thu thập theo chiều ra có thể hoàn toàn không cần bất kỳ cổng vào công khai nào.
Đặt tên cho các đích đến trong cấu hình thời gian chạy. Giữ thông tin xác thực cơ sở dữ liệu và thông tin xác thực dịch vụ bộ sưu tập được giới hạn trong phạm vi các máy chủ dự định của chúng. Nếu một ứng dụng theo các URL được phát hiện, chính sách đích đến của nó phải vẫn độc lập với khả năng kỹ thuật của mạng container trong việc truy cập các dịch vụ khác.
Các lỗi mạng phải tạo ra những kết quả công việc có thể quan sát được. Ghi lại nguồn đã được phê duyệt nào đang được xử lý và liệu đầu ra đã được chấp nhận có được ghi nhận hay không. Nhật ký của container có thể hiển thị các thông điệp của tiến trình, nhưng ứng dụng vẫn cần phân biệt một lần thu thập chưa hoàn thành với một nguồn hợp lệ nhưng không có bản ghi.
Lựa Chọn Vị Trí Thực Thi Trình Duyệt
Một bộ thu thập dựa trên trình duyệt có thể chạy trình duyệt bên trong môi trường worker hoặc kết nối tới một dịch vụ trình duyệt bên ngoài. Những thiết kế này trao cho container các trách nhiệm khác nhau. Một trình duyệt cục bộ bổ sung các tệp nhị phân của trình duyệt, thư viện hệ thống và nhu cầu tài nguyên tiến trình vào image của worker.
Scrapeless Agent Browser cung cấp một trình duyệt trên đám mây cho tự động hóa, nhờ đó một client dạng container có thể điều phối công việc của trình duyệt mà không cần đóng gói toàn bộ môi trường trình duyệt cục bộ. Các khả năng của Scrapeless Agent Browser mô tả dịch vụ trình duyệt. Client vẫn sở hữu phạm vi nguồn của tác vụ, các quy tắc trích xuất và đầu ra được chấp nhận.Phần thảo luận về các mô hình triển khai tự động hóa trình duyệt trong Docker so sánh những lựa chọn triển khai liên quan. Hãy dùng các lựa chọn đó để gán quyền sở hữu vận hành: ai duy trì môi trường trình duyệt, trạng thái phiên nằm ở đâu, và ứng dụng đóng phiên như thế nào khi công việc kết thúc. Một kết nối client thành công chỉ là điểm khởi đầu cho việc thực thi trình duyệt.
Lập kế hoạch giới hạn tài nguyên cho phần công việc thực sự còn lại trong container. Phân tích một tài liệu lớn, đệm ảnh chụp màn hình, hoặc xây dựng một bản xuất có thể tiêu thụ nhiều bộ nhớ ngay cả khi trình duyệt chạy từ xa. Bao gồm cả Scrapeless pricing khi so sánh chi phí thực thi bên ngoài với hạ tầng và bảo trì của một triển khai trình duyệt cục bộ.
Một Image Có Thể Tái Tạo Vẫn Đọc Một Thế Giới Luôn Thay Đổi
Docker cải thiện tính nhất quán của các đầu vào được đóng gói, trong khi nội dung nguồn trực tiếp và các phụ thuộc bên ngoài vẫn biến động. Một bộ thu thập được xây dựng từ cùng một image có thể quan sát một mức giá khác vào ngày mai hoặc nhận được một trang được thiết kế lại. Sự thay đổi đó là một phần của môi trường nguồn, không phải bằng chứng rằng image đã thay đổi.
Ghi lại định danh image cùng với một lần chạy thu thập, nhưng cũng ghi lại nguồn và ngữ cảnh quan sát. Khi việc trích xuất bị hỏng, nhóm phải có khả năng phân biệt một bản phát hành ứng dụng với một thay đổi bố cục nguồn. Chỉ ghi lại tên container sẽ khiến cả hai khả năng bị trộn lẫn.
Các đầu vào ở thời điểm build cũng xứng đáng có kỷ luật tương tự. Tham chiếu tới base-image có thể thay đổi và việc giải quyết phụ thuộc không bị ràng buộc có thể tạo ra các image khác nhau từ một tệp ứng dụng không đổi. Hãy dùng các đầu vào phụ thuộc đã được kiểm soát và một quy trình cập nhật rõ ràng, rồi xác minh hiện vật kết quả trong môi trường nơi nó sẽ chạy.
Các secret lúc runtime nên được giữ bên ngoài image phân phối. Image di chuyển qua các registry và máy của nhà phát triển, và lịch sử của chúng có thể lưu giữ các tệp mà một bước build sau đó đã xóa. Cung cấp cấu hình nhạy cảm thông qua một cơ chế runtime phù hợp và giữ chúng tránh khỏi đầu ra chẩn đoán.
Các Worker Hữu Hạn Cần Một Giao Thức Hoàn Tất
Trạng thái thoát của container mô tả kết quả tiến trình của nó. Nó không tự động mô tả việc dữ liệu có được chấp nhận hay không. Một worker có thể thoát thành công sau khi tạo ra một tệp trống trừ khi logic ứng dụng rõ ràng từ chối kết quả đó.
Đối với một lô thu thập hữu hạn, hãy định nghĩa việc hoàn tất là khi một đầu ra được chấp nhận đã được ghi nhận tới đích dự định của nó. Worker nên nhận diện lô, thống kê các nguồn đã được chấp nhận, và phân biệt các bản ghi được chấp nhận với các đầu vào bị từ chối. Điều này cho một bộ điều phối một kết quả có ý nghĩa để hành động.
Khi tắt, hãy dừng nhận công việc mới và quyết định cách xử lý công việc đang hoạt động. Đóng các client mạng và phiên trình duyệt thông qua vòng đời của ứng dụng. Nếu tiến trình kết thúc trước khi commit, người vận hành tiếp theo phải có thể nhận diện đơn vị chưa hoàn thành mà không phải dựa vào các tệp tạm nằm trong một container đã bị xóa.
| Hiện vật | Mục đích | Câu hỏi vòng đời |
|---|---|---|
| Image | Phân phối ứng dụng và các phụ thuộc. | Bản sửa đổi nào đã được triển khai? |
| Container | Chạy một phiên bản ứng dụng. | Điều gì xảy ra khi tiến trình dừng lại? |
| Đích lưu trữ bền vững | Giữ lại đầu ra đã được chấp nhận. | Dữ liệu được khôi phục và xóa như thế nào? |
| Bản ghi lần chạy | Giải thích việc hoàn tất thu thập. | Những đầu vào và đầu ra nào thuộc về cùng nhau? |
Kết luận
Docker mang lại cho một data worker một môi trường ứng dụng có thể phân phối và một vòng đời runtime rõ ràng. Triển khai đáng tin cậy cũng cần đầu ra bền vững, kết nối mạng có chủ đích và một quy tắc hoàn tất gắn với dữ liệu được chấp nhận. Hãy quyết định công việc nào thuộc về bên trong image, dịch vụ nào vẫn ở bên ngoài và bằng chứng nào tồn tại sau khi thay thế. Những lựa chọn đó làm cho một dịch vụ thu thập dạng container có thể hiểu được khi môi trường hoặc các trang nguồn thay đổi.
Sẵn Sàng Lên Kế Hoạch Triển Khai Trình Duyệt Của Bạn Chưa?
Hãy lựa chọn rõ ràng các trách nhiệm của container và giữ việc thực thi trình duyệt, thông tin xác thực và đầu ra được chấp nhận trong những ranh giới vận hành rõ ràng.
Đăng ký hôm nay và nhận $5 tín dụng miễn phí — không cần thẻ tín dụng.
Nhận $5 Credit của bạn →Câu hỏi thường gặp
Hỏi: Một Docker image có phải là một ứng dụng đang chạy không?
Một Docker image là một mẫu đóng gói dùng để tạo container. Container là một thể hiện (instance) với cấu hình lúc chạy và vòng đời tiến trình; nhiều container có thể được khởi động từ cùng một image.
Hỏi: Một container có bao gồm kernel riêng biệt không?
Một Linux container thường dùng chung kernel với máy chủ Linux chạy nó. Docker Desktop có thể cung cấp môi trường Linux đó thông qua ảo hóa, vì vậy bản cài đặt trên desktop có một lớp bổ sung nằm ngoài bản thân container.
Hỏi: Việc xóa container có xóa toàn bộ dữ liệu không?
Dữ liệu trong lớp ghi (writable layer) của container sẽ bị xóa cùng với container đó, trong khi các volume được quản lý riêng thì có vòng đời của chính chúng. Hãy cấu hình lưu trữ bền vững một cách có chủ đích và kiểm tra bản sao lưu thay vì giả định mọi kết quả đầu ra đều tồn tại sau khi thay thế.
Hỏi: Docker có đảm bảo khả năng tái tạo (reproducibility) không?
Docker cải thiện tính nhất quán của môi trường khi các đầu vào của image được kiểm soát. Dịch vụ từ xa, dependency có thể thay đổi, khác biệt kiến trúc, secret lúc chạy và các trang nguồn thay đổi vẫn có thể làm thay đổi hành vi của cùng một application image.