將本地Python項(xiàng)目打包成docker鏡像上傳到服務(wù)器并在docker中運(yùn)行
Docker環(huán)境
- windows11
- Docker下載地址:https://docs.docker.com/desktop/install/windows-install/
創(chuàng)建虛擬環(huán)境
虛擬環(huán)境可以搭建獨(dú)立的Python運(yùn)行環(huán)境,使得單個(gè)項(xiàng)目的運(yùn)行環(huán)境與其他項(xiàng)目互不影響。

安裝完成之后,便可以直接創(chuàng)建虛擬環(huán)境了,使用命令virtualenv env1進(jìn)行創(chuàng)建
C:\Users\china>virtualenv env1 Using base prefix 'c:\\program files\\python36' New python executable in C:\Users\china\env1\Scripts\python.exe Installing setuptools, pip, wheel...done.
其中activate.bat文件,表示激活虛擬環(huán)境。進(jìn)入到Scripts目錄,在該目錄下輸入activate.bat命令,即可激活Python虛擬環(huán)境.

退出虛擬環(huán)境
在當(dāng)前目錄下輸入命令deactivate.bat即可

pycharm使用虛擬環(huán)境
1、打開Pycharm,然后依次點(diǎn)擊左上方的file->Settings
2、之后依次Project->Project Interpreter,使用虛擬環(huán)境的python解釋器,下載需要的包,環(huán)境進(jìn)行隔離。


準(zhǔn)備打包
1.創(chuàng)建好虛擬環(huán)境后,在項(xiàng)目中創(chuàng)建一個(gè)hello.py,內(nèi)容簡(jiǎn)單寫一些

2.將項(xiàng)目依賴庫(kù)進(jìn)行導(dǎo)出,使用pip freeze > requirements.txt命令
我們?cè)谔摂M環(huán)境中下載好代碼需要的包之后,將依賴庫(kù)進(jìn)行導(dǎo)出,會(huì)生成requirements.txt文件,里面保存的是包環(huán)境
如果python的版本和包的版本存在沖突,可以將requirements.txt中包的版本去掉,這樣就會(huì)自動(dòng)下載對(duì)應(yīng)的包

3.在桌面上新建一個(gè)文件夾,文件夾內(nèi)容如下

4.app中的內(nèi)容其實(shí)就是Python項(xiàng)目根目錄以及子目錄文件,直接將新建的hello.py放到app目錄下
5.編寫Dockerfile,創(chuàng)建一個(gè)文件叫Dockerfile,內(nèi)容如下:
最好是先執(zhí)行pip install -r requirements.txt -i https://pypi.douban.com/simple/命令,確認(rèn)無(wú)誤,再編寫Dockerfile文件
#基于的基礎(chǔ)鏡像 FROM python:3.7.9 #代碼添加當(dāng)前目錄所有內(nèi)容到code文件夾 ADD . /code # 設(shè)置code文件夾是工作目錄 WORKDIR /code # 安裝支持 RUN pip install -r requirements.txt -i https://pypi.douban.com/simple/ CMD ["python", "./app/predict/select_data_combine.py"]
6.執(zhí)行docker build -t hello-test .這里注意,hello-test后面有一個(gè)點(diǎn),這里的hello-test是鏡像的名稱,隨意命名

7.執(zhí)行docker run -it hello-test,可以看到輸入了請(qǐng)求百度返回的HTML信息和我在hello.py文件中打印的Hello Docker~

