最终项目结构
搭建python镜像
Dockerfile
FROM python:3
MAINTAINER jamwong
WORKDIR /usr/src/app
COPY ./requirements.txt /requirements.txt
COPY app/hello.py /usr/src/app/
RUN pip install -r /requirements.txt -i https://pypi.douban.com/simple #修改源并安装依赖
ENTRYPOINT ["python"]
CMD ["hello.py"] #默认打开文件
requirements.txt
pyMySQL
opencv-python
hello.py
print("hello world")
构建镜像
sudo docker build -t python:mypy .
创建容器并运行简单程序
sudo docker run -v /home/ubuntu/docker-py/app:/app --rm python:mypy # 容器运行完后就删除
日历输出
date.py
import calendar
yy = int(input("年份:"))
mm = int(input("月份:"))
print(calendar.month(yy,mm))
docker run -it -v /home/jamwong/docker-py/app:/usr/src/app --rm python:mypy date.py # 使用-v将本地目录挂载到python工作目录
mysql数据库操作
mysql.py (重装了虚拟机以后之前的数据库镜像没了 又重新折腾了一次🤯)
import pymysql
#打开数据库连接,localhost替换成ip地址,后面依次是用户名,密码,数据库名
db = pymysql.connect("127.0.0.1","jamwong","123456","docker_mysql" )
#使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
#使用 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)
#关闭数据库连接
db.close()
docker run -v /home/jamwong/docker-py/app:/usr/src/app --rm python:mypy mysql.py
OpenCV
opencv.py
import cv2
# flags传入0表示灰度图像, 1表示彩色图像
img=cv2.imread('test.jpg',flags=1)
# 获取图片尺寸
rows,cols=img.shape[:2]
# 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
# 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
M=cv2.getRotationMatrix2D((cols/2,rows/2),48,0.7)
# 第三个参数是输出图像的尺寸中心
dst=cv2.warpAffine(img,M,(cols,rows))
# 写入文件
cv2.imwrite("new-test.jpg", dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
docker run -v /home/jamwong/docker-py/app:/usr/src/app --rm python:mypy opencv.py
总结:
- 一开始docker run运行date.py代码时忘记添加-it使用交互式(因为需要用户输入年、月),导致报错。
- 这次作业相对来说比较简单,只用了一下午的时间,整个过程也比较顺利。