2020系统综合实践 第5次实践作业
1.Python镜像环境搭建
- 在主目录任意创建一个文件夹,这里命名为python,在里面添加两个文件
- Dockerfile
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
# 修改源并安装依赖
RUN pip install -r requirements.txt -i https://pypi.douban.com/simple
ENTRYPOINT ["python"]
CMD ["hello.py"]
- requirements文件
PyMySQL
opencv-python
- 输入下列指令创建镜像,先进入root模式
sudo su
docker build -t mypython .
2.实现简单代码,在python下创建一个apps的文件夹用来存取代码
(1)hello.py
print("hello world")
- 运行代码,同样需要在root条件下
docker run -v /home/frx/python/apps:/usc/src/app --rm mypython
(2)date.py
import calendar
yy = int(input("输入年份: "))
mm = int(input("输入月份: "))
print(calendar.month(yy,mm))
- 运行代码,这里由于在Dockfile里没有拉入date.py所以运行指令需要加上-it以及文件名
docker run -it -v /home/frx/python/apps:/usc/src/app --rm mypython date.py
3.数据库
- 这里我直接使用了实验二用的数据库
- 运行该容器,可以直接去看看之前实验二的容器名,比如在我这里是frxmysql
sudo docker run --name frxmysql -d frxmysql l
- 查看容器是否在运行
sudo docker ps
-
查看数据库的状态
-
添加python连接数据库以及操作数据库的代码,这里以插入一条数据为例
-
mysql_db.py 这是python操作数据库代码
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='frxmysql' #容器名
username='docker' #用户名
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(031702428,'phd');" %table_name
db.insert_data(sql1)
print(db.select_all())
db.conn_close()
- 运行sql.py代码
sudo docker run -it --rm -v /home/frx/python/apps:/usr/src/app --link=frxmysql mypython sql.py
- 再次查看数据库 成功插入数据
4.Opencv,这里引用别人的代码,确实不会
- opencv.py 其中picture1.jpg 和picture2.jpg同样需要放在apps目录下(同目录就行
import cv2 as cv
img1 = cv.imread("picture1.jpg")
img2 = cv.imread("picture2.jpg")
result = cv.addWeighted(img1,0.3,img2,0.9,0)
cv.imwrite('result.jpg', result)
print("success")
- 运行
docker run -it -v /home/frx/python/apps:/usr/src/app --rm mypython opencv.py
- 执行成功在apps文件夹下多出一个result.jpg的图片,即为我们合成的图片,展示一下效果
- 实验结束后的树结构
5.遇到的问题及解决方法
(1)一开始直接使用sudo docker -t mypython .发生不知名错误,遇到这种问题还是建议换源
换源后成功安装
(2)在使用实验二的数据库时,一直出现容器名重复的问题,就算使用sudo docker ps也没用,这个指令只是查看正在运行的容器
使用这条sudo docker ps -a 即可查看,把对应的id删除即可成功运行
6.花费的时间
做这个实验经过了学习知识,实践操作,解决问题,写博客等几个阶段,量还是比较少的,大约花费了5个小时。