1.项目结构
.
├── Dockerfile
├── python
│ ├── cv.py
│ ├── date.py
│ ├── db.py
│ ├── Dockerfile
│ ├── ex5.png
│ ├── hello.py
│ └── new.png
└── requirements.txt
2.python容器
(1)文件
- requirements.txt
PyMySQL
opencv-python
- Dockerfile
FROM python
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --default-timeout=100 --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
VOLUME /usr/src/app
ENTRYPOINT [ "python" ] # 实现命令行式调用容器
CMD [ "hello.py" ] # ENTRYPOINT默认参数
(2)构建镜像
- 命令:
sudo docker build -t ex5_image .
(3)运行
- hello.py
print('hello world')
-
命令
sudo docker run --rm -v /home/ex5/python:/usr/src/app ex5_image
- 参数说明
- 使用-v将本地目录挂载到python工作目录以方便代码修改
- --rm运行完毕后自动移除容器
- 默认使用Dockerfile中指定的hello.py作为参数
- 参数说明
-
date.py
sudo docker run -it --rm -v /home/ex5/python:/usr/src/app ex5_image date.py
- 参数说明
date.py
是ENTRYPOINT
的参数- 由于要实现交互,所以要加
-it
参数
- 参数说明
-
数据库操作
- 运行实验4的数据库
- db.py
import pymysql db = pymysql.connect("msql", "root", "123456", "ex4_db") # 创建游标对象 cursor cursor = db.cursor() # 插入 sql = """INSERT INTO myuser(username,phone) VALUES ('Yuhao Lin','1247189541')""" try: cursor.execute(sql) # commit db.commit() except: # 回滚 db.rollback() # 查询 sql = """SELECT * FROM myuser""" try: cursor.execute(sql) results = cursor.fetchall() for row in results: # 打印结果 print ("username=%s,phone=%s" % (row[0],row[1])) except: print ("ERROR") db.close()
- 命令
sudo docker run -it --rm -v /home/ex5/python:/usr/src/app --link=msql:msql ex5_image db.py
- 参数说明:
- --link=容器名:容器别名` 实现容器间的互访
- 运行实验4的数据库
-
opencv
import cv2
# 生成图片
img = cv2.imread("ex5.png", 0)
# 等待图片的关闭
cv2.waitKey()
# 保存
cv2.imwrite("new.png", img)
- 命令`sudo docker run -it --rm -v /home/ex5/python:/usr/src/app ex5_image cv.py`
3.用时&心得
时间统计
- 查资料0.5小时
- 动手2小时
- 写博客0.5小时
- 合计3小时左右
心得
这次的实验做的很快,老师给的参考资料帮了很大的忙,当然也有“经历风雨”的原因,心理承受能力大大加强,啥不懂?搜就完事了。