系统综合实践_5

1、Python镜像构建


  • 项目结构

  • 配置文件

  • Dockerfile

    FROM python:3
    
    WORKDIR /usr/src/app
    
    COPY requirements.txt ./
    RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
    
    COPY code/helloworld.py /usr/src/app/
    VOLUME /usr/src/app
    
    ENTRYPOINT ["python"]
    CMD ["helloworld.py"]
    
  • requirement.txt

    PyMySQL
    opencv-python
    
  • 构建镜像

        docker build -t my_py .

2、部署程序


  • helloworld

  • 程序代码

    print('hello world !')
    
  • 运行程序
    执行命令,Dockerfile指定默认执行helloworld.py。参数说明:
        -v:将本地目录挂载到python工作目录以方便代码修改
        --rm:运行完毕后自动移除容器。

         docker run --rm -v /home/hcr/python/code:/usr/src/app my_py
    

  • 日历输出

  • 程序代码

    import calendar
    
    # 输入指定年月
    yy = int(input("输入年份: "))
    mm = int(input("输入月份: "))
    
    #设置第一天是星期天
    calendar.setfirstweekday(firstweekday=6)
    
    # 显示日历
    print(calendar.month(yy,mm))
    
  • 运行程序
    执行命令,参数说明:
        -it:声明需要交互式终端以读取输入

          docker run -it --rm -v /home/hcr/python/code:/usr/src/app my_py date.py
    

  • mysql数据库操作(使用实验二的数据库容器)

  • 程序代码

    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect("hcr_mysql", "docker", "123456", "docker_mysql")
    
    # 创建游标对象
    cursor = db.cursor()
    
    # 查询数据库数据
    sql = """select * FROM user"""
    cursor.execute(sql)
    results = cursor.fetchall()
    print(results)
    
    # 插入
    sql = """insert user(id,username)
          values('02','darling')"""
    cursor.execute(sql)
    db.commit()
    
    # 插入完成后再读取一次数据库数据
    sql = """select * FROM user"""
    cursor.execute(sql)
    results = cursor.fetchall()
    print(results)
    
    # 关闭数据库连接
    db.close()
    
  • 运行程序,两次显示数据库的数据

          docker run --rm -v /home/hcr/python/code:/usr/src/app --link=hcr_mysql my_py sql.py
    

  • Opencv

  • 程序代码

    import cv2
    
    img = cv2.imread("test.jpg", 1)
    res = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # BGR->GRAY
    cv2.imwrite('result.jpg', res)
    
    print("success!")
    
  • 运行程序

          docker run -it --rm -v /home/hcr/python/code:/usr/src/app my_py opencv.py
    

  • 查看结果
        左图为原始图片,右图是执行程序后生成的图片

3、问题 & 解决


    在构建日历输出的容器时报EOFError: EOF when reaeding a line的错误,查阅后了解到,由于日历输出的程序用到了input,需要输入内容,因此运行容器的时候需要用到-it参数,添上即可。

4、感想


    此次实验大概花了3h就搞定了,相比于上次实验,这次实验做的可真的是太轻松了。

原文地址:https://www.cnblogs.com/honger125/p/12917337.html