2020系统综合实践 第5次实践作业

1.Python镜像环境搭建

  • 在主目录任意创建一个文件夹,这里命名为python,在里面添加两个文件
  • Dockerfile
FROM python:3
WORKDIR /usr/src/app
COPY requirements.txt ./

# 修改源并安装依赖
RUN pip install -r requirements.txt -i https://pypi.douban.com/simple 

ENTRYPOINT ["python"]
CMD ["hello.py"]
  • requirements文件
PyMySQL
opencv-python
  • 输入下列指令创建镜像,先进入root模式
sudo su
docker build -t mypython .

2.实现简单代码,在python下创建一个apps的文件夹用来存取代码

(1)hello.py

print("hello world")

  • 运行代码,同样需要在root条件下
    docker run -v /home/frx/python/apps:/usc/src/app --rm mypython

(2)date.py

import calendar

yy = int(input("输入年份: "))

mm = int(input("输入月份: "))

print(calendar.month(yy,mm))
  • 运行代码,这里由于在Dockfile里没有拉入date.py所以运行指令需要加上-it以及文件名
docker run -it -v /home/frx/python/apps:/usc/src/app --rm mypython date.py

3.数据库

  • 这里我直接使用了实验二用的数据库
  • 运行该容器,可以直接去看看之前实验二的容器名,比如在我这里是frxmysql
sudo docker run --name frxmysql -d frxmysql      l
  • 查看容器是否在运行
sudo docker ps

  • 查看数据库的状态

  • 添加python连接数据库以及操作数据库的代码,这里以插入一条数据为例

  • mysql_db.py 这是python操作数据库代码

import pymysql

class Mysql_db():

    def __init__(self,ip,username,password,db_name,table_name):

        self.ip=ip
        self.username=username
        self.password=password
        self.db_name=db_name
        self.table_name=table_name

    def db_conn(self):

        #打开数据库连接
        self.conn=pymysql.connect(self.ip,self.username,self.password,self.db_name)

        #创建一个游标
        self.cursor=self.conn.cursor()

    #创建表格
    def create_table(self,sql):

        self.cursor.execute('drop table if exists %s;' %self.table_name)

        self.cursor.execute(sql)

    #插入数据
    def insert_data(self,sql):
        #执行SQL语句,发生错误时回滚
        try:
            self.cursor.execute(sql)
            self.conn.commit()

        except :
            self.conn.rollback()

    #查询数据
    def select_all(self):

        sql='select * from %s' %self.table_name
        self.cursor.execute(sql)
        return self.cursor.fetchall()

    #更新数据库数据
    def update_data(self):
        #执行SQL语句,发生错误时回滚
        try:
            self.cursor.execute(sql)
            self.conn.commit()

        except :
            self.conn.rollback()        

    #删除数据
    def delete_data(self):
        #执行SQL语句,发生错误时回滚
        try:
            self.cursor.execute(sql)
            self.conn.commit()

        except :
            self.conn.rollback()


    #关闭数据库
    def conn_close(self):

        self.conn.close()
  • sql.py 这是一个具体的插入代码
from mysql_db import Mysql_db

ip='frxmysql'          #容器名
username='docker'         #用户名
password='123456'      #密码
db_name='docker_mysql' #数据库名
table_name='test'    #表名
db=Mysql_db(ip, username, password, db_name,table_name)

db.db_conn()

sql1="insert into %s values(031702428,'phd');" %table_name
db.insert_data(sql1)

print(db.select_all())

db.conn_close()
  • 运行sql.py代码
sudo docker run -it --rm -v /home/frx/python/apps:/usr/src/app --link=frxmysql mypython sql.py

  • 再次查看数据库 成功插入数据

4.Opencv,这里引用别人的代码,确实不会

  • opencv.py 其中picture1.jpg 和picture2.jpg同样需要放在apps目录下(同目录就行
import cv2 as cv

img1 = cv.imread("picture1.jpg")
img2 = cv.imread("picture2.jpg")

result = cv.addWeighted(img1,0.3,img2,0.9,0)  
cv.imwrite('result.jpg', result)
print("success")
  • 运行
docker run -it -v /home/frx/python/apps:/usr/src/app --rm mypython opencv.py

  • 执行成功在apps文件夹下多出一个result.jpg的图片,即为我们合成的图片,展示一下效果


  • 实验结束后的树结构

5.遇到的问题及解决方法

(1)一开始直接使用sudo docker -t mypython .发生不知名错误,遇到这种问题还是建议换源


换源后成功安装

(2)在使用实验二的数据库时,一直出现容器名重复的问题,就算使用sudo docker ps也没用,这个指令只是查看正在运行的容器

使用这条sudo docker ps -a 即可查看,把对应的id删除即可成功运行

6.花费的时间

做这个实验经过了学习知识,实践操作,解决问题,写博客等几个阶段,量还是比较少的,大约花费了5个小时。

原文地址:https://www.cnblogs.com/rxdd/p/12918905.html