Cara mengurangi ukuran gambar Docker

12

Saya memiliki wadah yang menjalankan GlassFish. Ketika saya mencoba mengkomit gambar, itu menjadi 14GB. Kemudian, saya menghapus /tmp/dalam wadah yang 10GB dan mencoba mengkomit, tapi tetap saja 14GB. Tampaknya menghapus file dari wadah tidak tercermin dalam ukuran gambar. Bagaimana saya memperbaiki masalah ini?

pengguna1726453
sumber
1
Tidak ada yang benar-benar dapat membuat rekomendasi tanpa mengetahui sedikit lebih banyak tentang pengaturan Anda. Apa itu Dockerfile? Apa pohon file yang akan ditambahkan ke konteks pembangunan Docker? Gambar glassfishDocker resmi adalah sekitar 1 GB. Meskipun sangat besar untuk gambar Docker, itu masih jauh lebih kecil dari apa yang Anda tampaknya sedang membangun.
Andy Shinn
Lihat pertanyaan SO ini untuk caranya. Juga, pencarian Google ini memiliki sejumlah artikel yang relevan.
Misha Brukman

Jawaban:

9

Masalah yang mungkin Anda hadapi adalah bahwa menghapus file dalam komit tidak mengubah fakta bahwa file itu ada di gambar sebelumnya, sehingga gambar sebelumnya masih 14G.

Lihatlah bagian "Layers" di artikel ini: http://woudenberg.io/reducing-docker-image-size/

Untuk mengatasi masalah itu, Anda perlu menghapus hal-hal di bawah / tmp / dalam komit asli yang menghasilkannya, sehingga gambar yang dibuat sebagai hasil dari komit itu tidak termasuk mereka. Itu mudah ketika menggunakan buruh pelabuhan tetapi tidak yakin jika mungkin ketika membuat gambar dengan komit.

Hal lain yang mungkin dapat Anda lakukan adalah layer squash dengan mengekspor / mengimpor gambar.

Juan Antonio Galán Martínez
sumber
4

Memperluas jawaban @Juan Antonio, Dockerfilemelakukan hal ini tidak akan menghemat ruang:

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

Yang perlu Anda lakukan adalah:

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

Di sisi bawah, ini berarti lebih sedikit caching seolah-olah ada perubahan dalam baris perintah besar, Docker harus menjalankan kembali seluruh rangkaian perintah.

Wernight
sumber