• 第5次实践作业


    (1)环境安装

    根据Python官方镜像参考

    • 最终项目结构

    • 配置文件

      • Dockerfile

        FROM python:3
        
        MAINTAINER Dicky
        
        WORKDIR /usr/src/app
        
        COPY requirements.txt ./
        
        RUN pip install --no-cache-dir -r requirements.txt
        
        ENTRYPOINT ["python"]
        
      • requirements.txt(基于本次实验要求)

        PyMySQL
        opencv-python
        
    • 制作镜像docker build -t python-modulesinstalled .

    (2)代码实现

    • helloworld

      • docker run -it --rm --name my-running-script -v /home/admin/dk_python/app:/usr/src/app my-python helloworld.py
        

    • calendar

      • docker run -it --rm --name my-running-script -v /home/admin/dk_python/app:/usr/src/app my-python cal.py
        

    • mysql数据库操作

      采用的镜像是之前制作的

      • 运行mysql容器

        docker build -t pm_mysql . && docker run -it --name pm_mysql pm_mysql
        
      • 查看mysql容器的ip地址(连接时要用到)

        docker inspect pm_mysql
        

      • 编写连接的python文件 (参考资料)

        con-to-mysql.py

        #!/usr/bin/python3
        # -*- coding: UTF-8 -*-
        
        import pymysql
        
        # 打开数据库连接
        db = pymysql.connect("172.18.0.2","docker","123456","S_C" )	# 第一个参数填上面的ip地址
        
        # 使用cursor()方法获取操作游标
        cursor = db.cursor()
        
        # SQL 插入语句
        sql = """INSERT INTO S(Sno,
                 Sname, Sex)
                 VALUES ('031700000', 'XiaoMing', 'M')"""
        try:
           # 执行sql语句
           cursor.execute(sql)
           # 提交到数据库执行
           db.commit()
        except:
           # 如果发生错误则回滚
           db.rollback()
        
        # 关闭数据库连接
        db.close()
        
      • 执行命令docker run -it --rm --name my-running-script -v /home/admin/dk_python/app:/usr/src/app my-python con-to-mysql.py

      • 在容器中查看

    • OpenCV(图片的平移)

      • opencv.py
      import cv2
      import numpy as np
      
      img = cv2.imread('test.jpg',0)
      rows,cols = img.shape
      
      M = np.float32([[1,0,100],[0,1,50]])
      dst = cv2.warpAffine(img,M,(cols,rows))
      
      cv2.imwrite("test-output.jpg", dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
      
      • 命令执行

        docker run -it --rm --name my-running-script -v /home/admin/dk_python/app:/usr/src/app my-python opencv.py
        
      • 测试结果

    (3)总结

    • 合计时间:
      • 5小时左右
    • 踩过的坑
      • 连接数据库时,由于不在一个Docker network下,容器名不能映射到ip地址,所以得手动输入ip。

    (4) 补充

    经老师提醒,可以在启动容器时指定所在的Docker Network,还有一种则是--link机制,通过添加容器和ip的映射到/etc/hosts来实现容器自动通信,并实现自动更新,此机制在docker引入网络新特性性前较为常用。

    使用Docker Network建立通信的步骤如下:参考资料

    ①建立一个docker network,指定类型为bridge

    docker network create -d bridge test-net
    

    ②将已启动的mysql容器连接至该网络

    docker network connect test-net mysql
    

    docker inspect mysql查看网络状态,成功连接到了test-net

    ④修改con-to-mysql.sh

    db = pymysql.connect("mysql","docker","123456","S_C" )	#指定为容器名
    

    ⑤运行python容器,同时使用--net连接至test-net网络

    docker run -it --rm --net test-net --name py-mysql -v "$PWD"/app:/usr/src/app  my-python con-to-mysql.py
    
  • 相关阅读:
    Linux命令
    Linux目录说明
    python推导式
    python公共方法
    python集合
    python字典
    python元组
    python列表
    python字符串常用操作方法
    C语言编译过程
  • 原文地址:https://www.cnblogs.com/dicky99/p/12904838.html
Copyright © 2020-2023  润新知