系统综合实践第5次作业
Python镜像定制
创建本次实验的目录,文件名没有限制,我的目录名为py_docker。
整个实验的文件树结构为:
-
Dockerfile
FROM python:3 WORKDIR /usr/src/app COPY requirements.txt ./ # 修改源并安装依赖 RUN pip install -r requirements.txt -i https://pypi.douban.com/simple ENTRYPOINT ["python"] CMD ["hello.py"]
-
requirements
相关依赖包,本次实验使用到的PyMySQL和opencv—python
PyMySQL opencv-python
-
构建镜像
sudo docker build -t mypython .
最后出现上面两句,即表示build成功,安装速度还是很快的。
程序部署
在目录下新建apps文件夹,用来存放python代码
-
你好,世界
-
helloworld.py
print("hello world")
-
运行程序
sudo docker run -it -v /home/phd/py_docker/apps:/usc/src/app --rm mypython helloworld.py
-
-
日历
-
date.py
import calendar # 输入指定年月 yy = int(input("输入年份: ")) mm = int(input("输入月份: ")) # 显示日历 print(calendar.month(yy,mm))
-
运行程序
sudo docker run -it -v /home/phd/python/apps:/usc/src/app --rm mypython date.py
-
错误
因为需要输入年份和月份,因此需要使用交互式容器,如果缺少了-it参数,则无法输入,报错
-
-
mysql
使用在实验2时创建的MySQL容器作为数据库实验对象。
-
mysql_db.py
import pymysql class Mysql_db(): def __init__(self,ip,username,password,db_name,table_name): self.ip=ip self.username=username self.password=password self.db_name=db_name self.table_name=table_name def db_conn(self): #打开数据库连接 self.conn=pymysql.connect(self.ip,self.username,self.password,self.db_name) #创建一个游标 self.cursor=self.conn.cursor() #创建表格 def create_table(self,sql): self.cursor.execute('drop table if exists %s;' %self.table_name) self.cursor.execute(sql) #插入数据 def insert_data(self,sql): #执行SQL语句,发生错误时回滚 try: self.cursor.execute(sql) self.conn.commit() except : self.conn.rollback() #查询数据 def select_all(self): sql='select * from %s' %self.table_name self.cursor.execute(sql) return self.cursor.fetchall() #更新数据库数据 def update_data(self): #执行SQL语句,发生错误时回滚 try: self.cursor.execute(sql) self.conn.commit() except : self.conn.rollback() #删除数据 def delete_data(self): #执行SQL语句,发生错误时回滚 try: self.cursor.execute(sql) self.conn.commit() except : self.conn.rollback() #关闭数据库 def conn_close(self): self.conn.close()
-
sql.py
from mysql_db import Mysql_db ip='phdmysql' #容器名 username='docker' #用户名 password='123456' #密码 db_name='docker_mysql' #数据库名 table_name='test' #表名 db=Mysql_db(ip, username, password, db_name,table_name) db.db_conn() sql1="insert into %s values(031702427,'frx');" %table_name db.insert_data(sql1) print(db.select_all()) db.conn_close()
-
运行前数据库状态
-
运行程序
sudo docker run -it --rm -v /home/phd/py_docker/apps:/usr/src/app --link=phdmysql mypython sql.py
-
运行后数据库状态,插入了一条数据
-
-
OpenCV程序
-
cv.py
#简单的生成灰度图形 #通过cv2.imread直接实现,0表示使用灰度读入 #最后将灰度图像保存在同一目录下 import cv2 img = cv2.imread("image.jpg", 0) cv2.imwrite('result.jpg', img) print("success")
-
将要转换的图形放到apps目录下(与cv.py同一目录),并命名为image.jpg
-
运行程序
sudo docker run -it --rm -v /home/phd/py_docker/apps:/usr/src/app mypython cv.py
执行之后可以看到,在目录下生成了result.jpg
-
原图
-
返回图
-
实验总结
这次的实验相比第四次实验,就简单了很多,内容也相对较少。因为之前有使用过opencv,会熟悉一点,就很简单的写了一个应用,因为太简单,也不需要debug,所以完成的很快。
完成作业所花的时间
查阅资料:1小时
学习实践:2.5小时
博客编写:1.5小时
合计: 5小时