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]灰度图像 保存图像

  • 相关阅读:
    剑指 Offer——13. 调整数组顺序使奇数位于偶数前面
    剑指 Offer——3. 从尾到头打印链表
    剑指 Offer——2. 替换空格
    剑指 Offer——1. 二维数组中的查找
    LeetCode 905. Sort Array By Parity 按奇偶校验排列数组
    LeetCode 448. Find All Numbers Disappeared in an Array找到所有数组中消失的元素
    SSH 代码笔记
    anaconda3安装caffe
    opencv多版本安装
    人脸文章与数据库
  • 原文地址:https://www.cnblogs.com/auspiciousjimmy/p/12915804.html
Copyright © 2011-2022 走看看