zoukankan      html  css  js  c++  java
  • 2020系统综合实践 第5次实践作业

    python镜像的安装及配置

    创建下列文件

    Dockerfile

    FROM python:3.7
    WORKDIR /app
    COPY requirements*.txt ./
    
    # 修改源并安装依赖
    RUN pip install -r requirements.txt -i https://pypi.douban.com/simple 
    
    ENTRYPOINT ["python"]
    CMD ["hello.py"]
    

    requirements.txt

    PyMySQL
    opencv-python
    

    运行命令

    sudo su 
    docker build -t python:3 .
    

    代码实现

    helloworld

    • hello.py
    print("hello world")
    
    • 运行
    docker run -v /home/lyh/python/app:/app --rm python:3
    

    日历

    • date.py
    import calendar
    yy = int(input("输入年份: "))
    mm = int(input("输入月份: "))
    print(calendar.month(yy,mm))
    
    • 运行
    docker run -it -v /home/lyh/python/app:/app --rm python:3 date.py
    

    数据库

    • mysql_db.py(python操作数据库的方法)
    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='lyhmysql'          #容器名
    username='lin'         #用户名
    password='123456'      #密码
    db_name='docker_mysql' #数据库名
    table_name='people'    #表名
    db=Mysql_db(ip, username, password, db_name,table_name)
    
    db.db_conn()
    sql='''
            create table %s (
                id varchar(10) primary key,
                name varchar(20)
            );
    '''%table_name
    db.create_table(sql)
    sql1="insert into %s values(031702234,'lyh');" %table_name
    db.insert_data(sql1)
    
    print(db.select_all())
    
    db.conn_close()
    
    • 运行

    使用实验二构造好的镜像

    #打开新终端
    sudo su
    docker run --name lyhmysql -p 3306:3306 -d lyhmysql
    docker ps
    docker exec -it lyhmysql /bin/bash
    


    运行程序

    docker run -it -v /home/lyh/python/app:/app --link=lyhmysql --rm python:3 sql.py
    


    在容器里查看

    opencv

    • cv.py
    import cv2 as cv
    
    img1 = cv.imread("photo1.jpg")
    img2 = cv.imread("photo2.jpg")
    
    result = cv.addWeighted(img1,0.3,img2,0.9,0)  
    cv.imwrite('result.jpg', result)
    print("success")
    
    • 运行
    docker run -it -v /home/lyh/python/app:/app --rm python:3 cv.py
    

    • 结果

    我实现两幅图的简单交融
    photo1.jpg

    photo2.jpg

    result.jpg

    总结

    • 所用时间
    小时
    查资料 2
    实践操作 2.5
    写博客 0.5
    合计 5
    • 遇到一些坑的,

    例如找不到py文件,最终发现是路径错误;
    原本想直接使用实验二的容器,发现容器闪退,没办法只有使用镜像,重建一个;
    运行opencv程序时报错,一直找不到原因,最终发现是符号用了中文符号。

  • 相关阅读:
    Spring IOC之容器概述
    SQL Server之记录筛选(top、ties、offset)汇总
    [译]Java 设计模式之单例
    [译]Java 设计模式之适配器
    [译]Java 设计模式之桥接
    [译]Java 设计模式之装饰器
    [译]Java 设计模式 之模板方法
    [译]Java 设计模式之抽象工厂
    [译]Java 设计模式之工厂
    传入两个字符串,确认其中一个字符串重新排序后能否变为另一个字符串(也就是两个字符串相等)
  • 原文地址:https://www.cnblogs.com/lyhtsl/p/12916373.html
Copyright © 2011-2022 走看看