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数据库包为例,需要添加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第三方库同理,不再赘述。