zoukankan      html  css  js  c++  java
  • 第5次实践作业

    hello world

    img

    根据官网文档的提示,可以将hello world程序很容易地转换为如下Dockerfile:

    FROM python
    RUN touch /usr/src/helloworld.py 
    	&& echo "print("hello world")" >> /usr/src/helloworld.py
    WORKDIR /usr/src
    ENTRYPOINT ["python"]
    CMD ["./helloworld.py"]
    

    使用docker build -t helloworld .命令构建镜像后,使用docker run --rm helloword命令就能运行hello world程序:

    日历输出

    首先,编写日历输出程序。日历输出程序源代码仅比hello world程序源代码多出3行:

    import calendar
    
    yy = int(input("输入年份: "))
    mm = int(input("输入月份: "))
    print(calendar.month(yy, mm))
    

    同样地,简单构建Dockerfile文件:

    FROM python
    COPY shcalendar.py /usr/src/
    WORKDIR /usr/src
    ENTRYPOINT ["python"]
    CMD ["./shcalendar.py"]
    

    然后使用docker build -t showcalendar .命令构建镜像并使用docker run -it --rm showcalendar启动容器,根据提示输入年份与月份后,在控制台上就能输出对应于年份与月份的日历信息:

    mysql数据库操作

    由于使用python对MySQL进行操作需要下载PyMySQL依赖,所以先换源。换源只需要将pip.conf文件输入如下内容:

    [global] 
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    [install]
    trusted-host = https://pypi.tuna.tsinghua.edu.cn  
    # trusted-host 此参数是为了避免麻烦,否则使用的时候可能会提示不受信任
    

    然后,将pip.conf文件放到~/.pip/目录中即可。这次实验使用的是上一次实验的数据库,数据库中有个times基本表,用于记录访问基本表的次数。根据基本表的结构,编写了如下对数据库操作的代码:

    import pymysql
    
    # 打开数据库连接
    db = pymysql.connect("mydb", "root", "123456", "logintimes")
    
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    
    for i in range(10):
        try:
            # 执行SQL语句
            cursor.execute("UPDATE times SET times = times + 1 WHERE id = 1")
            # 提交到数据库执行
            db.commit()
        except:
            # 发生错误时回滚
            db.rollback()
    
        try:
            # 执行SQL语句
            cursor.execute("SELECT times FROM times WHERE id = 1")
            # 获取所有记录列表
            results = cursor.fetchone()
            print("The table has been logged in %d times" % (results))
        except:
            print("Error: unable to fetch data")
    
    # 关闭数据库连接
    db.close()
    

    程序对times基本表连续地进行10次的更新与读出操作。接下来就是在已编程完毕的基础上构建运行该程序的镜像,当然也是使用Dockerfile:

    FROM python
    
    RUN mkdir /usr/src/mysqlexam 
    	&& mkdir ~/.pip
    COPY pip.conf ~/.pip/
    COPY showLoginTimes.py /usr/src/mysqlexam/
    WORKDIR /usr/src/mysqlexam
    RUN touch requirements.txt 
    	&& echo "PyMySQL" >> requirements.txt 
    	&& pip install --no-cache-dir -r requirements.txt
    
    ENTRYPOINT [ "python" ]
    CMD [ "./showLoginTimes.py" ]
    

    使用docker build -t pymysql.命令构建完成镜像后,先不着急启动该容器,而是先启动需要使用到的数据库容器:

    在数据库准备完成后,使用docker run --rm --link mydb pymysql命令运行python程序:

    在标准控制台中输出了已访问基本表的次数,使用Navicat软件连接到数据库并查看对应的基本表情况如下:

    到此,使用python对MySQL数据库进行操作正确完成。

    opencv

    类似地,首先编写python程序。实验程序完成的功能是将图片转换会灰度图片并保存,程序源代码比较简单:

    import cv2
    # 转换为灰度图片
    grayimage = cv2.imread("./test.jpg",cv2.IMREAD_GRAYSCALE)
    # 保存图片
    cv2.imwrite("./test-gray.jpg",grayimage)
    print("Picture has been converted to gray.")
    

    然后编写Dockerfile,与之前不同的只是依赖与实验过程中所需要的文件不同罢了。

    FROM python
    RUN mkdir /usr/src/myopencv 
    	&& mkdir ~/.pip
    COPY pip.conf ~/.pip/
    VOLUME /usr/src/myopencv
    WORKDIR /usr/src/myopencv
    RUN touch requirements.txt 
    	&& echo "opencv-python" >> requirements.txt 
    	&& pip install --no-cache-dir -r requirements.txt
    ENTRYPOINT [ "python" ]
    CMD [ "convertToGray.py" ]
    

    然后使用docker build -t myopencv .构建镜像并使用

    docker run -v /var/lib/myopencvlib:/usr/src/myopencv myopencv启动容器:

    查看转换前后的图片:

    img

    从以上两图可见,成功将图片转为灰度图片。

    问题与解决办法

    实践过程还是很顺利地,基本没遇到什么问题。

    时间开销

    实践整个过程花费3小时,报告0.5小时,共花费3.5小时

    参考资料

    [1]用Docker搭建Python的开发环境

    [2]Python pip配置国内源

    [3]灰度图像 保存图像

  • 相关阅读:
    读取Web.config文件中的配置信息类
    屏蔽页面中的右键操作
    树型目录
    自己常用的分页SQL
    c#用一个线程同步的简单例子

    c++面向对象学习
    数据上传项目总结
    简单的xml学习
    c#中跨线程使用控件
  • 原文地址:https://www.cnblogs.com/auspiciousjimmy/p/12915804.html
Copyright © 2011-2022 走看看