• 第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 .

    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()
        
      • 使用实验二配置好的容器,先查看其表内容(实验二快达链接)

      • 运行程序

        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

      • 原图与结果

    3.实验总结

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

  • 相关阅读:
    2018-12-25-dot-net-double-数组转-float-数组
    2018-12-25-dot-net-double-数组转-float-数组
    2019-10-24-dotnet-列表-Linq-的-Take-用法
    2019-10-24-dotnet-列表-Linq-的-Take-用法
    2018-8-10-C#-代码占用的空间
    2018-8-10-C#-代码占用的空间
    2018-4-29-C#-金额转中文大写
    2018-4-29-C#-金额转中文大写
    Java实现 LeetCode 630 课程表 III(大小堆)
    Java实现洛谷 P1072 Hankson 的趣味题
  • 原文地址:https://www.cnblogs.com/zzqsss/p/12914651.html
Copyright © 2020-2023  润新知