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

    1、Python自定义镜像搭建

    • 拉取dockerhub上的python镜像
          docker pull python:3.7
      
    • Dockerfile文件
          FROM python:3.7
        MAINTAINER FWH
        # 设置工作目录
        WORKDIR /app  
        # 添加依赖声明文件
        COPY requirements.txt ./  
        RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
        VOLUME /usr/src/app
        # 实现命令行式调用容器
        ENTRYPOINT ["python"]    
        # ENTRYPOINT默认参数
        CMD ["hello.py"]   
      
    • requirements.txt
          #requirements.txt
        PyMySQL
        opencv-python
      
    • 搭建镜像
          docker build -t docker-python .
      

    2、运行Python程序

    • helloworld

      • hello.py
          # hello.py
          print('hello world')
        
      • 运行
          docker run --rm -v /home/ubuntu/ex5/app:/app docker-python hello.py
        
    • 日历输出

      • date.py
          # date.py
          import calendar
          yy = int(input("输入年份: "))
          mm = int(input("输入月份: "))
          print(calendar.month(yy,mm))
        
      • 运行
          docker run -it --rm -v /home/ubuntu/ex5/app:/app docker-python date.py
        
    • mysql数据库操作

      • 用于创建一个新的网络连接
          docker network create --subnet=172.1.0.0/16 py_mysql
        
      • 运行mysql容器
          docker run --network py_mysql --name mysql_fwh -d mysql:fwh
          docker exec -it mysql_fwh /bin/bash
        
      • mysql.py
          import pymysql
         
        # 打开数据库连接
        db = pymysql.connect(host="mysql_fwh",user="docker",password="123456",database="docker_mysql" )
         
        # 使用cursor()方法获取操作游标 
        cursor = db.cursor()
        
        # 使用 execute()  方法执行 SQL 查询
        cursor.execute("SELECT VERSION()")
        
        # 使用 fetchone() 方法获取单条数据.
        data = cursor.fetchone()
        
        print("Database version : %s " % data)
        
        # 使用预处理语句创建表
        sql = """CREATE TABLE user (
        	 id  CHAR(10) NOT NULL,
        	 name  CHAR(20) )"""
        try:
           # 执行sql语句
           cursor.execute(sql)
           # 提交到数据库执行
           db.commit()
        except:
           # 如果发生错误则回滚
           db.rollback()
        
        # SQL 插入语句
        sql = """INSERT INTO user(id,name)
        	 VALUES ('01', 'roll')"""
        try:
           # 执行sql语句
           cursor.execute(sql)
           # 提交到数据库执行
           db.commit()
        except:
           # 如果发生错误则回滚
           db.rollback()
        
        # SQL 查询语句
        sql = """SELECT * FROM user"""
        
        try:
           # 执行SQL语句
           cursor.execute(sql)
           # 获取所有记录列表
           results = cursor.fetchall()
           for row in results:
              idd = row[0]
              name = row[1]
               # 打印结果
              print ("id:%s,name:%s" % 
        	     (idd, name ))
        except:
           print ("Error: unable to fetch data")
        
        # 关闭数据库连接
        db.close()
        
      • 运行python
          docker run --rm -v  /home/ubuntu/ex5/app:/app --network py_mysql docker-python mysql.py
        

    • opencv程序的部署运行

      • opencv.py
          import numpy as np
        import cv2
        # Create a black image
        img = np.zeros((512,512,3), np.uint8)
        
        # Draw a diagonal blue line with thickness of 5 px
        img = cv2.line(img,(0,0),(512,512),(0,0,255),5)
        
        img = cv2.circle(img,(256,256), 100, (0,0,255), -1)
        pts = np.array([[256,60],[56,360],[456,360]], np.int32)
        pts = pts.reshape((-1,1,2))
        img = cv2.polylines(img,[pts],True,(0,0,255))
        font = cv2.FONT_HERSHEY_SIMPLEX
        cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
        
        cv2.imwrite('test.png',img) 
        
      • 运行
          docker run --rm -v /home/ubuntu/ex5/app:/app docker-python opencv.py
        

    小结

    • 问题和解决办法
      • 问题:日历输出时出错
      • 解决:docker run 后面应加-it,有交互输入时,运行容器需要用到-it参数
    • 用时
      • 本次实验和上次比要简单了一些,花了6个小时的时间
  • 相关阅读:
    Java程序员之JS(一) 入门
    Java虚拟机(一)之开篇
    JDK/JRE/JVM区别与联系
    web开发视频(一)之环境准备
    Spring MVC 教程,快速入门,深入分析
    Java中“==和equals”的区别
    如何查看电脑最大支持多少GB内存
    win10 计算器calc命令打不开
    Win10图标显示不正常解决办法
    在系统右键菜单上添加程序
  • 原文地址:https://www.cnblogs.com/fwhdbk/p/12920799.html
Copyright © 2011-2022 走看看