使用docker容器运行Python程序,docker查看正在运行的容器,#topics .p
使用docker容器运行Python程序,docker查看正在运行的容器,#topics .p
本文主要阐述基于python镜像和mysql镜像,利用docker容器搭建python3的系统环境,并运行简单的python程序
一.Python镜像的构造文件、Python程序代码
1?? python镜像的python3_dockerfile
#基础镜像FROM python:3#作者信息MAINTAINER lxc#工作目录WORKDIR /usr/src/app#复制文件到容器中COPY requirements.txt ./RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simpleCOPY . .
ps:由于直接pip速度较慢,这里使用了清华源镜像加速-i https://pypi.tuna.tsinghua.edu.cn/simple
2?? 记录python依赖的文件:requirement.txt
numpy==1.18.4opencv-python==4.2.0.34PyMySQL==0.9.3
生成方法:在本机编写代码调试程序后,在python代码所在目录下,使用命令:pip freeze > requirements.txt,即可在该目录下生成requirement.txt文件。(参考链接)
??
??
3?? python程序
①. 简单测试程序HelloWord.py
print("Hello World!")
②. 简单日历显示程序Calander.py
# Filename : test.py# author by : www.runoob.com # 引入日历模块import calendar # 输入指定年月yy = int(input("输入年份: "))mm = int(input("输入月份: ")) # 显示日历print(calendar.month(yy,mm))
参考Pyhton生成日历
③. 简单数据库操作程序MySql.py
import pymysqlimport time# 打开数据库连接。connec参数依次为"容器IP或虚拟机IP","用户名","密码","数据库名称",字符集编码格式db = pymysql.connect("localhost", "root", "6666", "user", charset=‘utf8mb4‘ )# 使用 cursor() 方法创建一个游标对象 cursorcursor = db.cursor() # 使用 execute() 方法执行 SQL,如果表存在则删除cursor.execute("DROP TABLE IF EXISTS myuser") # 使用预处理语句创建表sql = """CREATE TABLE myuser ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1) )"""try: # 执行SQL语句 cursor.execute(sql) # 提交到数据库执行 db.commit()except: # 如果发生错误则回滚 db.rollback()# 增 sql = "INSERT INTO myuser(FIRST_NAME,LAST_NAME, AGE, SEX) VALUES (%s, %s, %s, %s)"data = ((‘Xin‘, ‘Lin‘, 23, ‘M‘),(‘Yun‘, ‘Ma‘, 50, ‘M‘))try: # 执行多条sql语句 cursor.executemany(sql, data) # 提交到数据库执行 db.commit()except: # 如果发生错误则回滚 db.rollback()#查sql = "SELECT * FROM myuser"try: # 执行SQL语句 cursor.execute(sql) # 获取所有记录列表 results = cursor.fetchall() print("插入数据:") for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] # 打印结果 print ("fname=%s,lname=%s,age=%s,sex=%s" % (fname, lname, age, sex))except: print ("Error: unable to fetch data")#改sql = "UPDATE myuser SET AGE = AGE + 1 WHERE SEX = ‘%c‘" % (‘M‘)try: # 执行SQL语句 cursor.execute(sql) # 提交到数据库执行 db.commit()except: # 发生错误时回滚 db.rollback()#查sql = "SELECT * FROM myuser"try: # 执行SQL语句 cursor.execute(sql) # 获取所有记录列表 results = cursor.fetchall() print("修改年龄:") for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] # 打印结果 print ("fname=%s,lname=%s,age=%s,sex=%s" % (fname, lname, age, sex))except: print ("Error: unable to fetch data")#查sql = "SELECT * FROM myuser WHERE AGE = 24"try: # 执行SQL语句 cursor.execute(sql) # 获取所有记录列表 results = cursor.fetchall() print("删除记录:") for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] # 打印结果 print ("fname=%s,lname=%s,age=%s,sex=%s" % (fname, lname, age, sex))except: print ("Error: unable to fetch data") #删sql = "DELETE FROM myuser WHERE AGE = 24" try: # 执行SQL语句 cursor.execute(sql) # 提交修改 db.commit()except: # 发生错误时回滚 db.rollback() #查sql = "SELECT * FROM myuser"try: # 执行SQL语句 cursor.execute(sql) # 获取所有记录列表 results = cursor.fetchall() print("最后结果:") for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] # 打印结果 print ("fname=%s,lname=%s,age=%s,sex=%s" % (fname, lname, age, sex))except: print ("Error: unable to fetch data") # 关闭数据库连接db.close()
参考Python3 MySQL数据库连接
④. 简单图像操作程序poenvc.py
import cv2import numpy as npimg=cv2.imread(‘test.jpg‘)print(img.shape) #返回图像属性:行数,列数,通道数的元组print(img.size, img.dtype) # 返回的是图像的数据类型.block=img[70:120,80:120]img[0:50,0:40]=blockimg=cv2.imshow(‘test‘, img)cv2.waitKey(0)
参考opencv图像的基本操作中的9.2 获取图像属性、9.3 图像 ROI。
ps:mysql的构建使用的是上一篇博客中构建的mysql(也可以使用mysql官方镜像)
⑤. 文件结构
├── Calander.py├── HelloWorld.py├── MySql.py├── opencv.py├── python3_dockerfile├── requirements.txt└── test.jpg
二.Python3镜像构建
使用命令:docker build -t python3 -f ./python3_dockerfile .,构建过程如下:
三.运行测试
1?? 运行HelloWorld.py
命令:docker run -it --rm --name python3_container -v "$PWD":/usr/src/myapp -w /usr/src/myapp python3 python HelloWorld.py
结果:
2?? 运行Calander.py
命令:docker run -it --rm --name python3_container -v "$PWD":/usr/src/myapp -w /usr/src/myapp python3 python Calander.py
结果:
3?? 运行MySql.py
命令:docker run -it --rm --name python3_container -v "$PWD":/usr/src/myapp -w /usr/src/myapp python3 python MySql.py
运行时出错:
错误原因:mysql版本身份验证出现问题引起
解决方法:进入pyhton3容器中安装cryptography,然后commit成镜像(或者在dockerfile中添加cryptography的安装),再运行新的镜像。
具体过程:
①. 使用命令docker run --name python3_container -v "$PWD":/usr/src/myapp -w /usr/src/myapp -it python3 bash,交互式启动python3,进入容器:
②. 在容器中安装cryptography:pip install cryptography -i https://pypi.tuna.tsinghua.edu.cn/simple:
在这里可以直接运行:
③. commit成镜像,commit命令:docker commit python3_container python3_lxc
④. 再次运行,运行命令:docker run -it --rm --name python3_container -v "$PWD":/usr/src/myapp -w /usr/src/myapp python3_lxc python MySql.py
4?? 运行opencv.py
由于docker中显示图像比较繁琐,这里的图像是在本机跑出来的,运行的时候可以把有关图像显示的内容注释掉或者去掉:
import cv2import numpy as npimg=cv2.imread(‘test.jpg‘)print(img.shape) #返回图像属性:行数,列数,通道数的元组print(img.size, img.dtype) # 返回的是图像的数据类型.#block=img[70:120,80:120]#img[0:50,0:40]=block#img=cv2.imshow(‘test‘, img)#cv2.waitKey(0)
结果:
在本机windows系统上运行有关图片显示部分的结果,效果为截取表情包中熊猫人的嘴型放到图片左上角:
四.小结
这次实践+编写博客花费了大概有5个小时的时间。实践难度不大,主要是围绕python镜像进行简单的环境配置和运行测试。根据教程按部就班,过程很顺畅。做完这次实践,第一是学到了Python requirement文件的创建和使用,体会到了requirement作用:requirement作用是记录python程序依赖包,在镜像构建时通过pip安装requirement中记录的依赖,从而节省了手动下载依赖的繁琐步骤。其次是初步了解了python的opencv,通过一些简单的图片操作体会了opencv的作用。总的来说,一路通畅,收获满满!????
使用docker容器运行Python程序
相关内容
- Python3 GUI开发(PyQt)安装和配置,java开发电脑配置要求
- python MD5() 加密,,摘要算法python
- python3.72下载及安装(windows为例),python3编程100例,一、
- 通过shell脚本查看python版本并比较,,a.pyimport
- Centos7+python3.6+face-recognition,,Step1安装Pyt
- python测试开发(01-递归函数+内置函数),python递归实例
- python3.7.3升级 with-openssl openssl-1.0.2a,,## 系统环境- R
- 用 Python、 RabbitMQ 和 Nameko 实现微服务,微服务基本框架
- C++程序调用python3,编程学python还是C是什么,今天想做一
- 安装python2.7.13-64bit & Pycharm在两个python版本之间切
评论关闭