Perbarui apt-get Docker bagaimana cara kerjanya?

1

Jadi saya tahu itu masing-masing RUN command docker membuat layer, atau mengintimidasi gambar jika Anda mau, dan ini mengarah pada caching apt-get update. Tetapi saya mengalami masa yang sangat sulit dengan menginstal paket baru apt-get di buruh pelabuhan, dan saya tidak yakin apa yang terjadi, saya telah menghabiskan waktu berjam-jam untuk tidak mendapatkan tempat, saya terutama menggunakan ubuntu sebagai gambar dasar.

Paket-paket tertentu tampaknya tidak diinstal secara acak, misalnya wget. Jika saya pergi ke terminal dalam wadah saya, dan lakukan apt-get update lalu a apt-get install wget Saya dapat menginstal wget. Tetapi dalam file buruh pelabuhan, bahkan ketika saya menghapus semua gambar yang dibuat oleh setiap baris RUN untuk menghentikan pembaruan dari di-cache, saya tidak dapat menginstal wget dengan perintah yang sama persis, itu adalah kegilaan mutlak, dan saya merasa seolah-olah saya akan menjadi gila .

Paket-paket lain tampaknya bekerja secara acak dan tidak berfungsi. Saya bahkan sudah memiliki paket ini: python-glpk yang menginstal di Dockerfile pada awalnya, tetapi tidak lagi ... Saya tidak dapat melihat perilaku deterministik untuk memperbarui dan menginstal, mereka tampaknya berfungsi ketika angin hanya bertiup ke arah tertentu.

Dibutuhkan waktu lama untuk melakukan pembaruan dengan internet saya dan saya menggunakan mesin virtual sehingga alur kerja saya benar-benar rusak, kehilangan begitu banyak waktu, apakah ada orang lain yang mengalami masalah dengan sederhana apt-get update && apt-get install? Apa praktik terbaik saat berurusan dengan apt-get di buruh pelabuhan jadi pastikan semuanya berfungsi sebagaimana mestinya?

Snickers3192
sumber

Jawaban:

0

Beberapa output atau log akan menyenangkan untuk menjawab pertanyaan Anda.

Terkadang pembaruan apt-get semakin lambat, itu tidak ada hubungannya dengan buruh pelabuhan itu sendiri. Jika Anda memiliki paket koneksi yang buruk mungkin gagal mengunduh sepenuhnya.

Seperti yang Anda katakan, setiap baris di Dockerfile akan membuat lapisan gambar, dan cache akan disimpan secara lokal, untuk mempercepat pembuatan gambar. Ada beberapa praktik untuk meminimalkan ukuran gambar buruh pelabuhan, dan menempatkan garis sesedikit mungkin, dengan menggabungkannya, sehingga dalam kasus instalasi paket pola berikut digunakan:

RUN \
  apt-get update &&\
  apt-get install -y zip &&\
  rm -rf /var/lib/apt/lists/*

Ini akan memakan waktu untuk memperbarui cache, menginstal paket dan membersihkan ruang, dan itu hanya akan menghasilkan lapisan gambar tunggal, sehingga setiap instalasi paket lain Anda pembaruan apt-get pertama yang menginstal paket.

Salah satu pendekatan yang dapat Anda coba adalah menjalankan setiap langkah dalam pernyataan RUN baru:

RUN \
  apt-get update

RUN \
  apt-get install -y zip

RUN \
  apt-get install -y curl

Dengan cara ini Anda akan memiliki lebih banyak layer, tetapi akan memiliki "cache" apt layer, dan akan menginstal paket satu per satu.

oryades
sumber