2013-07-30 33 views
31

Sử dụng docker, bạn có thể tạo hình ảnh dựa trên các hình ảnh khác rất độc đáo. Ví dụ, bạn có thể tạo một hình ảnh Java-jdk7 (dựa trên Ubuntu LTS mới nhất), và dựa trên đó tạo ra các hình ảnh tìm kiếm đàn hồi và tomcat7 (cả hai đều cần java).Cách quản lý phụ thuộc hình ảnh docker (bảo trì)

Vì vậy, nếu tôi không tag hình ảnh của tôi, tôi kết thúc với những điều sau đây (trích docker images):

╔══════════════════════╦════════╦══════════════╗ 
║  REPOSITORY  ║ TAG ║  ID  ║ 
╠══════════════════════╬════════╬══════════════╣ 
║ ubuntu    ║ 12.04 ║ 8dbd9e392a96 ║ 
║ quintenk/jdk7-oracle ║ latest ║ 8928245086f4 ║ 
║ quintenk/tomcat7  ║ latest ║ 995cdb2cbfa8 ║ 
║ quintenk/elastics ║ latest ║ 123abc456ef2 ║ 
╚══════════════════════╩════════╩══════════════╝ 

Bây giờ cho câu hỏi này. Làm thế nào để/tôi nên duy trì sự phụ thuộc này? Làm cách nào để tôi thực hiện duy trì hình ảnh 1 và hình ảnh phụ thuộc?

  1. Nếu tôi cập nhật hình ảnh jdk (ví dụ: apt-get upgrade), tôi cho rằng tôi không làm hỏng hình ảnh phụ thuộc? Tuy nhiên, tôi cũng giả định rằng cây phụ thuộc không giống như bạn mong đợi nữa. [UPDATE: Tôi đã sao chép câu trả lời này, vì vậy hãy xem câu trả lời của riêng tôi bên dưới]
  2. Nếu 1 là chính xác, có cách nào để tôi có thể tự gắn cờ hình ảnh phụ thuộc là lỗi thời và hy vọng họ có tự xây dựng lại không?

Hoặc là cách để gắn thẻ các vùng chứa với số phiên bản và tự xây dựng lại và phân phối lại tất cả các phụ thuộc với thẻ số phiên bản tăng lên? Điều đó có nghĩa là Dockerfiles sẽ cần phải được thay đổi để cập nhật.

CẬP NHẬT: Tôi đã tìm thấy hình ảnh sau trên trang web docker trong số presentation. Tuy nhiên, tôi không hoàn toàn chắc chắn về các bước làm thế nào để làm điều này (đặc biệt là với phụ thuộc vào hình ảnh khác như tôi đã mô tả).

Update flow for docker containers

+0

http://docs.docker.com/docker-hub/builds/#repository-links giải pháp bạn muốn không? Nó tái xây dựng tất cả các hình ảnh tùy thuộc nếu thay đổi được thực hiện tại hình ảnh cơ sở của chúng. –

+0

@WeiChing thực sự - đó sẽ là câu trả lời mới. Tất nhiên - đây là một điều xấu mà không cần thử nghiệm tự động – qkrijger

Trả lời

9

Đây là trường hợp sử dụng tuyệt vời. Vui lòng gửi yêu cầu nâng cao trên Docker issues page.

Cách đơn giản nhất là duy trì Dockerfiles và cập nhật từ đó, tạo lại hình ảnh khi bạn muốn thực hiện thay đổi có chủ ý.

+0

. Tôi chưa thấy nó, vì vậy tôi đoán nó sẽ được xem xét trước khi nó được xuất bản. – qkrijger

+2

Đây là yêu cầu nâng cao: https: // github.com/dotcloud/docker/issues/1379 đã bị đóng để ủng hộ điều này: https://github.com/dotcloud/docker/issues/2936 – seanf

5

Trong câu trả lời cho

Nếu tôi cập nhật của tôi hình ảnh jdk (apt-get upgrade ví dụ), tôi giả sử tôi không tham nhũng những hình ảnh phụ thuộc? Tuy nhiên, tôi cũng giả định rằng cây phụ thuộc không giống như bạn mong đợi nữa.

Tôi đã xác minh điều này bằng cách cập nhật hình ảnh phụ thuộc và kiểm tra các phụ thuộc. Những gì bạn nhận thực sự là một nhà nước có hiệu lực, nhưng hình ảnh phụ thuộc không được dựa vào hình ảnh bạn muốn ngây thơ mong đợi được nữa:

docker dependency tree

0

tôi cảm thấy sử dụng multi-stage builds cũng có thể hữu ích trong việc tránh những cạm bẫy như vậy. Nó sẽ giúp bạn giữ một dockerfile duy nhất cho mỗi ứng dụng.

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