Python是很常用的程序设计语言,但是Python程序的运行依赖于提前的系统环境配置,为了降低系统配 置的复杂度,同时减小资源开销,将系统环境容器化是一种解决方案。
- 开始时间——2021/04/30 19:00 - 结束时间——2021/05/06 22:00 - 有效时长——20h
- B.比较困难
自定义Python镜像文件,将Python程序运行起来。
(提示:为便于程序修改调试,在容器启动时需将本地文件目录挂载至容器内的工作目录; )
(1)opencv程序的部署运行;
(2)针对第3次作业的nginx-tomcat负载均衡,编写一个python测试脚本,通过容器运行测试;
(3)运行face_distance.py,并解释代码的含义,画出程序流程图。
OpenCV是一个基于BSD许可(开源)发行跨平台计算机视觉和机器学习软件库,可以运行在Linux等操作系统上;同时提供了Python等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
sudo docker pull python:3.9.4
/home/ubuntu/lancl/docker_build/python3 tree
sudo nano requirements.txt
PyMySQL opencv-python
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"]
print('hello world ! myPython.')
#基础镜像 FROM nginx #作者信息 MAINTAINER 032092135 #声明暴露端口 EXPOSE 9191
import calendar # 输入指定年月 yy = int(input("输入年份: ")) mm = int(input("输入月份: ")) #设置第一天是星期天 calendar.setfirstweekday(firstweekday=6) # 显示日历 print(calendar.month(yy,mm))
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()
import cv2 img = cv2.imread("test.jpg", 1) res = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # BGR->GRAY cv2.imwrite('result.jpg', res) print("success!")
cd /home/ubuntu/lancl/docker_build/python3 sudo docker build -t 92135_python3 .
--rm:运行完毕后自动移除容器。
sudo docker run --rm -v /home/ubuntu/lancl/docker_build/python3/code:/usr/src/app 92135_python3
-it:声明需要交互式终端以读取输入
sudo docker run -it --rm -v /home/ubuntu/lancl/docker_build/python3/code:/usr/src/app 92135_python3 date.py
sudo docker restart mysql_container_92135 sudo docker exec -it mysql_container_92135 /bin/bash // 进入容器前需要先启动 mysql -u root -p
sudo docker inspect 92135_python3 sudo docker network ls //查看所有容器Networks信息
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
sudo docker run -it --rm -v /home/ubuntu/lancl/docker_build/python3/code:/usr/src/app 92135_python394 opencv.py
cd /home/ubuntu/lancl/docker_build/python3/code
sudo nano testBlance1.py
import requests url="http://localhost:9292" for i in range(0,10): reponse=requests.get(url) print(reponse.text)
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)
to be continue......
针对实践任务中遇到的各类问题和解决办法进行总结(不少于5条)。
sudo docker run -it python:3 bash 报错:python: can't open file '/usr/src/app/bash': [Errno 2] No such file or directory
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静态链接库
RUN …… \ && apt-get update \ && apt-get install sudo \ && sudo apt update \ && sudo apt install libgl1-mesa-glx
RUN apt-get update \ && apt-get -y install libgl1-mesa-glx \ && ……
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'
报错:Cannot link to /mysql_container_92135, as it does not belong to the default network.
报错: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