zoukankan      html  css  js  c++  java
  • 第5次实践作业

    本次作业为Python专题。Python是将练习使用docker容器运行Python程序。Python是很常用的程序设计语言,但是Python程序的运行依赖于提前的系统环境配置,为了降低系统配置的复杂度,同时减小资源开销,将系统环境容器化是一种解决方案。请根据Python官方镜像的镜像说明,自定义Python镜像文件,将Python程序运行起来。
    关于容器
    (1)为便于程序修改调试,在容器启动时需将本地文件目录挂载至容器内的工作目录;
    (2)如程序需要运行额外的Python库,请在自定义镜像时完成安装,安装方法参考docker hub上的Python镜像说明;
    关于代码
    (3)在(1)和(2)的基础上,通过容器完成简单helloworld、日历输出、mysql数据库操作、opencv程序的部署运行;
    mysql数据库可以使用之前作业创建的镜像
    opencv可以参照链接任意选择
    关于python版本
    (4)python2或python3版本不限,也可全部都做;

    (1)前期准备

    requirements.txt

    PyMySQL
    
    opencv-python
    

    Dockerfile

    FROM python:3
    
    WORKDIR /usr/src/app
    
    COPY requirements.txt ./
    
    RUN pip install -r requirements.txt -i https://pypi.douban.com/simple  requirement.txt  
    
    ENTRYPOINT ["python"]
    
    CMD ["hello.py"]
    

    构建镜像:

    docker build -t mypython .
    

    (2)helloworld

    hello.py

    print("hello world")
    

    运行

    docker run -it -v /home/h/桌面/py/app:/usr/src/app --rm mypython hello.py
    

    (3)日历输出

    sudo docker run -it -v /home/h/桌面/py/app:/usr/src/app --rm mypython date.py
    

    date.py

    import calendar
    
    # 输入指定年月
    yy = int(input("输入年份: "))
    mm = int(input("输入月份: "))
    
    # 显示日历
    print(calendar.month(yy,mm))
    

    参考

    (4)mysql数据库操作

    因为容器删掉了,所以重新按第2次实践作业,创建容器并进入。
    参考
    mysql.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 import Mysql_db
    
    ip='xenodochial_banach'          #容器名
    username='docker'         #用户名
    password='123456'      #密码
    db_name='docker_mysql'#数据库名
    table_name='user'    #表名
    db=Mysql_db(ip, username, password, db_name,table_name)
    
    db.db_conn()
    
    sql1="insert into %s values(181700135,'123');" %table_name
    db.insert_data(sql1)
    
    print(db.select_all())
    
    db.conn_close()
    

    链接数据库并,运行插入指令

    docker run -it -v /home/h/桌面/py/app:/usr/src/app --link=xenodochial_banach:db mypython  sql.py
    

    (5)opencv程序的部署运行

    参考
    op.py

    import numpy as np
    import cv2
    
    img = cv2.imread('tt.jpg',0)
    #cv2.imshow('img',img)
    cv2.imwrite('tt1.png',img)
    

    运行

    sudo docker run -it -v /home/h/桌面/py/app:/usr/src/app --rm mypython op.py
    


    原图与结果

    (6)发表一篇博客,记录主要过程、遇到的问题和解决方法,以及作业所花的时间。

    遇到的问题和解决方法:

    实验一:

    换其他源解决
    实验二:
    实验二的问题其实很多 (忘记截图了),但是删了容器重新来一遍就可以了
    实验三:
    代码直接参考参考资料的,但是还是报错了:

    百度后最简单的解决方法
    虽然简单但是非常有效!

    作业所花的时间

    这次花的时间比之前少很多,一个下午完成的。

  • 相关阅读:
    A1023 Have Fun with Numbers (20分)(大整数四则运算)
    A1096 Consecutive Factors (20分)(质数分解)
    A1078 Hashing (25分)(哈希表、平方探测法)
    A1015 Reversible Primes (20分)(素数判断,进制转换)
    A1081 Rational Sum (20分)
    A1088 Rational Arithmetic (20分)
    A1049 Counting Ones (30分)
    A1008 Elevator (20分)
    A1059 Prime Factors (25分)
    A1155 Heap Paths (30分)
  • 原文地址:https://www.cnblogs.com/wawu/p/12935377.html
Copyright © 2011-2022 走看看