第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
posted @ 2020-05-17 12:51  Dicky99  阅读(240)  评论(3编辑  收藏  举报