• 系统综合实践_5


    1、Python镜像构建


    • 项目结构

    • 配置文件

    • Dockerfile

      FROM python:3
      
      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 code/helloworld.py /usr/src/app/
      VOLUME /usr/src/app
      
      ENTRYPOINT ["python"]
      CMD ["helloworld.py"]
      
    • requirement.txt

      PyMySQL
      opencv-python
      
    • 构建镜像

            docker build -t my_py .
    

    2、部署程序


    • helloworld

    • 程序代码

      print('hello world !')
      
    • 运行程序
      执行命令,Dockerfile指定默认执行helloworld.py。参数说明:
          -v:将本地目录挂载到python工作目录以方便代码修改
          --rm:运行完毕后自动移除容器。

           docker run --rm -v /home/hcr/python/code:/usr/src/app my_py
      

    • 日历输出

    • 程序代码

      import calendar
      
      # 输入指定年月
      yy = int(input("输入年份: "))
      mm = int(input("输入月份: "))
      
      #设置第一天是星期天
      calendar.setfirstweekday(firstweekday=6)
      
      # 显示日历
      print(calendar.month(yy,mm))
      
    • 运行程序
      执行命令,参数说明:
          -it:声明需要交互式终端以读取输入

            docker run -it --rm -v /home/hcr/python/code:/usr/src/app my_py date.py
      

    • mysql数据库操作(使用实验二的数据库容器)

    • 程序代码

      import pymysql
      
      # 打开数据库连接
      db = pymysql.connect("hcr_mysql", "docker", "123456", "docker_mysql")
      
      # 创建游标对象
      cursor = db.cursor()
      
      # 查询数据库数据
      sql = """select * FROM user"""
      cursor.execute(sql)
      results = cursor.fetchall()
      print(results)
      
      # 插入
      sql = """insert user(id,username)
            values('02','darling')"""
      cursor.execute(sql)
      db.commit()
      
      # 插入完成后再读取一次数据库数据
      sql = """select * FROM user"""
      cursor.execute(sql)
      results = cursor.fetchall()
      print(results)
      
      # 关闭数据库连接
      db.close()
      
    • 运行程序,两次显示数据库的数据

            docker run --rm -v /home/hcr/python/code:/usr/src/app --link=hcr_mysql my_py sql.py
      

    • Opencv

    • 程序代码

      import cv2
      
      img = cv2.imread("test.jpg", 1)
      res = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # BGR->GRAY
      cv2.imwrite('result.jpg', res)
      
      print("success!")
      
    • 运行程序

            docker run -it --rm -v /home/hcr/python/code:/usr/src/app my_py opencv.py
      

    • 查看结果
          左图为原始图片,右图是执行程序后生成的图片

    3、问题 & 解决


        在构建日历输出的容器时报EOFError: EOF when reaeding a line的错误,查阅后了解到,由于日历输出的程序用到了input,需要输入内容,因此运行容器的时候需要用到-it参数,添上即可。

    4、感想


        此次实验大概花了3h就搞定了,相比于上次实验,这次实验做的可真的是太轻松了。

  • 相关阅读:
    nginx error_log报错upstream timed out (110: Connection timed out)
    ubuntu12.04 nginx添加ssl认证
    TP5.0:同一个控制器访问不同方法
    TP5.0:的安装与配置
    html常用的小技能
    详情介绍win7:编辑文件夹时提示操作无法完成,因为其中的文件夹或文件已在另一个程序中打开的解决过程
    详细讲解:通过phpstudy 设置站点域名、站点域名管理
    tp3.2.3自定义全局函数的使用
    详细讲解:tp3.2.3生成验证码并进行验证(ajax校验返回及自定义返回)
    WPS去掉英语单词下面的红斜线
  • 原文地址:https://www.cnblogs.com/honger125/p/12917337.html
Copyright © 2020-2023  润新知