• 2020系统综合实践 第5次实践作业


    2020系统综合实践 第5次实践作业

    作业要求

    一、Python环境搭建

    <1>创建一个文件夹(python),用于保存本次实验所需的配置文

    件以及相关的python代码,文件的项目结构如下所示

    <2>配置文件如下所示

    • dockerfile:用于构造本次实验的镜像
    FROM python:3.7
    WORKDIR /usr/local/app
    COPY requirements*.txt ./
    # 修改源并安装依赖
    RUN pip install -r requirements.txt -i https://pypi.douban.com/simple 
    # 实现命令行式调用容器
    ENTRYPOINT ["python"]
    #设置ENTRYPOINT默认参数
    CMD ["helloworld.py"]
    
    • requirements.txt:用于为opencv和mysql添加相关依赖
    PyMySQL
    opencv-python
    
    • 四个py文件为本次完成简单helloworld、日历输出、mysql数据库操作、opencv程序的部署运行所要用到的代码文件

    <3>编写完相关配置文件后,进入python文件夹打开终端,构造本次实验的镜像

    sudo docker build -t mypython .   #(mypython是自定义的镜像名字)
    

    二、简单程序的部署运行

    <1>helloworld

    • helloworld.py的代码如下:
    print("hello world!")
    
    • 运行程序如下所示
    sudo docker run -it -v ~/python/app:/usr/local/app --rm mypython hello.py
    

    相关参数说明:

    • 使用-v将本地目录挂载到python工作目录以方便代码修改,-v参数指定方式为宿主机目录:容器内目录;

    • 冒号前的~/python/app为helloworld.py代码的存储路径,冒号后的/usr/local/app为dockerfile中WORKDIR的参数,它是是处于容器内,而不是宿主机内的;

    • --rm表示运行完毕后自动移除容器;

    <2>日历输出

    date.py的代码如下:

    import calendar
    yy = int(input("输入年份: "))
    mm = int(input("输入月份: "))
    print(calendar.month(yy,mm))
    

    运行程序如下所示:

    sudo docker run -it -v ~/python/app:/usr/local/app --rm mypython date.py
    

    • 因为要用到交互输入年份和月份,所以需要-it参数

    <3>mysql数据库操作

    • 使用之前第二次作业所创建的数据库容器作为数据库实验对象.

    • 进入容器(数据库容器newmysql),接着再使用相关账号和密码登录数据库,如下所示:
     sudo docker exec -it newmysql /bin/bash
    

    • 查看目前存在的数据库,然后进入之前创建的数据库并查看表中的内容,如下所示:

    • mysql.py的代码如下:
    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect("newmysql", "lsj", "123456", "docker_mysql")
    
    # 第一个参数是本地容器名字
    # 第二三个参数是数据库的使用用户与密码
    # 第四个参数是数据库名称
    # 创建游标对象
    
    cursor = db.cursor()
    # 先查询一次数据库数据
    sql = """select * FROM user"""
    cursor.execute(sql)
    results = cursor.fetchall()
    print(results)
    
    # SQL插入语句
    sql = """insert user(id,name,age,sdept)
    	values('031702449','lmh',20,'MBA')"""
    cursor.execute(sql)
    db.commit()
    
    # 插入完成后再读取一次数据库数据
    sql = """select * FROM user"""
    cursor.execute(sql)
    results = cursor.fetchall()
    print(results)
    
    # 关闭数据库连接
    db.close()
    
    

    接着运行程序如下所示:

    sudo docker run -it --rm -v ~/python/app:/usr/local/app --link=newmysql mypython mysql.py
    

    <4>opencv操作

    • opencv.py的代码如下:

    • opencv.py用于将图片旋转90度并保存

    import cv2
    
    # flags传入0表示灰度图像, 1表示彩色图像
    img=cv2.imread('a.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("b.jpg", dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
    print('success rotated!')
    
    • 将要转换的图形放到app目录下(与opencv.py同一目录),并命名为a.jpg。

    运行程序如下所示:

    sudo docker run -it -v ~/python/app:/usr/local/app --rm mypython opencv.py
    

    在程序执行之后可以看到app目录下生成了b.jpg,接着查看a.jpg成功翻转后的图片b.jpg,如下所示

    三、记录作业所花的时间:

    搭建镜像:1小时
    各个程序部署运行:3小时
    写博客:1.5小时
    总计:5.5小时

    四、实验总结

    本次实验内容较少,相比于上次的实验简单,遇到问题不多,把容器名,数据库等参数对应上,基本没什么问题。

  • 相关阅读:
    s:set标签
    Oracle创建表语句(Create table)语法详解及示例
    jsp:useBean
    四则运算练习
    Navicat Premium无法连上ORACLE数据库的几种问题解决方法
    Ubuntu开机等待5分钟的取消方法
    Ubuntu内网、外网网络IP地址配置
    eclipse中常用的快捷键汇总
    oracle死锁进程及杀死死锁进程
    oracle导入导出表数据
  • 原文地址:https://www.cnblogs.com/JokerLSJ/p/12939335.html
Copyright © 2020-2023  润新知