Cách giảm kích thước hình ảnh Docker


12

Tôi có container chạy GlassFish. Khi tôi thử cam kết một hình ảnh, nó đã trở thành 14GB. Sau đó, tôi đã xóa /tmp/trong vùng chứa 10 GB và cố gắng cam kết một hình ảnh, nhưng hình ảnh vẫn là 14 GB. Có vẻ như việc xóa các tệp khỏi vùng chứa không được phản ánh trong kích thước hình ảnh. Làm thế nào để tôi khắc phục vấn đề này?


1
Không ai có thể thực sự đưa ra bất kỳ khuyến nghị nào mà không biết thêm một chút về thiết lập của bạn. Dockerfile là gì? Cây tập tin được thêm vào bối cảnh xây dựng Docker là gì? glassfishHình ảnh Docker chính thức là khoảng 1 GB. Mặc dù khá lớn cho hình ảnh Docker, nó vẫn nhỏ hơn nhiều so với những gì bạn dường như đang xây dựng.
Andy Shinn

Xem câu hỏi SO này cho một hướng dẫn. Ngoài ra, tìm kiếm Google này có một số bài viết có liên quan.
Misha Brukman

Câu trả lời:


9

Vấn đề mà bạn có thể gặp phải là việc xóa các tệp trong một cam kết không thay đổi thực tế rằng tệp đã ở đó trong một hình ảnh trước đó, do đó hình ảnh trước đó vẫn là 14G.

Hãy xem phần "Lớp" trong bài viết này: http://woudenberg.io/reducing-docker-image-size/

Để giải quyết vấn đề đó, bạn cần xóa những thứ bên dưới / tmp / bên trong cam kết ban đầu đã tạo ra chúng, vì vậy hình ảnh được tạo do kết quả của cam kết đó không bao gồm chúng. Điều đó thật dễ dàng khi sử dụng dockerfiles nhưng không chắc chắn nếu có thể khi tạo hình ảnh với các xác nhận.

Một điều khác bạn có thể làm là ép các lớp bằng cách xuất / nhập hình ảnh.


4

Mở rộng câu trả lời của @Juan Antonio, Dockerfilelàm điều này sẽ không tiết kiệm dung lượng:

RUN apt-get install -y foo bar
...
RUN apt-get purge --auto-remove -y foo bar

Thay vào đó, những gì bạn cần làm là:

RUN apt-get install -y foo bar && \
    && ... \
    && apt-get purge --auto-remove -y foo bar

Về phía bên dưới, điều này có nghĩa là bộ nhớ đệm ít hơn vì nếu có bất cứ điều gì thay đổi trong dòng lệnh lớn đó, Docker sẽ phải chạy lại toàn bộ bộ lệnh.

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.