一、Python环境搭建
1.拉取镜像
sudo docker pull python:3.7 #拉取dockerhub上的python镜像
2.创建文件
- Dockerfile文件
FROM python:3.7
# 设置工作目录
WORKDIR /usr/src/app
# 添加依赖声明文件
COPY requirements.txt ./
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
COPY apps/hello.py /usr/src/app/
# 实现命令行式调用容器
VOLUME /usr/src/app
# 实现命令行式调用容器
ENTRYPOINT ["python"]
# ENTRYPOINT默认参数
CMD ["hello.py"]
- requirements.txt
PyMySQL
opencv-python
- hello.py
#hello.py
print('hello world')
- date.py
#date.py日历输出
import calendar
yy = int(input("输入年份: "))
mm = int(input("输入月份: "))
print(calendar.month(yy,mm))
- db.py
#db.py 向已有的数据库和表格中添加一条数据(031702500,zz)
import pymysql
# 打开数据库连接
#数据库地址使用mysql的容器名
#使用实验二时候创建的用户,密码,数据库
db = pymysql.connect("mysql1", "hh", "123456", "docker_mysql")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL 查询
cursor.execute("SELECT VERSION()")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
print("Database version : %s " % data)
# SQL 插入语句
sql = """INSERT INTO user(id,name)
VALUES (031702500', 'zz')"""
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 如果发生错误则回滚
db.rollback()
# SQL 查询语句
sql = """SELECT * FROM EMPLOYEE"""
try:
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
idddd = row[0]
name = row[1]
# 打印结果
print ("id=%s,name=%s"% \
(id, name ))
except:
print ("Error: unable to fetch data")
# 关闭数据库连接
db.close()
- cv.py
# cv.py将图片旋转90度并保存
import cv2
# flags传入0表示灰度图像, 1表示彩色图像
img=cv2.imread('test.jpg',flags=1)
# 获取图片尺寸
rows,cols=img.shape[:2]
# 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
# 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
M=cv2.getRotationMatrix2D((cols/2,rows/2),90,1)
# 第三个参数是输出图像的尺寸中心
dst=cv2.warpAffine(img,M,(cols,rows))
# 写入文件
cv2.imwrite("test-rotated.jpg", dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
print('rotated and saved.')
- 文件结构
3.构建自定义镜像
sudo docker build -t python:v1 . #构建自定义镜像
二、测试
2.1helloworld
#无交互式输入:
sudo docker run -v /home/tao/5th/apps:/usr/src/app --rm python:v1
2.2日历输出
#有交互式输入:
sudo docker run -it -v /home/tao/5th/apps:/usr/src/app --rm python:v1 date.py
2.3mysql数据库操作
- 创建一个新的网络连接
sudo docker network create --subnet=172.1.0.0/16 py_mysql #创建名为py_mysql的网络
- 在创建的网络中运行python和mysql容器
sudo docker run --network py_mysql --name mysql1 -d mymysql:test
sudo docker exec -it mysql1 /bin/bash
- 运行代码
sudo docker run -it --network py_mysql -v /home/tao/5th/apps:/usr/src/app --rm python:v1 db.py
2.4opencv程序的部署运行
sudo docker run -v /home/tao/5th/apps:/usr/src/app --rm python:v1 cv.py
三、总结
-
困难
构建自定义镜像时,出现COPY failed: stat /var/lib/docker/tmp/docker-builder455335933/opt: no such file or directory
-
原因
Dockerfile以#开头的行视为注释,如果在有效指令后面使用#号注释,会将其作为参数处理,导致报错**
-
解决
将注释去掉即可,或者把注释单独放一行`
-
耗时
5小时。