• Docker容器实践之运行Python程序


    Python镜像文件及PyCode

    项目目录

    Dockerfile

    FROM python:3
    
    WORKDIR /usr/src/app
    
    COPY requirements.txt ./
    RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r requirements.txt
    
    COPY ./hello.py /usr/src/app/
    VOLUME /usr/src/app
    
    ENTRYPOINT ["python"]
    

    Requirements.txt

    PyMySQL
    opencv-python
    

    Hello.py

    print('hello world!')
    

    Calander.py

    import calendar
    yy = int(input("输入年份: "))
    mm = int(input("输入月份: "))
    print(calendar.month(yy,mm))
    

    Mysql.py

    import pymysql
     
    # 打开数据库连接
    db = pymysql.connect("laughing_satoshi","ra9zer","123456","docker_mysql" )
     
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
     
    # 使用 execute()  方法执行 SQL 查询 
    cursor.execute("SELECT VERSION()")
     
    # 使用 fetchone() 方法获取单条数据.
    data = cursor.fetchone()
     
    print ("Database version : %s " % data)
    
    # 使用 execute() 方法执行 SQL,如果表存在则删除
    cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
     
    # 使用预处理语句创建表
    sql = """CREATE TABLE EMPLOYEE (
             FIRST_NAME  CHAR(20) NOT NULL,
             LAST_NAME  CHAR(20),
             AGE INT,  
             SEX CHAR(1),
             INCOME FLOAT )"""
     
    cursor.execute(sql)
    
    # SQL 插入语句
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
             LAST_NAME, AGE, SEX, INCOME)
             VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
    try:
       # 执行sql语句
       cursor.execute(sql)
       # 提交到数据库执行
       db.commit()
    except:
       # 如果发生错误则回滚
       db.rollback()
    
    # SQL 更新语句
    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 提交到数据库执行
       db.commit()
    except:
       # 发生错误时回滚
       db.rollback()
    
    # SQL 查询语句
    sql = "SELECT * FROM EMPLOYEE 
           WHERE INCOME > %s" % (1000)
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 获取所有记录列表
       results = cursor.fetchall()
       for row in results:
          fname = row[0]
          lname = row[1]
          age = row[2]
          sex = row[3]
          income = row[4]
           # 打印结果
          print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % 
                 (fname, lname, age, sex, income ))
    except:
       print ("Error: unable to fetch data")
    
    # 关闭数据库连接
    db.close()
    

    Opencv.py

    import cv2
    
    #
    src=cv2.imread('test.jpg')
    
    # 垂直翻转
    img=cv2.flip(src,0)
    
    
    # 写入文件
    cv2.imwrite("test-rotated.jpg", img)
    print('Successed.')
    
    

    部署运行

    Hello world

    • sudo docker run --rm -v /home/ubuntu/docker-py/py:/usr/src/app dockerpy hello.py

    日历

    • sudo docker run -it --rm -v /home/ubuntu/docker-py/py:/usr/src/app dockerpy calander.py
    • 注意:由于用到了input,需要输入内容,因此运行容器的时候需要用到-it参数,否则会报EOFError: EOF when reaeding a line的错误。

    MySql

    • 注意:运行mysql.py前要先运行数据库容器。然后通过 --link=容器名:容器别名 命令可以实现容器间的互访,否则由于容器间的隔离性,py容器会找不到数据库容器,即出现下图错误

    • sudo docker run -it --rm -v /home/ubuntu/docker-py/py:/usr/src/app --link=laughing_satoshi:laughing_satoshi dockerpy mysql.py

    OpenCv

    • sudo docker run -it --rm -v /home/ubuntu/docker-py/py:/usr/src/app dockerpy opencv.py

    实验心得

    • 这次实验花费时间在3个小时左右,相对前俩次实验可以说是简单多了,属于比较入门的内容,感觉跟直接在linux下运行py代码差别不大。
  • 相关阅读:
    RPC实战与核心原理之负载均衡
    RPC实战与核心原理之动态代理了
    RPC实战与核心原理之网络通信
    RPC实战与核心原理之路由策略
    Spring aop自定义注解
    concurrentmap
    索引使用
    第三章—Java NIO编程:(4)Channel 通道
    第一章—Netty 介绍与应用:(1)Netty 介绍与应用场景
    第二章—Java BIO 编程:(1)I/O 模型
  • 原文地址:https://www.cnblogs.com/fzu-Z9h/p/12925261.html
Copyright © 2020-2023  润新知