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