1.Python镜像定制
-
Dockerfile
FROM python:3 MAINTAINER zzq WORKDIR /pyfile # 依赖模块列表 COPY requirements*.txt ./ # 修改源并安装依赖 RUN pip install -r requirements.txt -i https://pypi.douban.com/simple # 实现命令行式调用容器 ENTRYPOINT ["python"] # 设置默认打开的文件 CMD ["hello.py"]
按教程打的办法会出现如下图的问题,经过多次失败后,找到一个办法,这里的requirement后面要添加*,
别问,问就是不知道 -
requirements
PyMySQL opencv-python
这里的两条语句是为了后面数据库操作和OpenCV程序引入依赖,否则会出现问题。
-
构建镜像
sudo docker build -t python_test .
2.程序部署
-
helloworld
-
py内容
print("hello world")
-
运行程序
sudo docker run -it --rm -v /home/ubuntu/test5/pyfile:/pyfile python_test opencv.py
-
复习容器运行命令
- -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭。
- -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
- -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
- -it:创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
- --name:为创建的容器命名
- -p 8080:80: 将容器的80端口映射到宿主机的8080端口
-
-
日历
-
py内容
import calendar # 输入指定年月 yy = int(input("输入年份: ")) mm = int(input("输入月份: ")) # 显示日历 print(calendar.month(yy,mm))
-
运行程序
sudo docker run -it --rm -v /home/ubuntu/test5/pyfile:/pyfile python_test date.py
-
-
mysql
-
py内容
import pymysql # 打开数据库连接 db = pymysql.connect("zzq_mysql", "kingdom", "123456", "docker_mysql") # 第一个参数是本地容器名字 # 第二三个参数是数据库的使用用户与密码 # 第四个参数是数据库名称 # 创建游标对象 cursor = db.cursor() # 先查询一次数据库数据 sql = """select * FROM test""" cursor.execute(sql) results = cursor.fetchall() print(results) # SQL插入语句 sql = """insert test(username,password) values('gyl','234567')""" cursor.execute(sql) db.commit() # 插入完成后再读取一次数据库数据 sql = """select * FROM test""" cursor.execute(sql) results = cursor.fetchall() print(results) # 关闭数据库连接 db.close()
-
使用实验二配置好的容器,先查看其表内容(实验二快达链接)
-
运行程序
sudo docker run -it --rm -v /home/ubuntu/test5/pyfile:/pyfile --link=zzq_mysql python_test db.py
-
运行后
-
-
OpenCV程序
-
py内容
#截取图片的一部分,即ROI(region of interest) import cv2 import numpy as np image = cv2.imread('test.png') result = image[250:1700, 0:900] cv2.imwrite('test_result.png', result)
-
运行程序
sudo docker run -it --rm -v /home/ubuntu/test5/pyfile:/pyfile python_test opencv.py
-
原图与结果
-
3.实验总结
这次实验比之前简单了,然而我还是踩了几个坑~,比如上面所说到的要为requirements提供依赖。这次实验大概做了五六个小时吧。