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


    系统综合实践第5次作业

    Python镜像定制

    创建本次实验的目录,文件名没有限制,我的目录名为py_docker。

    整个实验的文件树结构为:

    image-20200520020623763

    • 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 .
      

      image-20200519223740978

      最后出现上面两句,即表示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
        

        image-20200519233724534

    • 日历

      • 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
        

        image-20200519233622752

      • 错误

        因为需要输入年份和月份,因此需要使用交互式容器,如果缺少了-it参数,则无法输入,报错

        image-20200519234204587

    • 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()
        
      • 运行前数据库状态

        image-20200520001522941

      • 运行程序

        sudo docker run -it --rm -v /home/phd/py_docker/apps:/usr/src/app --link=phdmysql mypython sql.py
        

        image-20200520015642982

      • 运行后数据库状态,插入了一条数据

        image-20200520015802045

    • 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
        

        image-20200520020005500

        执行之后可以看到,在目录下生成了result.jpg

        image-20200520021210160

      • 原图

        image

      • 返回图

        image-20200520020512604

    实验总结

    这次的实验相比第四次实验,就简单了很多,内容也相对较少。因为之前有使用过opencv,会熟悉一点,就很简单的写了一个应用,因为太简单,也不需要debug,所以完成的很快。

    完成作业所花的时间

    查阅资料:1小时
    学习实践:2.5小时
    博客编写:1.5小时
    合计: 5小时

  • 相关阅读:
    关于flume配置加载
    ListMultimap 容器
    HotSpotOverview.pdf
    芝麻西瓜
    念念不忘必有回响
    phpstrom代码格式化
    小总结
    Redis支持的数据类型
    如何通过phpstorm查看某一行代码的变更记录
    mysql自动添加时间
  • 原文地址:https://www.cnblogs.com/phd1999/p/12920690.html
Copyright © 2020-2023  润新知