系统综合实践_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,相比于上次实验,这次实验做的可真的是太轻松了。

猜你喜欢

转载自www.cnblogs.com/honger125/p/12917337.html