1、Python自定义镜像搭建
- 拉取dockerhub上的python镜像
docker pull python:3.7
- Dockerfile文件
FROM python:3.7 MAINTAINER FWH # 设置工作目录 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
- 搭建镜像
docker build -t docker-python .
2、运行Python程序
-
helloworld
- hello.py
# hello.py print('hello world')
- 运行
docker run --rm -v /home/ubuntu/ex5/app:/app docker-python hello.py
- hello.py
-
日历输出
- date.py
# date.py import calendar yy = int(input("输入年份: ")) mm = int(input("输入月份: ")) print(calendar.month(yy,mm))
- 运行
docker run -it --rm -v /home/ubuntu/ex5/app:/app docker-python date.py
- date.py
-
mysql数据库操作
- 用于创建一个新的网络连接
docker network create --subnet=172.1.0.0/16 py_mysql
- 运行mysql容器
docker run --network py_mysql --name mysql_fwh -d mysql:fwh docker exec -it mysql_fwh /bin/bash
- mysql.py
import pymysql # 打开数据库连接 db = pymysql.connect(host="mysql_fwh",user="docker",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
docker run --rm -v /home/ubuntu/ex5/app:/app --network py_mysql docker-python mysql.py
- 用于创建一个新的网络连接
-
opencv程序的部署运行
- opencv.py
import numpy as np import cv2 # Create a black image img = np.zeros((512,512,3), np.uint8) # Draw a diagonal blue line with thickness of 5 px img = cv2.line(img,(0,0),(512,512),(0,0,255),5) img = cv2.circle(img,(256,256), 100, (0,0,255), -1) pts = np.array([[256,60],[56,360],[456,360]], np.int32) pts = pts.reshape((-1,1,2)) img = cv2.polylines(img,[pts],True,(0,0,255)) font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA) cv2.imwrite('test.png',img)
- 运行
docker run --rm -v /home/ubuntu/ex5/app:/app docker-python opencv.py
- opencv.py
小结
- 问题和解决办法
- 问题:日历输出时出错
- 解决:docker run 后面应加-it,有交互输入时,运行容器需要用到-it参数
- 问题:日历输出时出错
- 用时
- 本次实验和上次比要简单了一些,花了6个小时的时间