2016-03-31 21 views
6

Tôi đã cố gắng tìm thông tin này quanh tài liệu chính thức của Docker, nhưng không thành công.Docker tính toán băm của mỗi lớp như thế nào? Nó có quyết định không?

Docker xem xét phần nào của thông tin khi tính toán giá trị băm của mỗi lần commit/lớp?

Khá rõ ràng rằng dòng trong Dockerfile là một phần của băm và, tất nhiên, giá trị băm của phụ huynh. Nhưng cái gì khác có tính đến khi tính toán băm này?

Trường hợp sử dụng bê tông: Giả sử tôi có hai nhà phát triển trong các máy khác nhau, tại các thời điểm khác nhau (và do đó, các trình nền tảng khác nhau và các bộ đệm khác nhau) chạy $ docker build ... so với cùng một Dockerfile. Chỉ thị FROM ... sẽ cung cấp cho họ cùng một điểm bắt đầu, nhưng sẽ là kết quả băm của mỗi kết quả hoạt động trên cùng một băm? Nó có quyết định không?

+1

Docker 1.10 giới thiệu một mô hình lưu trữ nội dung địa chỉ mới: xem https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/ – molivier

+1

sâu hơn thông tin có thể được tìm thấy trong tài liệu thiết kế; https://gist.github.com/aaronlehmann/b42a2eaf633fc949f93b#id-definitions-and-calculations – thaJeztah

+0

Cảm ơn @molivier và @thaJeztah! Rất tốt đọc! Dường như câu hỏi này sâu sắc hơn nhiều mà tôi đang mong đợi! –

Trả lời

0

Cảm ơn @thaJeztah. Câu trả lời là trong https://gist.github.com/aaronlehmann/b42a2eaf633fc949f93b#id-definitions-and-calculations

  1. layer.DiffID: ID cho một lớp cá nhân

    tính: DiffID = SHA256hex (dữ liệu không nén lớp tar)

  2. layer.ChainID: ID cho một lớp và cha mẹ của nó. ID này xác định duy nhất một hệ thống tập tin bao gồm một tập các lớp.

    tính:

    • Đối với lớp dưới cùng: ChainID (layer0) = DiffID (layer0)
    • Đối với các lớp khác: ChainID (layerN) = SHA256hex (ChainID (layerN-1) + "" + DiffID (layerN))
  3. image.ID: ID cho một hình ảnh. Do cấu hình hình ảnh tham chiếu đến các lớp mà ảnh sử dụng, ID này kết hợp dữ liệu hệ thống tập tin và phần còn lại của cấu hình ảnh.

    tính: SHA256hex (imageConfigJSON)

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