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

    1.构建python镜像

    项目目录

    dockerfile 文件

    FROM python:3
    #工作目录
    WORKDIR /usr/src/app
    # 添加依赖声明文件
    COPY ./requirements.txt ./requirements.txt 
    # 安装依赖,换清华源
    RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
    COPY myapp/hello.py /usr/src/app/ 
    VOLUME /usr/src/app
    ENTRYPOINT ["python"]
    # 默认打开文件
    CMD ["hello.py"]
    

    py.conf

    [global]
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    [install]
    trusted-host = https://pypi.tuna.tsinghua.edu.cn
    

    requirements.txt

    PyMySQL
    opencv-python
    

    构建镜像

    docker build -t mypython .
    

    2.部署运行

    2.1 hello world

    hello.py

    print('hello world')
    

    无交互式输入
    Dockerfile已经把helloworld代码拷进容器了,所以后面不需要附加py文件名
    由于程序运行完就结束了,所以在得到结果之后可以用--rm 删掉容器。

    docker run -v /home/linrui/python/myapp:/usr/src/app --rm mypython
    

    2.2 日历输出

    date.py

    # 引入日历模块
    import calendar
    # 输入指定年月
    yy = int(input("输入年份: "))
    mm = int(input("输入月份: "))
    # 显示日历
    print(calendar.month(yy,mm))
    
    docker run -v /home/linrui/python/myapp:/usr/src/app --rm mypython date.py
    

    2.3 mysql数据库操作

    运行之前的mysql容器,给mysql数据库添加一个远程连接的用户

    docker exec -it lrsql5 /bin/bash   #进入容器内部
    docker mysql -u docker -p
    
    grant all privileges on *.*  to 'docker'@'%' ;   # 给用于授予权限
    flush privileges;  # 刷新权限
    

    MySQL.py

    import pymysql
     
    # 打开数据库连接,localhost替换成ip地址,后面依次是用户名,密码,数据库名
    db = pymysql.connect("10.0.2.15","docker","123456","docker_mysql" )
     
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
     
    # 使用 execute()  方法执行 SQL 查询 
    cursor.execute("SELECT VERSION()")
     
    # 使用 fetchone() 方法获取单条数据.
    data = cursor.fetchone()
     
    print ("Database version : %s " % data)
     
    # 关闭数据库连接
    db.close()
    

    执行以上脚本

    创建数据库表

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("10.0.2.15","docker","123456","docker_mysql" )
     
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
     
    # 使用 execute() 方法执行 SQL,如果表存在则删除
    cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
     
    # 使用预处理语句创建表
    sql = """CREATE TABLE EMPLOYEE (
             FIRST_NAME  CHAR(20) NOT NULL,
             LAST_NAME  CHAR(20),
             AGE INT,  
             SEX CHAR(1),
             INCOME FLOAT )"""
     
    cursor.execute(sql)
     
    # 关闭数据库连接
    db.close()
    

    进入容器查看

    数据库插入操作

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("10.0.2.15","docker","123456","docker_mysql")
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 插入语句
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
             LAST_NAME, AGE, SEX, INCOME)
             VALUES ('LIN', 'Linrui', 20, 'W', 10000)"""
    try:
       # 执行sql语句
       cursor.execute(sql)
       # 提交到数据库执行
       db.commit()
    except:
       # 如果发生错误则回滚
       db.rollback()
     
    # 关闭数据库连接
    db.close()
    


    数据库查询操作

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("10.0.2.15","docker","123456","docker_mysql" )
     
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
     
    # SQL 查询语句
    sql = "SELECT * FROM EMPLOYEE 
           WHERE INCOME > %s" % (1000)
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 获取所有记录列表
       results = cursor.fetchall()
       for row in results:
          fname = row[0]
          lname = row[1]
          age = row[2]
          sex = row[3]
          income = row[4]
           # 打印结果
          print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % 
                 (fname, lname, age, sex, income ))
    except:
       print ("Error: unable to fetch data")
     
    # 关闭数据库连接
    db.close()
    

    2.4 opencv程序

    opencv.py

    # 仿射变换
    import cv2
    import numpy as np
    img = cv2.imread('picture.jpg')
    rows,cols,ch = img.shape
    pts1 = np.float32([[50,50],[200,50],[50,200]])
    pts2 = np.float32([[10,100],[200,50],[100,250]])
    M = cv2.getAffineTransform(pts1,pts2)
    dst = cv2.warpAffine(img,M,(cols,rows))
    # 写入文件
    cv2.imwrite("picture_new.jpg", dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
    

    3.总结

    花费时间:3小时+博客1小时
    遇到的问题:

    1.构建python镜像copy不成功

    Dockerfile以#开头的行视为注释,如果在有效指令后面使用#号注释,会将其作为参数处理,导致报错,解决方法:将注释去掉或者把注释单独放一行

    2.运行日历输出的程序时出现AttributeError: module 'calendar' has no attribute 'month'


    本地保存了名为calendar.py的文件,导致与python中的类calendar冲突,将calendar.py文件重命名就解决此问题了

    3.部署mysql数据库连接不上


    解决方法:要先添加远程连接用户,参考上面步骤,注意docker用户是之前创建过的用户

  • 相关阅读:
    转:[windows]DOS批处理添加任务计划
    转:winform_webApiSelfHost及 OWIN WebAPI Service
    Ubuntu上将终端安装到右键上
    Ubuntu上安装VMware tools
    OpenStack中的rabbitmq的配置方法
    centos上的grub文件修改
    centos7上安装0penStack
    怎样使用yum安装OpenStack
    epel扩展库的安装
    centos7上修改主机名
  • 原文地址:https://www.cnblogs.com/Linrrui/p/12920757.html
Copyright © 2011-2022 走看看