zoukankan      html  css  js  c++  java
  • 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个小时。

  • 相关阅读:
    话说 SVN 与 Git 之间的区别
    CentOS 7 之安装 Oracle 11gR2
    @meda媒体查询
    为样式找到应用目标-CSS选择器
    JQuery和原生JavaScript实现网页定位导航特效
    CSS代码缩写
    认识CSS样式
    文档类型、DOCTYPE切换和浏览器模式
    MIME 参考手册
    微格式(microformat)
  • 原文地址:https://www.cnblogs.com/rxdd/p/12918905.html
Copyright © 2011-2022 走看看