Docker容器实践之运行Python程序
目录
Python镜像文件及PyCode
项目目录
Dockerfile
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r requirements.txt
COPY ./hello.py /usr/src/app/
VOLUME /usr/src/app
ENTRYPOINT ["python"]
Requirements.txt
PyMySQL
opencv-python
Hello.py
print('hello world!')
Calander.py
import calendar
yy = int(input("输入年份: "))
mm = int(input("输入月份: "))
print(calendar.month(yy,mm))
Mysql.py
import pymysql
# 打开数据库连接
db = pymysql.connect("laughing_satoshi","ra9zer","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 EMPLOYEE")
# 使用预处理语句创建表
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 如果发生错误则回滚
db.rollback()
# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 发生错误时回滚
db.rollback()
# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > %s" % (1000)
try:
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
(fname, lname, age, sex, income ))
except:
print ("Error: unable to fetch data")
# 关闭数据库连接
db.close()
Opencv.py
import cv2
#
src=cv2.imread('test.jpg')
# 垂直翻转
img=cv2.flip(src,0)
# 写入文件
cv2.imwrite("test-rotated.jpg", img)
print('Successed.')
部署运行
Hello world
sudo docker run --rm -v /home/ubuntu/docker-py/py:/usr/src/app dockerpy hello.py
日历
sudo docker run -it --rm -v /home/ubuntu/docker-py/py:/usr/src/app dockerpy calander.py
- 注意:由于用到了
input
,需要输入内容,因此运行容器的时候需要用到-it参数,否则会报EOFError: EOF when reaeding a line
的错误。
MySql
-
注意:运行
mysql.py
前要先运行数据库容器。然后通过--link=容器名:容器别名
命令可以实现容器间的互访,否则由于容器间的隔离性,py容器会找不到数据库容器,即出现下图错误
-
sudo docker run -it --rm -v /home/ubuntu/docker-py/py:/usr/src/app --link=laughing_satoshi:laughing_satoshi dockerpy mysql.py
OpenCv
sudo docker run -it --rm -v /home/ubuntu/docker-py/py:/usr/src/app dockerpy opencv.py
实验心得
- 这次实验花费时间在3个小时左右,相对前俩次实验可以说是简单多了,属于比较入门的内容,感觉跟直接在linux下运行py代码差别不大。