第5次实践作业

系统综合实践第5次实践作业

一、构建镜像

1.Dockerfile

FROM python:3
WORKDIR /usr/src/app
#工作目录
COPY requirements.txt ./requirements.txt
#依赖声明
RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
#换清华源,并安装依赖

COPY myapp/hello.py /usr/src/app/ 
VOLUME /usr/src/app

ENTRYPOINT ["python"]
CMD ["hello.py"]

2.requirements.txt

PyMySQL
opencv-python

3.build镜像

文件目录结构如下:(暂时没提到的文件在博客后面的内容中)

cd WorkPath
docker build -t mypython .

二、部署运行

1.helloworld

docker run --rm mypython

--rm参数使得容器在运行后直接自动删除

2.日历

date.py

# 引入日历模块
import calendar
# 输入指定年月
yy = int(input("输入年份: "))
mm = int(input("输入月份: "))
# 显示日历
print(calendar.month(yy,mm))

docker run -it -v /home/kingdom/WorkPath/myapp:/usr/src/app --rm mypython date.py

3.MySQL

这里用到的数据库容器请参考我的第二次系统综合实践作业博客

https://www.cnblogs.com/Jorgensen/p/12749012.html#二、实现一个自定义的数据库容器服务)

参考我的博客先build镜像
docker build -t mysql_zqz .
然后运行MySQL容器
docker run -d -p 13306:3306 --name mysql_zqz mysql_zqz

docker ps -a

进入容器
docker exec -it mysql_zqz /bin/bash

使用kingdom账户登录mysql,密码是123456
mysql -u kingdom -p

连接到docker_mysql这个数据库
use docker_mysql;

显示这个数据库中所有的表格
show tables;

选择test表的所有内容
select * from test;

mysql_db.py

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='mysql_zqz'        #MySQL容器名
username='kingdom'    #用户名
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('031702400',0);" %table_name
db.insert_data(sql1)

print(db.select_all())

db.conn_close()

打开一个新的终端,运行python容器
docker run -it -v /home/kingdom/WorkPath/myapp:/usr/src/app --link=mysql_zqz --rm mypython sql.py
这里link参数是用来现容器间的互访,mysql_zqz是MySQL容器的容器名

在MySQL容器这边验证下插入是否成功

4.opencv

opencv.py

# 仿射变换
import cv2
import numpy as np
img = cv2.imread('picture.jpg')
rows,cols,ch = img.shape
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])
M = cv2.getAffineTransform(pts1,pts2)
dst = cv2.warpAffine(img,M,(cols,rows))
# 写入文件
cv2.imwrite("picture_new.jpg", dst, [int(cv2.IMWRITE_JPEG_QUALITY), 100])

docker run -it -v /home/kingdom/WorkPath/myapp:/usr/src/app --rm mypython opencv.py

三、总结

遇到的问题:本次实验比较简单,基本没有遇到问题.
用时:实验+博客=3h

posted @ 2020-05-20 18:01  Jorgensen  阅读(184)  评论(0编辑  收藏  举报
#site_nav_under { display: none; } .c_ad_block, .ad_text_commentbox { display: none; margin: 0; padding: 0; } #ad_under_google { height: 0; overflow: hidden; } #ad_under_google a { display: none; }