Làm thế nào để ghi lại hình ảnh docker


8

Tôi có một hình ảnh docker nhận một tập hợp các biến môi trường để tùy chỉnh thực hiện của nó.

Một ví dụ đơn giản sẽ là một máy chủ web, có những thứ như bí mật của máy khách đối với OAuth2, một bí mật để ký cookie, v.v.

Toàn bộ ứng dụng được chứa trên một hình ảnh docker, nhận các biến môi trường (thời gian chạy).

Tôi phân phối hình ảnh docker đó trên một sổ đăng ký riêng tư và tôi muốn ghi lại hình ảnh đó để người dùng có thể hiểu làm thế nào họ có thể tùy chỉnh hình ảnh.

Có thể gửi, như một phần của hình ảnh docker, chú thích, ví dụ như sử dụng đánh dấu docker describe my_imageđầu ra cho thiết bị xuất chuẩn?

Tất nhiên tôi có thể sử dụng một trang tĩnh trên web để làm tài liệu, nhưng người dùng vẫn cần biết tài liệu đó có thể được tìm thấy ở đâu và toàn bộ phân phối sẽ phức tạp hơn theo cách này (ví dụ: tài liệu thay đổi bằng thẻ hình ảnh).

Có ý kiến ​​gì không?


Bạn có thể tạo tệp docker-compose.yml và thêm nhận xét vào các phần có thể tùy chỉnh.
Balbinator

@Balbinator, điều đó không có nhiều ý nghĩa: hình ảnh docker được phân phối độc lập với tệp soạn thảo docker (nếu người dùng đang sử dụng kubernetes thì sao?)
Jorge Leitao

Câu trả lời:


4

Theo như tôi biết, không có viên đạn bạc nào ở đây, tất cả các giải pháp dưới đây đều hoạt động, nhưng yêu cầu người dùng phải được thông báo về cách lấy tài liệu. Không có cách làm tiêu chuẩn .

Các sáng kiến thùng chứa mở đã tạo ra một hình ảnh chú thích đặc tả gợi ý rằng

  • Một liên kết đến nhiều thông tin hơn về hình ảnh nên được cung cấp trong một nhãn gọi là org.opencontainers.image.documentation.
  • Một mô tả của phần mềm được đóng gói bên trong container nên được cung cấp trong một nhãn gọi là org.opencontainers.image.description

Theo OCI, một trong những biến thể của tùy chọn 1 dưới đây là chính xác.

Tùy chọn 1: Cung cấp một liên kết trong nhãn (Được ưu tiên bởi OCI )

Giả sử Dockerfile và các tài sản liên quan là phiên bản được kiểm soát trong kho git có thể truy cập công khai (ví dụ: trên github), kho git đó cũng có thể chứa tệp README.md. Nếu bạn có một đường ống được nối với repo xây dựng và xuất bản hình ảnh Docker vào sổ đăng ký, bạn có thể thiết lập lệnh xây dựng docker để thêm nhãn có liên kết đến tài liệu như sau

# Get the current commit id
commit=$(git rev-parse HEAD)

# Build docker image and attach a link to the Readme as a label
docker build -t myimagename:myversion \
--label "org.opencontainers.image.documentation=https://github.com/<user>/<repo>/blob/$commit/README.md"

Giải pháp này liên kết đến tài liệu cam kết cụ thể cho cam kết cụ thể đó được phiên bản cùng với Dockerfile của bạn. Tuy nhiên, nó đòi hỏi người dùng phải có quyền truy cập vào internet để có thể đọc tài liệu

Tùy chọn 1b: Cung cấp tài liệu đầy đủ trong nhãn (Được ưu tiên bởi OCI )

Một biến thể của tùy chọn 1 trong đó tài liệu đầy đủ được tuần tự hóa và đưa vào nhãn (không có giới hạn độ dài trên nhãn). Bằng cách này, tài liệu được gói cùng với hình ảnh

Như Jorge Leitao đã chỉ ra trong các bình luận, thông số kỹ thuật hình ảnh từ OCI chỉ định tên của một nhãn nhưorg.opencontainers.image.description

Tùy chọn 2: Gói tài liệu bên trong hình ảnh

Nếu bạn thực sự muốn bó tệp Readme.md bên trong hình ảnh để làm cho nó độc lập trên bất kỳ trang web bên ngoài nào, hãy xem xét những điều sau đây

Khi xây dựng, đảm bảo sao chép tệp Readme.md vào hình ảnh docker Ngoài ra, hãy tạo một tập lệnh shell đơn giản tạo ra describeReadme.md

diễn tả

#!/usr/bin/env sh
cat /docs/Readme.md

Bổ sung Dockerfile

...
COPY Readme.md /docs/Readme.md
COPY describe /opt/bin/describe
RUN chmod +x /opt/bin/describe
ENV PATH="/opt/bin:${PATH}"
...

Một người dùng có hình ảnh Docker của bạn hiện đang chạy lệnh sau để đánh dấu được gửi đến thiết bị xuất chuẩn

docker run myimage:version describe

Giải pháp này gói tài liệu cho phiên bản cụ thể này của hình ảnh bên trong hình ảnh và nó có thể được truy xuất mà không có bất kỳ sự phụ thuộc bên ngoài nào


1
Câu trả lời rất tốt, cảm ơn rất nhiều! Để thêm vào nó, trong tùy chọn 1b, opencontainers cung cấp một nhãn gọi là org.opencontainers.image.descriptionIMO được sử dụng cho những gì bạn mô tả.
Jorge Leitao

@JorgeLeitao Điểm tốt, tôi đã cập nhật câu trả lời với thông tin đó
danielorn
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.