python实践作业_第五次实践作业

实验要求

1,实现python容器的部署,并完成以下python程序所需环境的配置以及运行

2,在python容器中运行简单的helloworld程序

3,在python容器中实现简单的数据库操作

4,在pathon容器中实现简单openCV程序

实验环境

ubuntu18.04

Docker Engine - Community19.03.8

python3.7

mysql5.7

实验步骤

一,构建python容器

工程挂载目录

dockerfile

FROM python:3.7

WORKDIR /usr/local/pathon/

COPY requirements.txt ./

COPY opencv_python-4.2.0.34-cp37-cp37m-manylinux1_x86_64.whl ./

COPY numpy-1.18.4-cp37-cp37m-manylinux1_x86_64.whl ./

RUN python -m pip install --upgrade pip -i https://pypi.douban.com/simple

RUN pip install --default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt && pip install numpy-1.18.4-cp37-cp37m-manylinux1_x86_64.whl opencv_python-4.2.0.34-cp37-cp37m-manylinux1_x86_64.whl

COPY hello.py ./

COPY data.py ./

COPY db.py ./

ENTRYPOINT ["python"]

EXPOSE 80

requirement.txt

(因为使用pip下载依赖包实在是太慢了,经常出现timeout,于是我从网上事先下载好numpy和openCV的依赖,进行离线安装(虽然网上下载的速度依旧感人,但好歹不会timeout不是....))

PyMySql

创建python镜像

docker build -t python:test .

接下来创建mysql镜像,不过由于之前的实验有制作过mysql的镜像,这里就不再重复,直接使用以前的镜像创建mysql容器并开启服务

查看mysql容器的网络,待会将python容器也加进去

docker inspect mysql

这里mysql容器运行在名为“bridge"的网络中,且ip地址为172.17.0.2

查看本地搭建的网络,这里我选了“bridge”作为此次实验容器运行的网络

创建容器,并进入镜像

进入了python的解释器界面,我不是很懂这个,于是我退出该容器,然后又重启该容器,并使用exec命令试图进入命令行界面,成功

docker exec -it python1 /bin/bash

二,运行python程序

1,hello.py

print('hello world')

2,data.py(日历)

import calendar

yy = int(input("输入年份: "))

mm = int(input("输入月份: "))

print(calendar.month(yy,mm))

3,db.py

import pymysql

# 打开数据库连接

#数据库地址使用mysql的容器名

#使用实验二时候创建的用户,密码,数据库

db = pymysql.connect(

host='172.17.0.2',

user='root',

password='123456',

database="Database",

charset="utf8")

# 使用 cursor() 方法创建一个游标对象 cursor

cursor = db.cursor()

# 使用 execute() 方法执行 SQL 查询

cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取单条数据.

data = cursor.fetchone()

print("Database version : %s " % data)

# SQL 插入语句

sql = """INSERT INTO S(id,name,class,score)

VALUES ('3', 'wcx','03','60')"""

try:

# 执行sql语句

cursor.execute(sql)

# 提交到数据库执行

db.commit()

except:

# 如果发生错误则回滚

db.rollback()

# SQL 查询语句

sql = """SELECT * FROM S"""

try:

# 执行SQL语句

cursor.execute(sql)

# 获取所有记录列表

results = cursor.fetchall()

for row in results:

S_id = row[0]

name = row[1]

S_class = row[2]

score = row[3]

# 打印结果

print ("id=%s,name=%s S_class=%s score =%s" %(S_id, name,S_class, score ))

except:

print ("Error: unable to fetch data")

# 关闭数据库连接

db.close()

数据库中验证一下

4,CVtest.py

#coding:utf-8

import cv2

img = cv2.imread(r"image.jpg")

# print(img.shape)

img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

ret,img_threshold = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY)

cv2.imwrite(r"changed_image.jpg",img_threshold)

image.jpg

执行CVtest.py

执行后查看当前目录,发现多了一张changed_image.jpg

实验中遇到的困难

1,构建镜像时总是timeout

解决方法:本地从官网下载相应的依赖包,采用离线安装的方式

2,python容器没有访问mysql容器的权限

(pymysql.err.InternalError: (1130, "Host 'xxxx' is not allowed to connect to this MySQL server"))

解决方法:进入mysql容器,修改mysql.user表,修改如下

update user set Host='%',authentication_string='123456' where User='root'; #允许其他容器使用root用户登陆

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;#授予所有root用户对所有数据库的操作权限

flush privileges;#更新权限表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值