วิธีลดขนาดภาพ Docker


12

ฉันมีคอนเทนเนอร์ที่ใช้งาน GlassFish เมื่อฉันลองส่งรูปมันก็กลายเป็น 14GB ต่อมาฉันลบ/tmp/ในคอนเทนเนอร์ซึ่งมีขนาด 10GB และพยายามที่จะส่งรูปภาพ แต่ยังคงเป็นรูปภาพที่ 14GB ดูเหมือนว่าการลบไฟล์ออกจากคอนเทนเนอร์จะไม่ส่งผลต่อขนาดภาพ ฉันจะแก้ไขปัญหานี้ได้อย่างไร


1
ไม่มีใครสามารถให้คำแนะนำได้โดยไม่ต้องรู้อะไรเพิ่มเติมเกี่ยวกับการตั้งค่าของคุณ Dockerfile คืออะไร ไฟล์ต้นไม้ที่เพิ่มเข้ากับบริบทการสร้าง Docker คืออะไร glassfishรูปภาพ Docker อย่างเป็นทางการมีขนาดประมาณ 1 GB แม้ว่าภาพสวย ๆ ของ Docker จะค่อนข้างใหญ่ แต่ก็ยังเล็กกว่าภาพที่คุณสร้าง
Andy Shinn

ดูคำถาม SO นี้เพื่อดูวิธีการ นอกจากนี้การค้นหาของ Google นี้ยังมีบทความที่เกี่ยวข้องจำนวนมาก
Misha Brukman

คำตอบ:


9

ปัญหาที่คุณอาจเผชิญคือการลบไฟล์ในคอมมิชชันไม่ได้เปลี่ยนความจริงที่ว่าไฟล์นั้นอยู่ในรูปก่อนหน้าดังนั้นรูปภาพก่อนหน้านี้ยังคงเป็น 14G

ดูที่ส่วน "เลเยอร์" ในบทความนี้: http://woudenberg.io/reducing-docker-image-size/

ในการแก้ปัญหาดังกล่าวคุณจะต้องลบสิ่งต่าง ๆ ภายใต้ / tmp / ภายในการคอมมิทดั้งเดิมที่สร้างขึ้นดังนั้นรูปภาพที่สร้างขึ้นจากการคอมมิชชันนั้นจะไม่รวมสิ่งเหล่านั้น นั่นเป็นเรื่องง่ายเมื่อใช้นักเทียบท่า แต่ไม่แน่ใจว่าเป็นไปได้หรือไม่เมื่อสร้างภาพด้วยการผูกมัด

อีกสิ่งหนึ่งที่คุณสามารถทำได้คือเลเยอร์สควอชโดยการส่งออก / นำเข้ารูปภาพ


4

การขยายคำตอบของ @Juan Antonio การDockerfileทำสิ่งนี้จะไม่ประหยัดพื้นที่:

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

สิ่งที่คุณต้องทำแทนคือ:

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

ที่ด้านล่างนี่หมายถึงการแคชน้อยลงหากมีการเปลี่ยนแปลงอะไรในบรรทัดคำสั่งขนาดใหญ่นั้นนักเทียบท่าจะต้องเรียกใช้ชุดคำสั่งทั้งหมดอีกครั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.