昨天我為我的應用程式推送了包含運行所需環境的基礎影像層my_app。
這種推動是巨大的,但它已經完成并在我的回購中完成。
這是目前我本地機器上的影像情況:
? docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dr_prof_patrick/my_app my_app_v0 7e4cb75b4735 22 minutes ago 5.36GB
dr_prof_patrick/my_app my_app_base_image b1cccd87e4f7 37 hours ago 5.35GB
python 3.8 67ec76d9f73b 8 days ago 909MB
python 3 f48ea80eae5a 8 days ago 917MB
我對影像進行了一些細微的更改,您可以在此處看到:
? docker history dr_prof_patrick/my_app:my_app_v0
IMAGE CREATED CREATED BY SIZE COMMENT
7e4cb75b4735 22 minutes ago /bin/sh -c #(nop) CMD ["python3" "main.py"] 0B
55fe27affa9a 22 minutes ago /bin/sh -c pip install -r requirements.txt 16.1kB
3eba19411e42 22 minutes ago /bin/sh -c #(nop) WORKDIR /my_app 0B
54249235bcba 22 minutes ago /bin/sh -c #(nop) COPY dir:7f9da91b4e3f9ed60… 6.03MB
b1cccd87e4f7 37 hours ago /bin/sh -c pip install -r requirements.txt 4.04GB
<missing> 37 hours ago /bin/sh -c #(nop) COPY file:8e879a6a889ff22f… 305B
<missing> 37 hours ago /bin/sh -c apt-get install ffmpeg libsm6 lib… 385MB
<missing> 37 hours ago /bin/sh -c apt-get update 17.7MB
<missing> 8 days ago /bin/sh -c #(nop) CMD ["python3"] 0B
<missing> 8 days ago /bin/sh -c set -ex; wget -O get-pip.py "$P… 8.31MB
<missing> 8 days ago /bin/sh -c #(nop) ENV PYTHON_GET_PIP_SHA256… 0B
它嘗試再次推動基礎層,這需要 2 個小時。
? docker push dr_prof_patrick/my_app:my_app_v0
The push refers to repository [docker.io/dr_prof_patrick/my_app]
548f7bc62c43: Layer already exists
fa5433c54740: Layer already exists
f09b381b1d57: Pushing 1.102MB/4.041GB
a0f39ee33d3d: Layer already exists
a1e799af3370: Pushing 8.842MB/384.5MB
c93f6a714096: Pushing 1.77MB/17.7MB
e9df9d3bdd45: Layer already exists
1271cc224a6b: Layer already exists
740ef99eafe1: Pushing 5.42MB/48.56MB
b7b662b31e70: Pushing 6.628MB/18.47MB
6f5234c0aacd: Waiting
8a5844586fdb: Waiting
a4aba4e59b40: Waiting
5499f2905579: Waiting
a36ba9e322f7: Waiting
我不知道我的作業流程是如何阻止 docker 僅上傳最新更改的 - 任何幫助將不勝感激。
編輯
認為用于創建的 docker 檔案my_app_v0可能會有所幫助:
FROM dr_prof_patrick/my_app:my_app_base_image
COPY . /my_app
WORKDIR /my_app
RUN pip install -r requirements.txt
CMD ["python3", "main.py"]
uj5u.com熱心網友回復:
COPY一旦背景關系發生變化,Docker 就會使層失效——不管接下來的步驟實際上取決于什么。在最后一刻復制檔案——在您的情況下,requirements.txt先復制,然后再復制。像這樣:
FROM dr_prof_patrick/my_app:my_app_base_image
WORKDIR /my_app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python3", "main.py"]
還要看看你的.dockerignore,不要復制無用的檔案。我看到使用的最佳策略是.dockerignore用作白名單,而不是黑名單,首先忽略所有內容,然后取消忽略您需要的檔案:
*
!requirements.txt
uj5u.com熱心網友回復:
docker push推送影像的所有層(默認情況下為5層),這些層不等于存盤庫中的影像(即未更改的層),而不是單個層,最終在您的存盤庫中生成一個新影像.
您可以將其視為 Docker 在本地和遠程映像之間進行差異,并僅推送這兩者之間的差異,這最終將成為一個新映像 - 與您機器中的映像相同,但“作業量更少”達到預期的結果,因為它不需要逐字推動所有層。
在您的情況下,由于 4 Gb 層發生變化(因為您現在復制的內容不同),因此需要花費大量時間,這使得 Docker 推動了您的影像大小的很大一部分。
docker push如果需要,檔案鏈接:https : //docs.docker.com/engine/reference/commandline/push/
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/367660.html
上一篇:影像的“使用中”是什么意思?
下一篇:它繼續使用快取,而新版本可用
