創建運行python代碼的Dockerfile
python代碼的運行需要安裝python環境,而提前將python環境封裝在容器里面,可以提供比虛擬機更輕量級的部署成本。
此處以python3為例,描述通過容器運行python3代碼的過程。基礎容器為docker hub上的python容器。
需要為待運行的python3代碼創建Dockerfile文件:
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
COPY apps/hello.py /usr/src/app/
VOLUME /usr/src/app
ENTRYPOINT ["python"]
CMD ["hello.py"]
在容器中運行簡單的python代碼
為了方便代碼修改,在啟動容器時,直接掛載本地磁盤目錄到容器指定的工作目錄中,由於程序運行完就結束了,所以在得到結果之后可以用--rm 刪掉容器。
-
無交互式輸入
Dockerfile已經把helloworld代碼拷進容器了,所以后面不需要附加py文件名
-
有交互式輸入
(代碼來源)
注意:由於用到了input,需要輸入內容,因此運行容器的時候需要用到-it參數,否則會報EOFError: EOF when reaeding a line的錯誤。
以上兩個例子並不需要在requirement.txt中添加額外的包,下面的就需要了。
測試python 3和mysql數據庫的連接
以python3的mysql數據庫包為例,需要添加pymysql和cryptography
注意:cryptography如果沒安裝,我遇到了報 RuntimeError: cryptography is required for sha256_password or caching_sha2_p 的錯誤。
(代碼來源)
數據庫信息:容器部署的mysql,運行在網絡dockerlamp_lamp上,修改代碼來源中的數據庫信息,數據庫地址使用mysql的容器名,數據庫使用TestDB測試(需提前建好),用戶名和密碼自定義
運行結果:
在mysql容器中查看數據庫表操作結果:
測試opencv庫
opencv提供了計算機視覺和圖像處理的很多方法,並且python有專門的庫opencv-python,要運行opencv程序需要在容器中安裝opencv-python庫
方法:
- 在requirement.txt中加入opencv-python,同時,把作為矩陣運算很強大的numpy庫也加進去,然后build鏡像。
- 啟動容器,掛載本地目錄將示例代碼拷入容器中運行即可。
import cv2
import numpy as np
img=cv2.imread('test.jpeg')
print(img.item(10,10,2))
img.itemset((10,10,2),100)
print(img.item(10,10,2))
cv2即為opencv
測試qrcode庫
qrcode庫提供了二維碼生成功能,依賴於Image庫,要在requirement.txt中加入qrcode和Image
- 示例代碼:
import qrcode
data = 'Hello World!'
img_file = '/usr/src/app/qrcode.png'
# 實例化QRCode生成qr對象
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4
)
# 傳入數據
qr.add_data(data)
qr.make(fit=True)
# 生成二維碼
img = qr.make_image()
# 保存二維碼
img.save(img_file)
# 展示二維碼
img.show()
如果Image庫沒有安裝,會報錯:
准備就緒之后,啟動容器並且掛載本地目錄,程序會把生產的二維碼圖片保存在工作目錄,並且同步到本地目錄。
其他的python第三方庫同理,不再贅述。