2020系统综合实践 第5次实践作业
1、Python自定义镜像搭建
-
项目结构
-
Dockerfile
FROM python:3.7
MAINTAINER LZS
# 设置工作目录
WORKDIR /app
# 添加依赖声明文件
COPY requirements.txt ./
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
VOLUME /usr/src/app
# 实现命令行式调用容器
ENTRYPOINT ["python"]
# ENTRYPOINT默认参数
CMD ["hello.py"]
- requirements.txt
#requirements.txt
PyMySQL
opencv-python
- 搭建镜像
sudo docker build -t docker-python .
2、运行Python程序
- 1.helloworld
hello.py
print('hello world')
运行
sudo docker run --rm -v /home/ubuntu/homework5/app:/app docker-python hello.py
- 2.日历输出
date.py
import calendar
yy = int(input("输入年份: "))
mm = int(input("输入月份: "))
print(calendar.month(yy,mm))
运行
sudo docker run -it --rm -v /home/ubuntu/homework5/app:/app docker-python date.py
- 3.mysql数据库操作
用于创建一个新的网络连接
sudo docker network create --subnet=172.1.0.0/16 py_mysql
运行mysql容器
sudo docker run --network py_mysql --name mysql_lzs -d mysql:lzs
sudo docker exec -it mysql_lzs /bin/bash
mysql.py
import pymysql
# 打开数据库连接
db = pymysql.connect(host="mysql_lzs",user="lzs",password="123456",database="docker_mysql" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 使用 execute() 方法执行 SQL 查询
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
print("Database version : %s " % data)
# 使用预处理语句创建表
sql = """CREATE TABLE user (
id CHAR(10) NOT NULL,
name CHAR(20) )"""
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 如果发生错误则回滚
db.rollback()
# SQL 插入语句
sql = """INSERT INTO user(id,name)
VALUES ('01', 'roll')"""
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:
idd = row[0]
name = row[1]
# 打印结果
print ("id:%s,name:%s" % \
(idd, name ))
except:
print ("Error: unable to fetch data")
# 关闭数据库连接
db.close()
运行python
sudo docker run --rm -v /home/ubuntu/homework5/app:/app --network py_mysql docker-python mysql.py
- 4.opencv程序的部署运行
opencv.py
import cv2
# 图片源
src=cv2.imread('test.jpg')
# 垂直翻转
img=cv2.flip(src,0)
# 写入文件
cv2.imwrite("test-rotated.jpg", img)
print('Successed.')
运行
sudo docker run --rm -v /home/ubuntu/homework5/app:/app docker-python opencv.py
小结
- 问题和解决办法
问题:数据库连接时出错
原因:数据库镜像构建时,没有加入docker这一用户
解决:将mysql.py中连接数据库那一行代码的user参数改为已创建的用户名
- 用时
2小时