本次作业为Python专题。Python是将练习使用docker容器运行Python程序。Python是很常用的程序设计语言,但是Python程序的运行依赖于提前的系统环境配置,为了降低系统配置的复杂度,同时减小资源开销,将系统环境容器化是一种解决方案。请根据Python官方镜像的镜像说明,自定义Python镜像文件,将Python程序运行起来。
●关于容器
(1)为便于程序修改调试,在容器启动时需将本地文件目录挂载至容器内的工作目录;
(2)如程序需要运行额外的Python库,请在自定义镜像时完成安装,安装方法参考docker hub上的Python镜像说明;
●关于代码
(3)在(1)和(2)的基础上,通过容器完成简单helloworld、日历输出、mysql数据库操作、opencv程序的部署运行;
· mysql数据库可以使用之前作业创建的镜像
· opencv可以参照链接任意选择
●关于python版本
(4)python2或python3版本不限,也可全部都做;
●注意事项
(5)作业重点在于容器内为python程序运行所需的配置,python程序本身的代码量不做硬性要求;
项目结构
搭建python镜像
requirements.txt
PyMySQL
opencv-python
Dockerfile
FROM python
WORKDIR /app
COPY requirements*.txt ./
# 修改源并安装依赖
RUN pip install -r requirements.txt -i https://pypi.douban.com/simple
ENTRYPOINT ["python"]
CMD ["hello.py"]
搭建镜像
sudo docker build -t docker-python .
简单程序的部署运行
hello world
# hello.py
print('hello world')
日历输出
import calendar
# 输入指定年月
yy = int(input("输入年份: "))
mm = int(input("输入月份: "))
# 显示日历
print(calendar.month(yy,mm))
数据库操作
mysql_db.py
import pymysql
class Mysql_db():
def __init__(self,ip,username,password,db_name,table_name):
self.ip=ip
self.username=username
self.password=password
self.db_name=db_name
self.table_name=table_name
def db_conn(self):
#打开数据库连接
self.conn=pymysql.connect(self.ip,self.username,self.password,self.db_name)
#创建一个游标
self.cursor=self.conn.cursor()
#创建表格
def create_table(self,sql):
self.cursor.execute('drop table if exists %s;' %self.table_name)
self.cursor.execute(sql)
#插入数据
def insert_data(self,sql):
#执行SQL语句,发生错误时回滚
try:
self.cursor.execute(sql)
self.conn.commit()
except :
self.conn.rollback()
#查询数据
def select_all(self):
sql='select * from %s' %self.table_name
self.cursor.execute(sql)
return self.cursor.fetchall()
#更新数据库数据
def update_data(self):
#执行SQL语句,发生错误时回滚
try:
self.cursor.execute(sql)
self.conn.commit()
except :
self.conn.rollback()
#删除数据
def delete_data(self):
#执行SQL语句,发生错误时回滚
try:
self.cursor.execute(sql)
self.conn.commit()
except :
self.conn.rollback()
#关闭数据库
def conn_close(self):
self.conn.close()
sql.py
from mysql_db import Mysql_db
ip='mysql' #容器名
username='lgq' #用户名
password='123456' #密码
db_name='test_mysql' #数据库名
table_name='test' #表名
db=Mysql_db(ip, username, password, db_name,table_name)
db.db_conn()
sql1="insert into %s values(2020,0,'lin');" %table_name
db.insert_data(sql1)
print(db.select_all())
db.conn_close()
打开容器
登录
查看数据库
进入
查看表
查表test
插入数据
再次查表test
OpenCV程序
cv.py
import cv2
img = cv2.imread("image.jpg", 0)
cv2.imwrite('result.jpg', img)
print("success")
原图
生成的新图
总结
①终于知道是自己家里网络波动导致拉取镜像太慢,多试几次就可以了
②用时一个下午