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个小时的时间
posted @ 2020-05-20 02:18  _FWH  阅读(165)  评论(0编辑  收藏  举报