保存為鏡像文件
docker save ubuntu>ubuntu.tar
保存Ubuntu為ubuntu.tar文件
拆分文件、合并文件
如何文件較大傳輸耗時(shí),可以切割文件,分詞傳輸,再合并文件即可。
split -b 500m log.txt newfile #切分文件log.txt,按照500MB進(jìn)行切分 cat newfile* > orifile #合格文件為整個(gè)
加載鏡像文件
docker load -i redis5014.tar
解壓鏡像文件,查看鏡像
docker images
找到對(duì)應(yīng)的鏡像,執(zhí)行鏡像
docker run -it 鏡像ID
啟動(dòng)容器
先查看容器是否開啟
docker ps
如果發(fā)現(xiàn)未開啟,顯示所有容器
docker ps -a
開啟指定的容器
docker start 容器ID
開啟容器失敗,按照如下操作:
docker exec -it 6198ef53d943 bash Error response from daemon: Container 6198ef53d9431a3f38e8b38d7869940f7fb803afac4a2d599812b8e42419c574 is not running docker commit 6198ef53d943 sha256:ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33 docker run -it ace7ca65e6e bash root@72d38a8c787d:/#
進(jìn)入容器
sudo docker exec -it 容器ID bash
退出容器
exit
復(fù)制物理路徑到容器指定路徑
將本地文件復(fù)制到docker容器中
docker cp 本地文件路徑 容器ID/容器NAME:容器內(nèi)路徑
docker cp /Users/wuhanxue/Downloads/rabbitmq_delayed_message_exchange-3.9.0.ez 1faca6a70742:/opt/rabbitmq/plugins
或者
docker cp /Users/wuhanxue/Downloads/rabbitmq_delayed_message_exchange-3.9.0.ez rabbit:/opt/rabbitmq/plugins
完整語(yǔ)句
sudo docker run -it -v /home/ubuntu/anti/docker_test:/code 2286df316633 /bin/bash
刪除鏡像、容器
刪除鏡像
直接刪除鏡像
docker rmi 鏡像ID
強(qiáng)制刪除鏡像
docker rmi -f image_id
刪除容器
刪除容器
docker rm 容器ID
如果刪除不掉,先關(guān)閉容器,再刪除
docker stop 容器ID
強(qiáng)制刪除容器
docker rm -f container_id
優(yōu)雅地刪除鏡像的最佳做法是:先停止容器,再刪除容器,最后刪除鏡像。
優(yōu)雅地刪除容器的最佳做法是:先停止容器,再刪除容器。
參考文獻(xiàn)
- https://www.cnblogs.com/xiao-apple36/p/12810941.html
- https://blog.csdn.net/songlh1234/article/details/110400673
- https://stackoverflow.com/questions/29599632/container-is-not-running
- https://blog.csdn.net/u014282578/article/details/127866389
總結(jié)
到此這篇關(guān)于將本地Python項(xiàng)目打包成docker鏡像上傳到服務(wù)器并在docker中運(yùn)行的文章就介紹到這了,更多相關(guān)Python打包成docker鏡像上傳服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用python寫一個(gè)帶有g(shù)ui界面的密碼生成器
這篇文章主要介紹了用python寫一個(gè)帶有g(shù)ui界面的密碼生成器,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11
詳解Python利用random生成一個(gè)列表內(nèi)的隨機(jī)數(shù)
這篇文章主要介紹了詳解Python利用random生成一個(gè)列表內(nèi)的隨機(jī)數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Pymysql實(shí)現(xiàn)往表中插入數(shù)據(jù)過(guò)程解析
這篇文章主要介紹了Pymysql實(shí)現(xiàn)往表中插入數(shù)據(jù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
深入解析Python如何利用PyUSB輕松操控USB設(shè)備
本文將從?基礎(chǔ)概念、安裝配置、核心?API、實(shí)戰(zhàn)案例、調(diào)試技巧到高級(jí)應(yīng)用,系統(tǒng)性地介紹?PyUSB,幫助你掌握如何用?Python?高效、安全地與?USB?設(shè)備交互,感興趣的小伙伴可以了解下2026-01-01
Jupyter安裝拓展nbextensions及解決官網(wǎng)下載慢的問(wèn)題
這篇文章主要介紹了Jupyter安裝拓展nbextensions及解決官網(wǎng)下載慢的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Playwright中Assertions斷言的方法實(shí)現(xiàn)
在編寫測(cè)試時(shí),我們使用assert語(yǔ)句來(lái)斷言一段條件并以此為基礎(chǔ)條件,我們要么通過(guò)測(cè)試,要么不通過(guò)測(cè)試,Playwright給我們提供了另一個(gè)API,可以以一種更易讀的方式用來(lái)執(zhí)行相同的判斷2026-01-01
Python?torch.fft.rfft()函數(shù)用法示例代碼
大家應(yīng)該都知道新舊版的torch中的傅里葉變換函數(shù)在定義和用法上有所不同,下面這篇文章主要給大家介紹了關(guān)于Python?torch.fft.rfft()函數(shù)用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04

