隨著 DevOps 的深入發展和雲端原生應用程式的流行,Docker 已經成為了開發、部署和維運的標準工具之一。 Docker 這個工具直接操作容器,而容器提供了一種輕量化的虛擬化方式,可以將程式碼、環境和依賴項打包成一個獨立的運行環境,並在不同的節點上快速地移植和部署,最大程度地提高了應用程式的可移植性和可擴展性,讓維運更加方便和有效率。
然而,在實際使用 Docker 的過程中,有時候會碰到一些奇怪的問題,例如映像不見了。這個問題一般是由於 Docker Hub 上的某個映像被刪除或所在的 registry 無法存取了,導致 Docker 在拉取這個映像的過程中出現了錯誤,從而影響了整個應用程式的穩定性和可靠性。
那麼,要如何解決這個問題呢?整體來講,有兩種解決方案:一種是使用其他的鏡像來源,例如阿里雲、騰訊雲等;另一種是透過本地搭建Docker Registry,將需要的鏡像保存到本地,從而不再依賴外部的鏡像來源,提高了應用程式的可靠性和穩定性。
使用其他的鏡像來源
以阿里雲為例,我們需要先在阿里雲的容器鏡像服務上註冊帳號並開啟服務。在控制台上選擇「鏡像加速器」,會得到一個 URL,這個 URL 就是阿里雲提供的 Docker 映像加速器位址。
將這個位址複製至 /etc/docker/daemon.json
檔案中,並重新啟動 Docker 服務即可。例如:
{ "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"] }
之後使用Docker 指令拉取映像時,就可以在指令後面加上--registry-mirror
參數指定使用阿里雲鏡像加速器,例如:
docker pull --registry-mirror=https://xxxxxxxx.mirror.aliyuncs.com library/nginx
透過本地搭建Docker Registry
使用阿里雲、騰訊雲等國內的Docker Hub 鏡像來源,雖然可以幫助解決鏡像不見的問題,但是這些公司的營運模式一般都是按量收費,對於一些資源需要非常頻繁使用的業務,也可能面臨較高的成本壓力。而且,現在國家也開始要求在中國境內儲存、傳輸一些重要數據,因此在某些時刻,國外 registry 連接埠不通也可能成為一個瓶頸。
本地建置 Docker Registry 就可以解決這些問題。我們只需要在一台 Linux 伺服器上建立一個 Docker Registry,並將需要的映像 push 到這個 Registry 上。具體步驟如下:
#在本機伺服器上使用下列指令拉取Docker Registry 映像:
docker pull registry
使用下列指令啟動Docker Registry 容器:
docker run -d -p 5000:5000 --restart=always --name registry registry:latest
預設情況下,Registry 會監聽在本機5000 連接埠上,而且會使用本機檔案系統作為映像儲存庫。
在本機上使用以下命令將一個本地的Dcoker 映像推送到Registry:
docker tag <local_image_name> <registry_url>/<remote_image_name> docker push <registry_url>/<remote_image_name>
其中< local_image_name>
是本地的Docker 映像名稱,<registry_url>
是我們本地伺服器的IP 位址和5000 連接埠號碼拼接而成的位址,<remote_image_name>
docker pull <registry_url>/<remote_image_name>
以上是docker映像不見了是什麼情況的詳細內容。更多資訊請關注PHP中文網其他相關文章!