Di Dockerfile saya memiliki lapisan yang menginstal requirements.txt
:
FROM python:2.7
RUN pip install -r requirements.txt
Ketika saya membangun image buruh pelabuhan itu menjalankan seluruh proses terlepas dari perubahan apa pun yang dilakukan pada file ini.
Bagaimana cara memastikan Docker hanya berjalan pip install -r requirements.txt
jika telah ada perubahan pada file?
Removing intermediate container f98c845d0f05
Step 3 : RUN pip install -r requirements.txt
---> Running in 8ceb63abaef6
Collecting https://github.com/tomchristie/django-rest-framework/archive/master.zip (from -r requirements.txt (line 30))
Downloading https://github.com/tomchristie/django-rest-framework/archive/master.zip
Collecting Django==1.8.7 (from -r requirements.txt (line 1))
python
docker
dockerfile
Prometheus
sumber
sumber
docker build
(dan AndaDockerfile
). Agaknya, ini adalah langkah awal dalam proses build Anda yang merusak cache, menyebabkan langkah ini berjalan.Jawaban:
Saya berasumsi bahwa di beberapa titik dalam proses build Anda, Anda menyalin seluruh aplikasi Anda ke image Docker dengan
COPY
atauADD
:Masalahnya adalah Anda membuat cache build Docker tidak valid setiap kali Anda menyalin seluruh aplikasi ke dalam image. Ini juga akan membuat cache tidak valid untuk semua langkah build selanjutnya.
Untuk mencegah hal ini, saya sarankan untuk menyalin hanya
requirements.txt
file dalam langkah pembuatan terpisah sebelum menambahkan seluruh aplikasi ke dalam gambar:COPY requirements.txt /opt/app/requirements.txt WORKDIR /opt/app RUN pip install -r requirements.txt COPY . /opt/app # continue as before...
Karena file persyaratan itu sendiri mungkin jarang berubah, Anda akan dapat menggunakan lapisan yang di-cache hingga Anda menambahkan kode aplikasi ke dalam gambar.
sumber
COPY
lebih disukai daripadaADD
Anda secara khusus membutuhkan perilakuADD
.ADD
hanya diperlukan jika<src>
folder berisi arsip apa pun yang perlu dibuka kemasannya atau perlu mendukung penanganan URL jarak jauh. {source code}Ini secara langsung disebutkan dalam " Praktik terbaik untuk menulis Dockerfiles " milik Docker :
sumber
Atau sebagai cara yang lebih cepat untuk menjalankan file requirement.txt tanpa mengetik "ya" untuk mengonfirmasi pemasangan pustaka, Anda dapat menulis ulang sebagai:
COPY requirements.txt ./ RUN pip install -y -r requirements.txt COPY ./"dir"/* .
sumber