第五次系统综合实践

构建python镜像

构建文件夹

Dockerfile编写

FROM python
MAINTAINER wjj
WORKDIR /code
COPY requirements.txt ./
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt   # 修改为清华源并安装依赖
ENTRYPOINT [ "python" ]  # 实现命令行式调用容器
CMD [ "helloworld.py" ]  # ENTRYPOINT默认参数

requirements.txt编写

该文件用来写python运行时所需要的依赖

PyMySQL
opencv-python
cryptography

创建镜像

输入docker build -t my-python .

运行程序

hello world

helloworld.py文件代码如下

print("hello world 031702537")

输入docker run -it -v /home/tuffy/python/code:/code --rm my-python helloworld.py运行并查看结果

data

data.py文件代码如下

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

输入docker run -it -v /home/tuffy/python/code:/code --rm my-python data.py运行并查看结果

mysql

首先,需要先创建一个网络,让mysql容器和python容器在上面同时运行,以便连接
docker network create --subnet=172.1.0.0/16 py_mysql_net

接着用一个终端运行mysql容器并创建一个名为“wjj”的数据库用来和python连接

利用sql语句创建Stu表

py_mysql.py文件第一次执行代码如下

import pymysql

db = pymysql.connect("mysql1","root","123456","wjj" )	# 第一个参数填上面的ip地址

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# SQL 插入语句
sql = """INSERT INTO Stu(Sno,
         Sname, Sex)
         VALUES ('031702537', 'james_j', 'm')"""
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 如果发生错误则回滚
   db.rollback()

sql = """INSERT INTO Stu(Sno,
         Sname, Sex)
         VALUES ('123456', 'ikou', 'm')"""
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 如果发生错误则回滚
   db.rollback()


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

运行python容器

可以看到此时的数据库中增加了两条记录

py_mysql.py文件第二次执行代码如下

import pymysql

db = pymysql.connect("mysql1","root","123456","wjj" )	# 第一个参数填上面的ip地址

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# SQL 删除语句
sql = """delete from Stu where Sno = '031702537';"""
try:
   # 执行sql语句
   cursor.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 如果发生错误则回滚
   db.rollback()
# 关闭数据库连接
db.close()

运行python容器

运行可以看到Sno是031702537的记录被删除了

openCV

编辑一下代码

import numpy as np
import cv2 as cv

img = cv.imread('123.jpg',1)

imageText = img.copy()

cv.putText(imageText, 'wjj_photo', (500, 500), cv.FONT_HERSHEY_COMPLEX, 4, (255, 0 ,0), thickness = 4)      # 将wjj_photo以蓝色字形式写在图片上

cv.imwrite('./123_new.jpg', imageText)

cv.waitKey(0)
cv.destroyAllWindows()

运行docker run -it -v /home/tuffy/python/code:/code --rm my-python openCV.py
可以看到原code文件夹中多了一个"123_new.jpg"文件



可以看到"123_new.jpg"左上角出现了蓝色字"wjj_photo"

总结

程序:4个小时
博客:1.5小时

遇到的问题

一开始我的数据库和代码连接不上,后来参考了大佬的博客才发现可以用创建同一个网络给两个容器运行来完成
另外一开始我的openCV代码出现以下报错

后来发现cv.imshow()这个函数在windows下可以直接调出窗口显示图片,在命令行下使用Linux就没法显示了,所以直接放弃使用该函数改用cv.imwrite

posted @ 2020-05-20 15:28  James_J  阅读(194)  评论(0编辑  收藏  举报