系统综合实践第5次作业

系统综合实践第5次作业

Python镜像定制

创建本次实验的目录,文件名没有限制,我的目录名为py_docker。

整个实验的文件树结构为:

image-20200520020623763

  • Dockerfile

    FROM python:3
    WORKDIR /usr/src/app
    COPY requirements.txt ./
    
    # 修改源并安装依赖
    RUN pip install -r requirements.txt -i https://pypi.douban.com/simple 
    
    ENTRYPOINT ["python"]
    CMD ["hello.py"]
    
  • requirements

    相关依赖包,本次实验使用到的PyMySQL和opencv—python

    PyMySQL
    opencv-python
    
  • 构建镜像

    sudo docker build -t mypython .
    

    image-20200519223740978

    最后出现上面两句,即表示build成功,安装速度还是很快的。

程序部署

在目录下新建apps文件夹,用来存放python代码

  • 你好,世界

    • helloworld.py

      print("hello world")
      
    • 运行程序

      sudo docker run -it -v /home/phd/py_docker/apps:/usc/src/app --rm mypython helloworld.py
      

      image-20200519233724534

  • 日历

    • date.py

      import calendar
       
      # 输入指定年月
      yy = int(input("输入年份: "))
      mm = int(input("输入月份: "))
       
      # 显示日历
      print(calendar.month(yy,mm))
      
    • 运行程序

      sudo docker run -it -v /home/phd/python/apps:/usc/src/app --rm mypython date.py
      

      image-20200519233622752

    • 错误

      因为需要输入年份和月份,因此需要使用交互式容器,如果缺少了-it参数,则无法输入,报错

      image-20200519234204587

  • mysql

    使用在实验2时创建的MySQL容器作为数据库实验对象。

    • mysql_db.py

      import pymysql
      
      class Mysql_db():
      
          def __init__(self,ip,username,password,db_name,table_name):
      
              self.ip=ip
              self.username=username
              self.password=password
              self.db_name=db_name
              self.table_name=table_name
      
          def db_conn(self):
      
              #打开数据库连接
              self.conn=pymysql.connect(self.ip,self.username,self.password,self.db_name)
      
              #创建一个游标
              self.cursor=self.conn.cursor()
      
          #创建表格
          def create_table(self,sql):
      
              self.cursor.execute('drop table if exists %s;' %self.table_name)
      
              self.cursor.execute(sql)
      
          #插入数据
          def insert_data(self,sql):
              #执行SQL语句,发生错误时回滚
              try:
                  self.cursor.execute(sql)
                  self.conn.commit()
      
              except :
                  self.conn.rollback()
      
          #查询数据
          def select_all(self):
      
              sql='select * from %s' %self.table_name
              self.cursor.execute(sql)
              return self.cursor.fetchall()
      
          #更新数据库数据
          def update_data(self):
              #执行SQL语句,发生错误时回滚
              try:
                  self.cursor.execute(sql)
                  self.conn.commit()
      
              except :
                  self.conn.rollback()        
      
          #删除数据
          def delete_data(self):
              #执行SQL语句,发生错误时回滚
              try:
                  self.cursor.execute(sql)
                  self.conn.commit()
      
              except :
                  self.conn.rollback()
      
      
          #关闭数据库
          def conn_close(self):
      
              self.conn.close()
      
    • sql.py

      from mysql_db import Mysql_db
      
      ip='phdmysql'           #容器名
      username='docker'       #用户名
      password='123456'       #密码
      db_name='docker_mysql'  #数据库名
      table_name='test'       #表名
      
      db=Mysql_db(ip, username, password, db_name,table_name)
      db.db_conn()
      
      sql1="insert into %s values(031702427,'frx');" %table_name
      db.insert_data(sql1)
      
      print(db.select_all())
      db.conn_close()
      
    • 运行前数据库状态

      image-20200520001522941

    • 运行程序

      sudo docker run -it --rm -v /home/phd/py_docker/apps:/usr/src/app --link=phdmysql mypython sql.py
      

      image-20200520015642982

    • 运行后数据库状态,插入了一条数据

      image-20200520015802045

  • OpenCV程序

    • cv.py

      #简单的生成灰度图形
      #通过cv2.imread直接实现,0表示使用灰度读入
      #最后将灰度图像保存在同一目录下
      import cv2
      
      img = cv2.imread("image.jpg", 0)
      cv2.imwrite('result.jpg', img)
      print("success")
      
    • 将要转换的图形放到apps目录下(与cv.py同一目录),并命名为image.jpg

    • 运行程序

      sudo docker run -it --rm -v /home/phd/py_docker/apps:/usr/src/app mypython cv.py
      

      image-20200520020005500

      执行之后可以看到,在目录下生成了result.jpg

      image-20200520021210160

    • 原图

      image

    • 返回图

      image-20200520020512604

实验总结

这次的实验相比第四次实验,就简单了很多,内容也相对较少。因为之前有使用过opencv,会熟悉一点,就很简单的写了一个应用,因为太简单,也不需要debug,所以完成的很快。

完成作业所花的时间

查阅资料:1小时
学习实践:2.5小时
博客编写:1.5小时
合计: 5小时

posted @ 2020-05-20 00:53  Em_o  阅读(193)  评论(0编辑  收藏  举报