Tại sao không sử dụng công cụ quản lý cấu hình thay vì Dockerfile?


8

Tôi khá mới với Docker và các công cụ quản lý cấu hình.

Lúc đầu, tôi bắt đầu viết các tập lệnh bash để cung cấp các hộp Vagrant cho các máy phát triển của mình, nhưng bây giờ tôi đã chuyển sang sử dụng Chef để tôi có thể sử dụng cùng một nguồn để cung cấp cả môi trường phát triển và sản xuất để thử và lấy chúng như nhau càng tốt

Kể từ khi tôi bắt đầu sử dụng Chef, tôi đã tận hưởng khía cạnh DRY khi không phải sao chép và dán các dòng script shell từ dự án này sang dự án khác, khả năng cung cấp các máy chạy nhiều bản phân phối linux bằng một nguồn hợp nhất và sự tiện lợi sử dụng sách dạy nấu ăn do cộng đồng cung cấp.

Bây giờ tôi đã sử dụng Chef để cung cấp cho vm của mình, cảm giác như lùi một bước khi tôi thêm các lệnh RUN theo sau là các lệnh shell vào Dockerfile để đạt được những gì có thể đạt được chỉ bằng cách chạy một công thức Chef.

Tôi đã googled và không tìm thấy bất cứ điều gì (nhưng có lẽ tôi đã bỏ lỡ nó) nhưng có vẻ như không có cách nào dễ dàng để sử dụng công thức nấu ăn Chef để xây dựng các container Docker. Tại sao vậy?

Tôi hiểu rằng các container có nghĩa là bất biến và các công cụ quản lý cấu hình thường được sử dụng để định cấu hình lại máy trong toàn bộ tuổi thọ của chúng, nhưng liệu chúng có còn mang lại nhiều lợi ích nếu được sử dụng trong quá trình xây dựng container ban đầu không?


1
Các công cụ quản lý cấu hình vẫn có thể được sử dụng một cách bất biến để định cấu hình máy chủ / bộ chứa docker / etc của bạn sau khi được cung cấp. Sau đó, chỉ cần không thay đổi cấu hình và triển khai một cái mới. Tương tự như vậy, có gần như không thay đổi với idempotency .
James Shewey

@JamesShewey Idempotent không có nghĩa là bất biến. Máy không thay đổi phải được cuộn để được cập nhật.
Matt O.

@Matt O. Đúng. Nhưng bạn có thể sử dụng một hệ thống quản lý cấu hình idempotent để cuộn một máy chủ bất biến. Khi máy cán được đưa trực tuyến trở lại, hệ thống quản lý cấu hình sẽ cấu hình hệ thống về trạng thái cuối cùng, không thay đổi - cài đặt gói, cài đặt tệp cấu hình và các dịch vụ khởi động, v.v. Chỉ vì một hệ thống không hoạt động không có nghĩa là nó cũng không thể thay đổi. Đó chỉ là vấn đề bạn quyết định ghi nó xuống và triển khai lại khi bạn thay đổi cấu hình, hoặc liệu bạn có đẩy sự thay đổi đó ra và cập nhật hệ thống hiện có hay không.
James Shewey

Câu trả lời:


5

Công cụ bạn cần là Packer sử dụng Docker làm "người xây dựng" và Chef là "người cung cấp". Sau đó, bạn có thể thêm hình ảnh kết quả vào repo của mình và sử dụng lại mà không cần phải đóng gói lại, cho đến khi công thức nấu ăn của bạn thay đổi.


4

Những chiến lược này không có gì để làm với nhau.

Các thùng chứa (như Docker) là một phương pháp để triển khai và cô lập các ứng dụng. Các container được ưa thích vì chúng có thể vận chuyển. Chúng có thể được phát triển và xem trước cục bộ trong hầu hết các trường hợp, vì vậy việc đưa các ứng dụng vào đó có ý nghĩa.

Về lý do tại sao Docker sử dụng kịch bản shell : Hình ảnh docker đúng nghĩa là hình ảnh thùng chứa linux. Đó là một hệ điều hành linux và điểm của container đó là nhẹ và hiệu quả nhất có thể. Nếu bạn bắt đầu thêm Chef, Ruby, Erlang và tất cả các thư viện khác cần có Chef làm nhà cung cấp trên Dockerfile, bạn sẽ loại bỏ quan điểm sử dụng container.

Quản lý cấu hình là để cung cấp một nút tính toán. Trạng thái kết thúc cấu hình của bạn thường được phản ánh trong mã và có một máy chủ trung tâm để duy trì trạng thái. Các công cụ như vagrant cho phép bạn sử dụng đầu bếp để cấu hình các máy Vagrant, phần lớn không thuận tiện cho các nhà phát triển. Mặc dù bạn có thể sử dụng hầu hết các công cụ này ở chế độ chỉ cục bộ , việc bảo trì chúng trở nên khá nặng nề. Những máy chủ trung tâm dành cho những thứ như tự động phân loại phiên bản và quản lý phụ thuộc.

Bash không phải là một bước lùi. Chẳng hạn, nhiều tổ chức xây dựng các đường ống hình ảnh hoàn toàn bất biến xây dựng hình ảnh của họ bằng Bash. Điều này đảm bảo tính ổn định và dự đoán cũng như ngôn ngữ chung giữa các kỹ sư (Nhiều kỹ sư có thể đến từ các nền tảng quản lý cấu hình khác nhau).

Quản lý cấu hình bất biến . Cơ sở hạ tầng bất biến không thay đổi và phải được thay thế hoàn toàn để được cập nhật. Quản lý cấu hình ngụ ý rằng trạng thái của máy được duy trì bởi một tác nhân hoặc kết nối nước ngoài (như với Ansible).

Docker container vốn đã bất biến. Bạn không lưu dữ liệu về chúng và chúng phải được cuộn để được cập nhật.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.