第5次实践作业
系统综合实践第5次实践作业
一、构建镜像
1.Dockerfile
FROM python:3
WORKDIR /usr/src/app
#工作目录
COPY requirements.txt ./requirements.txt
#依赖声明
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
#换清华源,并安装依赖
COPY myapp/hello.py /usr/src/app/
VOLUME /usr/src/app
ENTRYPOINT ["python"]
CMD ["hello.py"]
2.requirements.txt
PyMySQL
opencv-python
3.build镜像
文件目录结构如下:(暂时没提到的文件在博客后面的内容中)
cd WorkPath
docker build -t mypython .
二、部署运行
1.helloworld
docker run --rm mypython
--rm参数使得容器在运行后直接自动删除
2.日历
date.py
# 引入日历模块
import calendar
# 输入指定年月
yy = int(input("输入年份: "))
mm = int(input("输入月份: "))
# 显示日历
print(calendar.month(yy,mm))
docker run -it -v /home/kingdom/WorkPath/myapp:/usr/src/app --rm mypython date.py
3.MySQL
这里用到的数据库容器请参考我的第二次系统综合实践作业博客
(https://www.cnblogs.com/Jorgensen/p/12749012.html#二、实现一个自定义的数据库容器服务)
参考我的博客先build镜像
docker build -t mysql_zqz .
然后运行MySQL容器
docker run -d -p 13306:3306 --name mysql_zqz mysql_zqz
docker ps -a
进入容器
docker exec -it mysql_zqz /bin/bash
使用kingdom账户登录mysql,密码是123456
mysql -u kingdom -p
连接到docker_mysql这个数据库
use docker_mysql;
显示这个数据库中所有的表格
show tables;
选择test表的所有内容
select * from test;
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_zqz' #MySQL容器名
username='kingdom' #用户名
password='123456' #密码
db_name='docker_mysql'#数据库名
table_name='test' #表名
db=Mysql_db(ip, username, password, db_name,table_name)
db.db_conn()
sql1="insert into %s values('031702400',0);" %table_name
db.insert_data(sql1)
print(db.select_all())
db.conn_close()
打开一个新的终端,运行python容器
docker run -it -v /home/kingdom/WorkPath/myapp:/usr/src/app --link=mysql_zqz --rm mypython sql.py
这里link参数是用来现容器间的互访,mysql_zqz是MySQL容器的容器名
在MySQL容器这边验证下插入是否成功
4.opencv
opencv.py
# 仿射变换
import cv2
import numpy as np
img = cv2.imread('picture.jpg')
rows,cols,ch = img.shape
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])
M = cv2.getAffineTransform(pts1,pts2)
dst = cv2.warpAffine(img,M,(cols,rows))
# 写入文件
cv2.imwrite("picture_new.jpg", dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
docker run -it -v /home/kingdom/WorkPath/myapp:/usr/src/app --rm mypython opencv.py
三、总结
遇到的问题:本次实验比较简单,基本没有遇到问题.
用时:实验+博客=3h