系统综合实践_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就搞定了,相比于上次实验,这次实验做的可真的是太轻松了。

posted @ 2020-05-20 18:06  Mys_02  阅读(250)  评论(0)    收藏  举报