教你如何通過編寫dockerfile部署python項(xiàng)目
docker命令總覽
docker通過dockerfile構(gòu)建鏡像常用命令
# 創(chuàng)建鏡像(進(jìn)入dockerfile所在的路徑) docker build -t my_image:1.0 . # 查看鏡像 docker images # 創(chuàng)建容器 docker run -dit --restart=always -p 9700:9700 --name my_container my_image:1.0 # 查看容器 docker ps -a # 進(jìn)入容器 docker exec -it my_container /bin/bash # 退出容器 exit # 暫停容器 docker stop my_container # 刪除容器 docker rm my_container
dockerfile編寫
# 使用官方的Python運(yùn)行時(shí)作為父鏡像 FROM python:3.10 # 設(shè)置工作目錄為/app WORKDIR /app # 將當(dāng)前目錄內(nèi)容復(fù)制到位于 /app 的容器中 COPY . /app # 安裝任何需要的包 RUN pip install torch-2.0.0+cpu-cp310-cp310-linux_x86_64.whl RUN pip install torchvision-0.15.1+cpu-cp310-cp310-linux_x86_64.whl RUN pip install --no-cache-dir -r requirements_new.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 將/etc/localtime鏈接到上海時(shí)區(qū)文件 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 對(duì)外暴露的端口號(hào) EXPOSE 9700 # 定義環(huán)境變量 ENV model = gpt-4-vision-preview # 當(dāng)容器啟動(dòng)時(shí)運(yùn)行python app.py CMD ["python", "app.py"]
dockerfile中COPY與ADD的區(qū)別
在 Dockerfile 中,COPY 和 ADD 指令都用于將文件或目錄從構(gòu)建上下文復(fù)制到鏡像中,但它們之間有一些重要的區(qū)別:
1.基本功能:
- COPY:將本地文件或目錄復(fù)制到鏡像中。
- ADD:將本地文件、目錄或遠(yuǎn)程文件 URL 的內(nèi)容復(fù)制到鏡像中。如果源文件是一個(gè) URL,并且目標(biāo)文件不存在,則 ADD 指令還會(huì)下載和解壓 URL 指向的文件(如果它是壓縮的)。
2.對(duì)壓縮文件的處理:
- COPY:不會(huì)處理壓縮文件,如果源文件是一個(gè) .tar、.gz 或其他壓縮格式的文件,它將被復(fù)制到鏡像中,但不會(huì)解壓。
- ADD:如果源文件是一個(gè)壓縮文件(如 .tar、.tar.gz、.tgz、.bz2、.xz 等),則 ADD 指令會(huì)自動(dòng)解壓該文件到目標(biāo)目錄(如果指定了的話)。
3.構(gòu)建緩存:
- COPY 和 ADD 都會(huì)受益于 Docker 的構(gòu)建緩存。但是,由于 ADD 會(huì)處理 URL 和解壓文件,因此它可能更難以有效地使用緩存。如果遠(yuǎn)程文件的內(nèi)容更改,或者壓縮文件的內(nèi)容更改,即使解壓后的內(nèi)容沒有更改,ADD 也可能導(dǎo)致緩存失效。
4.最佳實(shí)踐:
通常,推薦使用 COPY 指令,因?yàn)樗庇^、更簡單,并且更容易理解。當(dāng)需要復(fù)制本地文件或目錄到鏡像時(shí),COPY 是首選。
如果需要從遠(yuǎn)程 URL 下載文件,或者需要解壓壓縮文件到鏡像中,可以使用 ADD 指令。但是,請(qǐng)注意 ADD 的一些潛在問題,如緩存失效和不必要的復(fù)雜性。
5.安全性:
- 使用 ADD 從遠(yuǎn)程 URL 下載文件可能會(huì)引入安全風(fēng)險(xiǎn),因?yàn)檫h(yuǎn)程文件的內(nèi)容可能不受控制。如果可能,最好從受信任的源下載文件,并使用 COPY 指令將文件復(fù)制到鏡像中。
6.目標(biāo)路徑:
- 對(duì)于 COPY 和 ADD,如果目標(biāo)路徑不存在,Docker 將嘗試創(chuàng)建它。但是,如果目標(biāo)路徑是一個(gè)文件而不是目錄,并且該文件已經(jīng)存在,則操作將失敗。
總結(jié):在 Dockerfile 中,應(yīng)優(yōu)先考慮使用 COPY 指令來復(fù)制本地文件或目錄到鏡像中。只有在需要特定功能(如從遠(yuǎn)程 URL 下載文件或解壓壓縮文件)時(shí),才使用 ADD 指令。
將容器轉(zhuǎn)化為鏡像和鏡像壓縮解壓
# 將容器轉(zhuǎn)化為鏡像 docker commit my_container my_image:1.2 # 將鏡像轉(zhuǎn)為壓縮包 docker save -o my_package.tar my_image:1.2 # 刪除原鏡像 docker rmi my_image:1.2 # 將壓縮包解壓得到鏡像 docker load –i my_package.tar
將鏡像推送到私有倉庫
# 標(biāo)記鏡像 docker tag logistics_park:base 10.82.27.215:10081/ai_platform/logistics_park:base # 將鏡像推送到私有倉庫 docker push 10.82.27.215:10081/ai_platform/logistics_park:base
根據(jù)基礎(chǔ)鏡像創(chuàng)建docker容器
docker pull python:3.10 # 創(chuàng)建容器不進(jìn)入 docker run -dit --name=p1 python:3.10 # 進(jìn)入容器 docker exec -it p1 bash # 創(chuàng)建文件夾 mkdir app # 推出容器 exit # 將需要的依賴拷貝到鏡像指定目錄 docker cp torchvision-0.15.1+cpu-cp310-cp310-linux_x86_64.whl p1:app/ # 升級(jí)pip pip3 install --upgrade pip # 安裝需要的依賴(加上鏡像源) pip install -r requirements_new.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 退出容器 exit # 將容器打包為鏡像(確保容器正在運(yùn)行) docker commit p1 logistics_park:base # 標(biāo)記鏡像 docker tag logistics_park:base 10.82.27.215:10081/ai_platform/logistics_park:base # 將鏡像推送到私有倉庫 docker push 10.82.27.215:10081/ai_platform/logistics_park:base # 構(gòu)建鏡像 docker build -t logistics_park:v1.0 . # 容器運(yùn)行命令: docker run -dit --restart=always -p 9700:9700 --name logistics_park logistics_park:v1.0
通過基礎(chǔ)鏡像創(chuàng)建容器的dockefile
# 使用官方的Python運(yùn)行時(shí)作為父鏡像 FROM 10.82.27.215:10081/ai_platform/logistics_park:base # 設(shè)置工作目錄為/app WORKDIR /app # 將當(dāng)前目錄內(nèi)容復(fù)制到位于 /app 的容器中 COPY . /app # 將/etc/localtime鏈接到上海時(shí)區(qū)文件 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 驗(yàn)證時(shí)區(qū) RUN date # 對(duì)外暴露的端口號(hào) EXPOSE 9700 # 定義環(huán)境變量 # ENV model = gpt-4-vision-preview # 當(dāng)容器啟動(dòng)時(shí)運(yùn)行python app.py CMD ["python", "app.py"]
總結(jié)
到此這篇關(guān)于如何通過編寫dockerfile部署python項(xiàng)目的文章就介紹到這了,更多相關(guān)dockerfile部署python項(xiàng)目內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud基于Docker和Docker-Compose的項(xiàng)目部署過程
本文介紹了如何卸載舊版本Docker、更新系統(tǒng)、安裝Docker及其依賴,并設(shè)置國內(nèi)鏡像源以加快下載速度,詳細(xì)說明了如何安裝Docker Compose、配置鏡像加速器,并展示了如何使用Docker Compose部署SpringCloud項(xiàng)目,提供了更新和重啟容器的方法2024-10-10docker部署nginx及nginx.conf文件配置方式
這篇文章主要介紹了docker部署nginx及nginx.conf文件配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Docker配置文件docker-compose.yml使用指南
本文主要介紹了Docker配置文件docker-compose.yml使用指南,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Docker文件映射實(shí)現(xiàn)主機(jī)與容器間目錄的雙向映射
本地文件系統(tǒng)和容器中的文件系統(tǒng)之間的交互是一項(xiàng)必不可少的功能,本文主要介紹了Docker文件映射實(shí)現(xiàn)主機(jī)與容器間目錄的雙向映射,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03docker的基本使用及使如何用Docker 運(yùn)行D435i
這篇文章主要介紹了docker的基本使用及使如何用Docker 運(yùn)行D435i,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-11-11vscode中啟用docker擴(kuò)展顯示無權(quán)限的問題解決
這篇文章主要介紹了如何解決vscode中啟用docker擴(kuò)展顯示無權(quán)限的問題,并介紹允許VSCode進(jìn)入Docker內(nèi)部進(jìn)行調(diào)試的插件,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03