系统综合实践4:基于Python的容器技术
2021/5/7 14:31:25
本文主要是介绍系统综合实践4:基于Python的容器技术,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
系统综合实践——第4次实践作业:基于Python的容器技术
Python是很常用的程序设计语言,但是Python程序的运行依赖于提前的系统环境配置,为了降低系统配 置的复杂度,同时减小资源开销,将系统环境容器化是一种解决方案。
一、实践记录
1.实践问答
(1)时间记录
- 开始时间——2021/04/30 19:00 - 结束时间——2021/05/06 22:00 - 有效时长——20h
(2)难易程度
- B.比较困难
2.实验环境
- VisualBox_6.1虚拟机
- Ubuntu 18.04.5 Desktop amd64 的虚拟机系统;
【软件工具】
- nano/Text Editor
- Docker Engine-Community
- docker-hub
- Docker-Hub
- aliyun镜像仓库
- 阿里云镜像服务
- Firefox浏览器
- NginX
- mysql-5.7
- PHP
- apache-tomcat-8.5.65.tar.gz
- jdk-8u211-linux-x64.tar.gz
- python:3.9.4
3.实验任务
自定义Python镜像文件,将Python程序运行起来。
(提示:为便于程序修改调试,在容器启动时需将本地文件目录挂载至容器内的工作目录; )
(1)opencv程序的部署运行;
(2)针对第3次作业的nginx-tomcat负载均衡,编写一个python测试脚本,通过容器运行测试;
(3)运行face_distance.py,并解释代码的含义,画出程序流程图。
- 学习参考:
- 知乎:Github开源人脸识别项目face_recognition
- Python官方镜像
- OpenCV-Python 中文教程(搬运)目录
- face_distance.py
- Nginx服务器之负载均衡策略(6种)
二、实践1——opencv
OpenCV是一个基于BSD许可(开源)发行跨平台计算机视觉和机器学习软件库,可以运行在Linux等操作系统上;同时提供了Python等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
1.环境准备
(1)拉取python镜像
sudo docker pull python:3.9.4
(2)建立工作目录
/home/ubuntu/lancl/docker_build/python3 tree
2.编写配置文件
(1)requirements.txt
sudo nano requirements.txt
PyMySQL opencv-python
(2)Dockerfile
sudo nano Dockerfile
# 指定基础镜像 FROM python:3.9.4 # 指定镜像的维护者 MAINTAINER 032092135 # 在容器内设置一个工作目录 WORKDIR /usr/src/app COPY requirements.txt ./ # 修改源并安装依赖 RUN apt-get update \ && apt-get -y install libgl1-mesa-glx \ && pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple COPY code/helloworld.py /usr/src/app/ # 创建挂载点 VOLUME /usr/src/app # 给容器配置一个"可执行程序",可以搭配CMD命令使用:一般是变参才会使用CMD,这里的CMD等于是在给ENTRYPOINT传参 ENTRYPOINT ["python"] # 指定在容器启动时所要执行的命令 CMD ["helloworld.py"]
(3)代码库——code
① sudo nano helloworld.py
print('hello world ! myPython.')
② sudo nano dockerfile_nginx
#基础镜像 FROM nginx #作者信息 MAINTAINER 032092135 #声明暴露端口 EXPOSE 9191
③ sudo nano date.py
import calendar # 输入指定年月 yy = int(input("输入年份: ")) mm = int(input("输入月份: ")) #设置第一天是星期天 calendar.setfirstweekday(firstweekday=6) # 显示日历 print(calendar.month(yy,mm))
④ sudo nano sql.py
import pymysql # 打开数据库连接 db = pymysql.connect(host="mysql_container_92135", user="root", password="123456", db="myDB") # 创建游标对象 cursor = db.cursor() # 查询数据库数据 sql = """select * FROM user""" cursor.execute(sql) results = cursor.fetchall() print(results) # 插入 sql = """insert user(id,name,age) values('02','darling',18)""" cursor.execute(sql) db.commit() # 插入完成后再读取一次数据库数据 sql = """select * FROM user""" cursor.execute(sql) results = cursor.fetchall() print(results) # 关闭数据库连接 db.close()
⑤ sudo nano opencv.py
import cv2 img = cv2.imread("test.jpg", 1) res = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # BGR->GRAY cv2.imwrite('result.jpg', res) print("success!")
3.实验过程——运行python程序
(1)构建python镜像
cd /home/ubuntu/lancl/docker_build/python3 sudo docker build -t 92135_python3 .
(2)试运行
--rm:运行完毕后自动移除容器。
sudo docker run --rm -v /home/ubuntu/lancl/docker_build/python3/code:/usr/src/app 92135_python3
(3)交互日历
-it:声明需要交互式终端以读取输入
sudo docker run -it --rm -v /home/ubuntu/lancl/docker_build/python3/code:/usr/src/app 92135_python3 date.py
(4)对MySQL数据库进行写操作
① 连接上一次实践课创建的MySQL容器:
sudo docker restart mysql_container_92135 sudo docker exec -it mysql_container_92135 /bin/bash // 进入容器前需要先启动 mysql -u root -p
② 查找容器的Networks信息
sudo docker inspect 92135_python3 sudo docker network ls //查看所有容器Networks信息
③ 连接MySQL容器并且执行脚本
sudo docker run --rm --link=mysql_container_92135 --net compose_docker_default -v /home/ubuntu/lancl/docker_build/python3/code:/usr/src/app 92135_python3 sql.py
(5)opencv部署
sudo docker run -it --rm -v /home/ubuntu/lancl/docker_build/python3/code:/usr/src/app 92135_python394 opencv.py
三、实践2——python脚本实现Tomcat+Nginx负载均衡
1.创建-脚本文件
cd /home/ubuntu/lancl/docker_build/python3/code
(1)轮询
sudo nano testBlance1.py
import requests url="http://localhost:9292" for i in range(0,10): reponse=requests.get(url) print(reponse.text)
(2)权重
sudo nano testBlance2.py
import requests url="http://localhost:9292" context={} for i in range(0,100): response=requests.get(url) if response.text in context: context[response.text]+=1 else: context[response.text]=1 print(context)
2.运行结果
(1)to be continue......
四、实践3——Python 使用 face_recognition 人脸识别
1.环境配置
(1)配置镜像的函数依赖库
2.实践过程
(1)运行face_distance.py,并解释代码的含义,画出程序流程图;
to be continue......
《Tips》
针对实践任务中遇到的各类问题和解决办法进行总结(不少于5条)。
一、实验心得
1.进一步加深了对镜像构建的理解,对于关键函数依赖的引用可以避免后续操作的诸多麻烦;
2.对python代码的学习有待加强,不能独立的进行相关代码的编写;
3.对软件工程的认知依旧尚浅,以为很简单的一次作业,越做越发现自己的欠缺越多,需要后续不断学习、积累。
二、问题记录
1.如何打开python镜像的/bin/bash?
sudo docker run -it python:3 bash 报错:python: can't open file '/usr/src/app/bash': [Errno 2] No such file or directory
(1)需要修改镜像的函数依赖库:
sudo docker run -it --rm -v /home/ubuntu/lancl/docker_build/python3/code:/usr/src/app 92135_python394 opencv.py
报错:ImportError: libGL.so.1: cannot open shared object file: No such file or directory
——Docker容器缺少 libGL.so.1静态链接库
- 推倒重建?
- 利用容器?
- 尝试写入requirement.txt?
(2)Dockfile-RUN
RUN …… \ && apt-get update \ && apt-get install sudo \ && sudo apt update \ && sudo apt install libgl1-mesa-glx
- 报文:The command 'xxx' returned a non-zero code: 2
- WARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv
修改:要记住,所有pip命令都不要加sudo?
RUN apt-get update \ && apt-get -y install libgl1-mesa-glx \ && ……
(3)requirement.txt添加:libgl1-mesa-glx
- 报错:ERROR: Could not find a version that satisfies the requirement libgl1-mesa-glx (from versions: none)
- ERROR: No matching distribution found for libgl1-mesa-glx
2.运行face_distance.py
sudo docker run -it --rm -v /home/ubuntu/lancl/docker_build/python3/code:/usr/src/app 92135_python394 face_distance.py
报错:ModuleNotFoundError: No module named 'face_recognition'
3.--link=[]: 添加链接到另一个容器;
-
报错:Cannot link to /mysql_container_92135, as it does not belong to the default network.
参考:https://blog.csdn.net/hanchaobiao/article/details/81911587
-
报错:Traceback (most recent call last):
File "/usr/src/app/sql.py", line 4, in
db = pymysql.connect("mysql_container_92135", "root", "123456", "myDB")
TypeError: init() takes 1 positional argument but 5 were given参考:http://linxingyang.net/2021/bd7886a8b31e4fae9b51795b33d12sxx
这篇关于系统综合实践4:基于Python的容器技术的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04Python外包有哪些常见的主要库-icode9专业技术文章分享
- 2024-10-02基于深度学习的钢铁缺陷检测系统(yolov8、注意力机制、PyQt5界面、Python)
- 2024-10-01怎么用python搭建一个系统-icode9专业技术文章分享
- 2024-09-30Python基础入门教程
- 2024-09-30获取参数学习:Python中的基础教程
- 2024-09-30Python编程基础详解
- 2024-09-29点击加载学习:Python编程基础教程
- 2024-09-29数据科学五大Python前端库:第二部分
- 2024-09-27使用python 将ETH账户的资产打散
- 2024-09-26Python编程基础