第5次实践作业

1.Python镜像定制

  • Dockerfile

    FROM python:3
    MAINTAINER zzq
    WORKDIR /pyfile
    
    # 依赖模块列表
    COPY requirements*.txt ./
    
    # 修改源并安装依赖
    RUN pip install -r requirements.txt -i https://pypi.douban.com/simple 
    
    # 实现命令行式调用容器
    ENTRYPOINT ["python"]
    
    # 设置默认打开的文件
    CMD ["hello.py"]
    

    按教程打的办法会出现如下图的问题,经过多次失败后,找到一个办法,这里的requirement后面要添加*,别问,问就是不知道

  • requirements

    PyMySQL
    opencv-python
    

    这里的两条语句是为了后面数据库操作和OpenCV程序引入依赖,否则会出现问题。

  • 构建镜像

    sudo docker build -t python_test .

    第5次实践作业_第1张图片

2.程序部署

  • helloworld

    • py内容

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

      sudo docker run -it --rm -v /home/ubuntu/test5/pyfile:/pyfile python_test opencv.py

    • 复习容器运行命令

      • -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。
      • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
      • -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
      • -it:创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
      • --name:为创建的容器命名
      • -p 8080:80: 将容器的80端口映射到宿主机的8080端口
  • 日历

    • py内容

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

      sudo docker run -it --rm -v /home/ubuntu/test5/pyfile:/pyfile python_test date.py

  • mysql

    • py内容

      import pymysql
      
      # 打开数据库连接
      db = pymysql.connect("zzq_mysql", "kingdom", "123456", "docker_mysql")
      
      # 第一个参数是本地容器名字
      # 第二三个参数是数据库的使用用户与密码
      # 第四个参数是数据库名称
      # 创建游标对象
      
      cursor = db.cursor()
      # 先查询一次数据库数据
      sql = """select * FROM test"""
      cursor.execute(sql)
      results = cursor.fetchall()
      print(results)
      
      # SQL插入语句
      sql = """insert test(username,password)
      	values('gyl','234567')"""
      cursor.execute(sql)
      db.commit()
      
      # 插入完成后再读取一次数据库数据
      sql = """select * FROM test"""
      cursor.execute(sql)
      results = cursor.fetchall()
      print(results)
      
      # 关闭数据库连接
      db.close()
      
    • 使用实验二配置好的容器,先查看其表内容(实验二快达链接)

      第5次实践作业_第2张图片

    • 运行程序

      sudo docker run -it --rm -v /home/ubuntu/test5/pyfile:/pyfile --link=zzq_mysql python_test db.py

    • 运行后

  • OpenCV程序

    • py内容

      #截取图片的一部分,即ROI(region of interest)
      
      import cv2
      import numpy as np
      image = cv2.imread('test.png')
      result = image[250:1700, 0:900]
      cv2.imwrite('test_result.png', result)
      
    • 运行程序

      sudo docker run -it --rm -v /home/ubuntu/test5/pyfile:/pyfile python_test opencv.py

    • 原图与结果

      第5次实践作业_第3张图片

3.实验总结

  这次实验比之前简单了,然而我还是踩了几个坑~,比如上面所说到的要为requirements提供依赖。这次实验大概做了五六个小时吧。

你可能感兴趣的:(第5次实践作业)