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


    一、Python镜像环境搭建

    1.pull python镜像

    sudo docker pull python
    

    2.编写相关文件


    Dockerfile文件:

    FROM python:3
    MAINTAINER wrq
    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
    

    3.创建镜像

    sudo docker build -t mypython .
    



    二、Hello World

    hello.py:

    print('hello world!')
    

    运行容器:

    sudo docker run -it -v /home/system/test5/apps:/usr/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/system/test5/apps:/usr/src/app --rm mypython date.py
    


    四、mysql数据库操作

    使用实验二中的数据库镜像,运行容器。

    sudo docker run --name testmysql -d testrmysql
    


    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='testmysql'          #容器名
    username='rae'         #用户名
    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(2,'aaa');" %table_name
    db.insert_data(sql1)
    
    print(db.select_all())
    
    db.conn_close()
    

    运行sql.py代码:

    sudo docker run -it -v /home/system/test5/apps:/usr/src/app --rm --link=testmysql mypython sql.py
    


    在mysql容器中验证结果:

    五、opencv程序的部署运行

    opencv.py:

    import cv2
    
    # flags=0表示灰度图像, 1表示彩色图像
    img=cv2.imread('test.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("test-rotated.jpg", dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
    print('rotated and saved.')
    

    运行容器:

    sudo docker run -it -v /home/system/test5/apps:/usr/src/app --rm mypython opencv.py
    


    原图:

    旋转后:

    六、问题与总结

    1.opencv程序的部署运行时出现如下报错:

    检查后发现是app路径问题,还是要小心一点。

    七、小结

    本次实验花了大概四个小时。
    相对实验四真的轻松了很多,总体过程也比较顺利。本次实验学会如何使用使用docker容器运行Python程序,对之前一些操作也进行了复习,感到博客步骤写细一点还是有助于自己复习了。

  • 相关阅读:
    Axure流程图
    Axure工作区间
    Axure简介
    Java知识导航总图
    SQL筛选出同一学科的时间最新的记录
    从高版本JDK换成低版本JDK报错Unsupported major.minor version 52.0
    java.lang.IllegalArgumentException: No converter found for return value of type
    httpClient创建对象、设置超时
    sql 查出一张表中重复的所有记录数据
    java List分批处理
  • 原文地址:https://www.cnblogs.com/RAEQI/p/12936204.html
Copyright © 2020-2023  润新知