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

posted @ 2020-05-19 11:44  rrmmoo  阅读(155)  评论(0编辑  收藏  举报