2016-07-30 21 views
5

Tôi đang làm việc để xây dựng hình ảnh đế để có thể chạy tất cả các ứng dụng Perl của chúng tôi. Các ứng dụng đòi hỏi phải cài đặt hàng trăm mô-đun CPAN. Việc xây dựng đầy đủ hình ảnh docker mất khoảng một giờ để hoàn thành.Tôi nên xử lý cập nhật mô-đun Perl như thế nào khi duy trì hình ảnh docker?

Sau khi thực hiện hình ảnh ban đầu, tôi không chắc cách tốt nhất để xử lý các cập nhật liên tục.

  1. Chúng tôi có thể giữ một Dockerfile duy nhất trong git, sau đó sửa đổi điều này theo yêu cầu và đẩy mới xây dựng lên dockerhub. Tuy nhiên, nếu người xây dựng không có tất cả hình ảnh trung gian thì việc thêm một mô-đun CPAN đơn lẻ có thể là một quá trình cực kỳ tẻ nhạt và có thể mất một giờ trước khi họ biết liệu mô-đun mới có cài đặt đúng hay không. Ngoài ra nó sẽ được tải xuống mỗi mô-đun CPAN một lần nữa, mà có vẻ hơi mạo hiểm, vì có thể có một sự thay đổi đột phá trong mô-đun mới.

  2. Ngoài ra, người thực hiện việc xây dựng có thể kéo hình ảnh docker-hub mới nhất và sau đó cài đặt mô-đun cpan tương tác, cam kết tạo và đẩy hình ảnh mới vào dockerhub. Tuy nhiên sau đó chúng tôi chỉ có hình ảnh dockerhub của chúng tôi, nhưng không phải chủ Dockerfile.

  3. Hoặc một tùy chọn khác là tạo Dockerfile cho mỗi bản dựng mới, tham chiếu đến hình ảnh dockerhub trước đó. Điều này có vẻ quá phức tạp mặc dù.

Tùy chọn 1) có vẻ sai. Tôi khá chắc chắn chúng tôi không muốn xây dựng lại toàn bộ hình ảnh từ hệ điều hành cơ sở chỉ để cài đặt thêm một mô-đun. Tuy nhiên, việc phụ thuộc vào hình ảnh mà không có Dockerfiles có vẻ rất nguy hiểm.

+0

Lựa chọn 3 hoặc một số biến có vẻ như hầu hết các "Docker phù hợp với" giải pháp. Nếu bạn làm theo một chiến lược gắn thẻ có tổ chức, người dùng "nâng cấp" lên phiên bản mới nhất sẽ có thể sử dụng các lớp hình ảnh trước đó và chỉ cần tạo các lớp hình ảnh mới nhất. Bạn có thể muốn tạo một phiên bản "cơ bản" với một tên khác để tránh phải làm một bản dựng đầy đủ trong trường hợp bạn cần phải xây dựng lại đầy đủ. – ldg

Trả lời

1

Bạn có thể sử dụng trình cài đặt mô-đun chuẩn cho hệ điều hành cơ bản của mình trên hình ảnh docker.

Ví dụ, nếu RedHat của nó sau đó sử dụng yum và chỉ sử dụng CPAN khi họ không có sẵn

FROM centos:centos7 
    RUN yum -y install cpanm gcc perl perl-App-cpanminus perl-Config-Tiny && yum clean all 
    RUN cpanm install Some::Module; rm -fr root/.cpanm; exit 0 

lấy từ here và sửa đổi

tôi sẽ cố gắng để có một hình ảnh cơ bản mà các ứng dụng thực tế Sử dụng

Tôi cũng sẽ tránh làm những việc tương tác (ví dụ: kịch bản một dockerfile) vì bạn muốn có thể lặp lại quá trình xây dựng khi thay đổi phụ thuộc thượng lưu, trung tâm docker nào cho bạn.


EDIT Bạn có thể chuyển đổi các module perl thành các gói của riêng bạn sử dụng dh-make-perl

Bạn có thể tải những thành repo Ubuntu của riêng bạn sử dụng reprepro hoặc một giải pháp thanh toán của Artifactory

Đây có thể sau đó được cài đặt sử dụng apt-get khi bạn sử dụng repo của bạn như là một nguồn từ bên trong một dockerfile.

Khi tôi đã cố gắng một điều tương tự trước Có một vài vấn đề

  • ứng dụng của bạn không làm việc với phiên bản mới nhất của module
  • Có nhiều phụ thuộc hơn bạn mong đợi
  • Một số module wont gói

lợi ích là

  • Bạn giữ công cụ xây dựng (gcc, vv) ra khỏi các máy chủ ứng dụng
  • Bạn biết nhiều hơn nữa về sự phụ thuộc của bạn
+0

Có, tôi đã sử dụng các gói chính thức khi tôi có thể tìm thấy chúng. Tôi quen thuộc nhất với Ubuntu, vì vậy đã sử dụng apt-get. Tôi đã tự hỏi mặc dù nếu nó có thể được an toàn hơn để sử dụng một cơ sở perl docker chính thức, với một phiên bản perl cụ thể được biết là làm việc với các ứng dụng của chúng tôi. Vấn đề với điều này là dường như bỏ qua các thư viện được đóng gói apt-get. – user1751825

+0

Thật không may có một vài mô-đun chúng ta cần mà không nhìn thấy trong các gói os chính thức. – user1751825

+0

Một tùy chọn khác mà tôi đã thấy gợi ý là sử dụng một cái gì đó như local :: lib, và sau đó cài đặt tất cả các mô-đun cần thiết trên một cá thể xây dựng chạy cùng một os và perl, và sau đó đóng gói và triển khai thủ công toàn bộ thư mục lib. Điều này có cung cấp bất kỳ lợi ích nào khi tạo các gói riêng lẻ từ các mô-đun không? – user1751825

Các vấn đề liên quan