Web Analytics

oci2git

⭐ 374 stars Vietnamese by Virviil

🌐 Ngôn ngữ

OCI2Git

[Tài liệu][documentation] Crates.io Giấy phép Số lượt tải xuống

[//]: # (giả lập cho future test.yaml) [//]: # ([![Trạng thái kiểm thử](https://img.shields.io/github/actions/workflow/status/Virviil/oci2git/rust.yml?branch=master&event=push&label=Test)](https://github.com/Virviil/oci2git/actions))

Một ứng dụng Rust giúp chuyển đổi các image container (Docker, v.v.) sang kho lưu trữ Git. Mỗi layer của container sẽ được biểu diễn dưới dạng một commit Git, giữ nguyên lịch sử và cấu trúc của image gốc.

Demo OCI2Git chuyển đổi image nginx

Tính năng

Trường hợp sử dụng

So sánh các layer

Khi xử lý sự cố container, bạn có thể sử dụng khả năng diff mạnh mẽ của Git để xác định chính xác những gì đã thay đổi giữa hai layer bất kỳ. Bằng cách chạy git diff giữa các commit, kỹ sư có thể thấy rõ tệp nào được thêm, sửa đổi hoặc xóa, giúp dễ dàng hiểu tác động của từng lệnh Dockerfile và xác định thay đổi gây vấn đề. Ví dụ về diff layer

Theo dõi nguồn gốc

Sử dụng git blame, các nhà phát triển có thể nhanh chóng xác định layer nào đã giới thiệu một tệp hoặc dòng mã cụ thể. Điều này đặc biệt hữu ích khi xử lý sự cố với file cấu hình hoặc phụ thuộc. Thay vì kiểm tra từng layer một cách thủ công, bạn có thể truy dấu nguồn gốc bất kỳ tệp nào về đúng layer gốc và chỉ thị Dockerfile tương ứng.

Theo dõi vòng đời tệp tin

OCI2Git cho phép bạn theo dõi hành trình của một tệp cụ thể xuyên suốt lịch sử của image container. Bạn có thể xem khi nào tệp lần đầu xuất hiện, bị chỉnh sửa qua các layer, và khi nào (nếu có) bị xóa. Góc nhìn toàn diện này giúp hiểu quá trình phát triển của file mà không cần theo dõi thủ công qua hàng chục layer.

Để theo dõi lịch sử của một tệp trong image container — gồm khi nào nó xuất hiện, bị thay đổi, hoặc bị xóa — bạn có thể dùng các lệnh Git sau sau khi chuyển đổi:

# Full history of a file (including renames)
git log --follow -- /rootfs/my/file/path

First appearance (i.e. creation) - see which layer introduced the file

git log --diff-filter=A -- /rootfs/my/file/path

All changes made to the file (with diffs)

git log -p --follow -- /rootfs/my/file/path

When the file was deleted

git log --diff-filter=D -- /rootfs/my/file/path

Show short commit info (concise layer history)

git log --follow --oneline -- /rootfs/my/file/path

Các lệnh này giúp dễ dàng truy vết toàn bộ lịch sử của bất kỳ tệp nào qua các lớp của container mà không cần phải trích xuất và so sánh các tệp tar của lớp một cách thủ công.

Phân Tích Đa Lớp

Đôi khi những so sánh có giá trị nhất lại đến từ việc xem xét sự thay đổi qua nhiều lớp không liên tiếp. Với OCI2Git, bạn có thể dùng các công cụ so sánh của Git để phân tích cách các thành phần phát triển qua nhiều giai đoạn build, nhận diện các mẫu thay đổi mà có thể bị bỏ qua khi chỉ nhìn vào các lớp liền kề.

Khám Phá Các Lớp

Bằng cách sử dụng git checkout để chuyển đến bất kỳ commit nào, bạn có thể kiểm tra hệ thống tệp container đúng như nó tồn tại ở lớp đó. Điều này cho phép các nhà phát triển kiểm tra trạng thái chính xác của tệp và thư mục tại mọi thời điểm trong quá trình tạo ảnh, cung cấp ngữ cảnh vô giá khi gỡ lỗi hoặc đánh giá hành vi của container. Checkout đến commit trước đó

Phân Tích Đa Ảnh

Khi làm việc với nhiều ảnh container có cùng nguồn gốc, OCI2Git sẽ thông minh tạo nhánh chỉ khi các ảnh thực sự tách biệt. Điều này cho phép bạn phân tích nhiều ảnh liên quan trong một kho lưu trữ duy nhất mà vẫn bảo toàn lịch sử chung của chúng.

# Convert first image to create the base repository
oci2git postgres:16.9-alpine3.21 -o alp

Convert second image to the same output folder

oci2git nginx:1.28.0-alpine-slim -o alp
OCI2Git tự động phát hiện các lớp được chia sẻ giữa các ảnh và tạo ra cấu trúc phân nhánh phản ánh cơ sở chung của chúng. Lịch sử Git sẽ hiển thị: Cách tiếp cận này đặc biệt có giá trị cho: Cấu trúc kho lưu trữ đa ảnh hiển thị cơ sở chia sẻ và các nhánh phân kỳ

Các trường hợp sử dụng bổ sung

Cài đặt

Từ mã nguồn

# Clone the repository
git clone https://github.com/virviil/oci2git.git
cd oci2git

Install locally

cargo install --path .

Từ Crates.io

cargo install oci2git

Cách sử dụng

oci2git [OPTIONS] 

Tham số: Tên ảnh cần chuyển đổi (ví dụ: 'ubuntu:latest') hoặc đường dẫn tới file tar khi sử dụng engine tar

Tùy chọn: -o, --output Thư mục đầu ra cho kho Git [mặc định: ./container_repo] -e, --engine Engine container để sử dụng (docker, nerdctl, tar) [mặc định: docker] -h, --help In thông tin trợ giúp -V, --version In thông tin phiên bản

Biến môi trường: TMPDIR Thiết lập biến môi trường này để thay đổi vị trí mặc định dùng cho xử lý dữ liệu trung gian. Tùy thuộc vào nền tảng (ví dụ: TMPDIR trên Unix/macOS, TEMP hoặc TMP trên Windows).

Ví dụ

Sử dụng engine Docker (mặc định):

oci2git -o ./ubuntu-repo ubuntu:latest

Sử dụng một tarball hình ảnh đã được tải xuống:

oci2git -e tar -o ./ubuntu-repo /path/to/ubuntu-latest.tar

Công cụ tar yêu cầu một tệp tarball định dạng OCI hợp lệ, thường được tạo bằng lệnh docker save:

# Create a tarball from a local Docker image
docker save -o ubuntu-latest.tar ubuntu:latest

Convert the tarball to a Git repository

oci2git -e tar -o ./ubuntu-repo ubuntu-latest.tar

Điều này sẽ tạo một kho Git tại ./ubuntu-repo chứa:

Lịch sử Git phản ánh lịch sử các lớp của container:

Cấu trúc Kho lưu trữ

repository/
├── .git/
├── Image.md     # Complete image metadata
└── rootfs/      # Filesystem content from the container

Yêu cầu

Giấy phép

MIT

[tài liệu]: https://docs.rs/oci2git/

--- Tranlated By Open Ai Tx | Last indexed: 2025-12-12 ---