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

    一、Python环境搭建

    1.拉取镜像

    sudo docker pull python:3.7  #拉取dockerhub上的python镜像
    

    image.png

    2.创建文件

    • Dockerfile文件
    FROM python:3.7
    # 设置工作目录
    WORKDIR /usr/src/app 
    # 添加依赖声明文件
    COPY requirements.txt ./ 
    RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
    COPY apps/hello.py /usr/src/app/
    # 实现命令行式调用容器
    VOLUME /usr/src/app
    # 实现命令行式调用容器
    ENTRYPOINT ["python"]   
    # ENTRYPOINT默认参数
    CMD ["hello.py"]   
    
    • requirements.txt
    PyMySQL
    opencv-python
    
    • hello.py
    #hello.py
    print('hello world')
    
    • date.py
    #date.py日历输出
    
    import calendar
    yy = int(input("输入年份: "))
    mm = int(input("输入月份: "))
    print(calendar.month(yy,mm))
    
    • db.py
    #db.py 向已有的数据库和表格中添加一条数据(031702500,zz)
    import pymysql
    
    # 打开数据库连接
    #数据库地址使用mysql的容器名
    #使用实验二时候创建的用户,密码,数据库
    db = pymysql.connect("mysql1", "hh", "123456", "docker_mysql") 
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    
    # 使用 execute()  方法执行 SQL 查询
    cursor.execute("SELECT VERSION()")
    
    # 使用 fetchone() 方法获取单条数据.
    data = cursor.fetchone()
    
    print("Database version : %s " % data)
    
    # SQL 插入语句
    sql = """INSERT INTO user(id,name)
             VALUES (031702500', 'zz')"""
    try:
       # 执行sql语句
       cursor.execute(sql)
       # 提交到数据库执行
       db.commit()
    except:
       # 如果发生错误则回滚
       db.rollback()
    
    # SQL 查询语句
    sql = """SELECT * FROM EMPLOYEE"""
    
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 获取所有记录列表
       results = cursor.fetchall()
       for row in results:
          idddd = row[0]
          name = row[1]
           # 打印结果
          print ("id=%s,name=%s"% 
                 (id, name ))
    except:
       print ("Error: unable to fetch data")
    
    # 关闭数据库连接
    db.close()
    
    • cv.py
    # cv.py将图片旋转90度并保存
    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.')
    
    • 文件结构
      image.png

    3.构建自定义镜像

    sudo docker build -t python:v1 .  #构建自定义镜像
    

    image.png

    二、测试

    2.1helloworld

    #无交互式输入:
    sudo docker run -v /home/tao/5th/apps:/usr/src/app --rm python:v1
    

    image.png

    2.2日历输出

    #有交互式输入:
    sudo docker run -it -v /home/tao/5th/apps:/usr/src/app --rm python:v1 date.py
    

    image.png

    2.3mysql数据库操作

    • 创建一个新的网络连接
    sudo docker network create --subnet=172.1.0.0/16 py_mysql #创建名为py_mysql的网络
    

    image.png

    • 在创建的网络中运行python和mysql容器
    sudo docker run --network py_mysql --name mysql1 -d mymysql:test  
    sudo docker exec -it mysql1 /bin/bash
    
    • 运行代码
    sudo docker run -it --network py_mysql -v /home/tao/5th/apps:/usr/src/app --rm python:v1 db.py
    

    2.4opencv程序的部署运行

    sudo docker run -v /home/tao/5th/apps:/usr/src/app --rm python:v1 cv.py
    

    image.png

    三、总结

    • 困难

    构建自定义镜像时,出现COPY failed: stat /var/lib/docker/tmp/docker-builder455335933/opt: no such file or directory

    • 原因

    Dockerfile以#开头的行视为注释,如果在有效指令后面使用#号注释,会将其作为参数处理,导致报错**

    • 解决

    将注释去掉即可,或者把注释单独放一行`

    • 耗时

    5小时。

  • 相关阅读:
    jstl嵌套以及输出json的逗号
    关闭win10 更新以后自动重启
    maven 配置错误。
    SQL SERVER 订阅发布在restore DB以后的问题
    Unable to convert MySQL date/time value to System.DateTime
    sql server恢复卡在restoring的解决方法
    打开Excel时总是运行Windows Installer(Visual studio)解决方法
    单元测试用excel connstr
    node.js调试
    javascript数组对象实例方法
  • 原文地址:https://www.cnblogs.com/fdltbk/p/12934392.html
Copyright © 2011-2022 走看看