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)发表一篇博客,记录主要过程、遇到的问题和解决方法,以及作业所花的时间。

    遇到的问题和解决方法:

    实验一:

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

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

    作业所花的时间

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

  • 相关阅读:
    [数学建模(八)]使用MATLAB绘图
    [数学建模(七)]使用MATLAB实现数据拟合
    [数学建模(六)]使用MATLAB实现插值
    [数学建模(五)]线性规划,二次规划和非线性规划的MATLAB求解
    [数学建模(四)]MATLAB神经网络工具箱的简单应用
    [数学建模(三)]遗传算法与旅行商问题
    [数学建模(二)模拟退火法与旅行商问题]
    [数学建模(一)]蒙特卡罗方法
    Java虚拟机13:Java类加载机制
    Java虚拟机14:类加载器
  • 原文地址:https://www.cnblogs.com/wawu/p/12935377.html
Copyright © 2011-2022 走看看