第5次实践作业

一、镜像构建

(1)编写Dockerfile

FROM python
MAINTAINER cathy
WORKDIR /usr/local/app
COPY requirements.txt ./ 
RUN pip install -r requirements.txt -i https://pypi.douban.com/simple  

(2)声明所需依赖

requirements.txt

PyMySQL
opencv-python

(3)构建镜像

sudo docker build -t my-python .

二、程序的部署运行

(1)运行mysql容器

这里使用第二次实践中的mysql容器

sudo docker run --name kmysql -d kmysql

(2)运行并进入python容器,查看容器内当前目录下的py程序

sudo docker run -it -v /home/cathy/ex5_all/ex5/app:/usr/local/app --link=kmysql:kmysql -d my-python
sudo docker ps # 查看id
sudo docker exec -it [id] /bin/bash # 进入容器
ls # 进入容器后查看

(3)helloworld

hello.py

print('hello world')

运行

(4)日历输出

date.py

import calendar
yy = int(input("输入年份: "))
mm = int(input("输入月份: "))
print(calendar.month(yy,mm))

运行

(5)mysql数据库操作

db.py

import pymysql
 
# 打开数据库连接
db = pymysql.connect("kmysql", "root", "123456", "docker_mysql")

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
 
# 使用 execute()  方法执行 SQL 查询 
cursor.execute("SELECT VERSION()")
 
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
 
print ("Database version : %s " % data)


# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS user")

sql = """CREATE TABLE IF NOT EXISTS user (
         id  varchar(20) NOT NULL,
         name varchar(20) DEFAULT NULL,
         sex varchar(10) DEFAULT NULL)"""

cursor.execute(sql)

# SQL 插入语句
sql = """INSERT INTO user(id,
         name,sex)
         VALUES ('666', 'kkk','female')"""
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 如果发生错误则回滚
   db.rollback()

# SQL 查询语句
sql = "SELECT * FROM user"

try:
   # 执行SQL语句
   cursor.execute(sql)
   # 获取所有记录列表
   results = cursor.fetchall()
   for row in results:
      id = row[0]
      name = row[1]
      sex = row[2]
       # 打印结果
      print ("id=%s,name=%s,sex=%s" % \
             (id, name, sex))
except:
   print ("Error: unable to fetch data")

# 关闭数据库连接
db.close()

运行

进入数据库的容器确认

(6)opencv

cv.py

import cv2
img=cv2.imread('test.jpg',flags=1)
rows,cols=img.shape[:2]
M=cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
dst=cv2.warpAffine(img,M,(cols,rows))
cv2.imwrite("test-rotated.jpg", dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
print('rotated and saved.')

运行

原图和旋转后的图片:

项目结构如下:

三、遇到的问题及解决方法

(1)在python容器内运行db.py时遇到如下问题:

1.首先确定密码、数据库等设置是否正确

看到可以用设定好的密码登陆到数据库,同时也存在docker_mysql数据库

2.测试两个容器的连通性

可以看到两个容器是连通的

3.在博客中找到了如下方法

4.解决了以上问题后就剩语法问题了

检查了一下发现少了一个)

之后就可以运行db.py啦

四、花费时间

作业名称 耗时(小时)
镜像构建 2
程序的部署运行 6
博客编写 1.5
总计 9.5

五、小结

  在查阅资料,确定操作步骤的时候觉得相比起实践四,这次算是比较容易的,认为出错可能性比较的一步是连接数据库,确实在进行这个操作的时候出了问题。这边还花了挺多时间,首先是一开始不确定哪里出了问题,考虑了有连接问题,配置,权限问题等等等等,刚准备爬坑的时候还挺头痛的,乱折腾了一阵子以后才觉得不行,还是决定耐心一点一步一步来,先确定密码等是否正确,再检查容器连接,错误一个一个被解决了,开心。
  碰到问题还是得多查阅资料,分析哪里出了问题后再解决,会比较有思路。这次实践是学习了使用docker容器运行Python程序,并且进一步熟悉了之前学习的相关操作,对理论也有了进一步的认识。

posted @ 2020-05-19 13:56  怏怏  阅读(186)  评论(0编辑  收藏  举报