Ubuntu環境的docker實踐——python


創建運行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數據庫包為例,需要添加pymysqlcryptography
注意: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中加入qrcodeImage

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第三方庫同理,不再贅述。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM