第五次实践作业

一.Python镜像布置

项目结构

requirements.txt

PyMySQL
opencv-python

Dockerfile

FROM python
WORKDIR /usr/src/app

COPY requirements.txt ./

RUN pip install  --default-timeout=100 --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

VOLUME /usr/src/app
ENTRYPOINT ["python"] #实现命令行式调用容器
CMD ["python","hello.py"] #ENTRYPOINT默认参数

构建镜像

sudo docker build -t ex5_image .

二.在容器中运行Python代码

Helloworld

hello.py

print('hello world  !!!')

运行

sudo docker run --rm -v /home/ex5/python:/usr/src/app ex5_image

参数说明

  • -v将本地目录挂载到python工作目录以方便代码修改
  • --rm运行完毕后自动移除容器
  • 默认使用Dockerfile中指定的hello.py作为参数

日历输出

date.py

# Filename : date.py
# author by : weng
 
# 引入日历模块
import calendar
 
# 输入指定年月
yy = int(input("输入年份: "))
mm = int(input("输入月份: "))
 
# 显示日历
print(calendar.month(yy,mm))

运行

sudo docker run -it --rm -v /home/ex5/python:/usr/src/app ex5_image date.py

参数说明

  • date.pyENTRYPOINT的参数

  • -it以实现交互

Mysql数据库操作

使用实验二的数据库

运行数据库

查看未执行python文件前的docker_mysql数据库中的test表

database.py

import pymysql

# 打开数据库连接
db = pymysql.connect("mysql", "weng", "123456", "docker_mysql")
#创建游标对象

cursor = db.cursor()
#先查询一次数据库数据
sql = """select * FROM test"""
cursor.execute(sql)
results = cursor.fetchall()
print(results)

#SQL插入语句
sql="""insert test(id,name)
	values(666,'wengweng')"""
cursor.execute(sql)
db.commit()

#插入完成后再读取一次数据库数据
sql = """select * FROM test"""
cursor.execute(sql)
results = cursor.fetchall()
print(results)

# 关闭数据库连接
db.close()

运行

sudo docker run -it --rm -v /home/ex5/python:/usr/src/app --link=mysql-5:mysql ex5_image database.py

查看执行完python文件后的docker_mysql数据库中的test表

Opencv程序部署

updown.py

#图片翻转
import cv2
img=cv2.imread('test.jpg',flags=1)
rows,cols=img.shape[:2]
M=cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
dst=cv2.warpAffine(img,M,(cols,rows))
cv2.imwrite("test-new.jpg", dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
print('rotated and saved.')

运行前的图片

运行代码

sudo docker run -it --rm -v /home/ex5/python:/usr/src/app  ex5_image updown.py

运行后的图片

三.总结

​ 做实验的时候遇到了蛮多问题的,特别是做MySQL部分时,使用之前实验二构建的容器一直登录不进去数据库。折腾了好久还是登录不了,网上查了原因解决起来步骤太麻烦了。后面试着使用那个镜像再创建一个容器,终于可以正常登录了。后面也就好做了。

原文地址:https://www.cnblogs.com/ZKweng/p/12937710.html