第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