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

posted @ 2020-04-22 13:18  旺得福000  阅读(1992)  评论(0编辑  收藏  举报