利用docker 开发 信息系统,python + mysql + flask + jquery

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 利用docker 开发 信息系统,python + mysql + flask + jquery

源码下载,以及项目部署方法

源码下载地址 阿里效云 https://code.aliyun.com/734449600/dockerDeploryFlaskMysql/repository/archive.zip?ref=master

部署命令

解压mysqldata.zip 确定 文件夹中的 mysqldata的绝对路径
里边存放的 mysql 数据库结构以及配置文件
# 创建网路
docker network create --driver bridge --subnet 10.10.0.0/16  --gateway 10.10.0.1 mynet1
# 创建数据库  
#注意把 C:/Users/73444/Desktop/mysqldata/data  换成 mysqldata 的绝对路径
docker run -di --name mysql1 -p 33306:3306 --net mynet1 --ip 10.10.10.11 -v C:/Users/73444/Desktop/mysqldata/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=lmk19980312 registry.cn-hangzhou.aliyuncs.com/mkmk/mysql:8-0-19
# 创建 flask 项目
docker run -di -p 35000:5000  --name flask_demo_cn  --net mynet1 --ip 10.10.10.12 registry.cn-hangzhou.aliyuncs.com/mkmk/flask:studentTemperature

写作目的

python 课程又留了一个增删改查系统,不写吧又不行,重复工作吧又没有意义,然后就针对想要学习迅捷开发部署的 同学写个小教程

  1. 现在各种软件实在太多了,全部下载安装到电脑,简直不堪重负,
  2. 每款软件 配置都很繁琐,
  3. 项目复现困难, 做过的东西,用一次,下次又找不到了
  4. 便于服务迁移与部署升级

所以我们要学习迅捷开发部署,并且上传云端保存环境,直接复现查看效果


本次我们由于面向教学,大家很多没有linux 系统,所以直接在 win10 环境下进行教学

这次就做个简单的学生疫情统计网页吧。

安装docker

阿里 效云 下载

https://code.aliyun.com/734449600/DockerDesktopInstaller/raw/master/Docker%20Desktop%20Installer.exe

直接去官网下载也可以


网络环境搭建

我们本次只有两个网络节点, 一个 mysql节点, 一个 flask 节点

设计ip分配

mysql 10.10.10.11 3306 宿主机访问端口 33306

flask 10.10.10.12 5000 宿主机访问端口 35000


创建网络

docker network create --driver bridge --subnet 10.10.0.0/16  --gateway 10.10.0.1 mynet1

数据库搭建

创建mysql 容器环境

#从一开始就要挂在目录,当容器已经运行,再拷贝目录出来是会报错的
# 请先在本地创建持久化数据的文件夹 C:/Users/73444/Desktop/mysqldata/data
# 创建容器
docker run -di --name mysql1 --net mynet1 --ip 10.10.10.11  -p 33306:3306 -v C:/Users/73444/Desktop/mysqldata/data:/var/lib/mysql     -e MYSQL_ROOT_PASSWORD=lmk19980312 registry.cn-hangzhou.aliyuncs.com/mkmk/mysql:8-0-19
# 进入容器
docker exec -it  mysql1 /bin/bash 
查看mysql 版本 ,大写 -V
mysql -V
mysql  Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)
登录mysql
mysql -u root -p
默认密码 lmk19980312
mysql>
授权远程登陆
mysql>  GRANT ALL ON *.* TO 'root'@'%';
flush privileges;
更改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
  
更新root用户密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'lmk19980312';
刷新权限
flush privileges;

navicate 连接, 注意,我们由于采用了端口映射

mysql 端口在 33306 -p 33306:3306

20200308125941775.png

创建 database ,table

不再复述网上教程很多,直接上结果20200308130825147.png


简单说明

id 是主键,自增

time 设成时间戳比较麻烦,我准备直接在python 中生成格式时间

stuno 学号

stuname 姓名

temperature 体温


python-flask后台开发

接口简述

insertRecord 插入记录
delById 删除记录通过id
getAllRecord 查看所有记录
getAbnRecorde 查看不正常记录


结合业务需要,不能随意修改记录,

源代码已经上传至 阿里巴巴 效云

文件目录


jquery 结合 jinja2 前端页面开发

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="{{ url_for('static',filename='jquery-3.4.1/jquery-3.4.1.js') }}" ></script>
</head>
<style>
    body{ text-align:center;text-va}
    #divjuzhong{margin:0 auto;border:1px solid #000;width:300px;height:100px}
    .fa1{display: flex; justify-content: center; align-items: center;min-width: 1600px;min-height: 500px;}
    .fa2{min-width: 1400px; min-height: 300px; background-color: blanchedalmond;}
    .del1{}
</style>
<script type="text/javascript">
$(document).ready(function(){
  $("#click1").click(function(){
      if (  $('#input1').val().length<5 || $('#input2').val().length<2 || $('#input3').val().length != 4    )
      {
          alert("请检查你的输入");
          return
      }
      $.get("/insertRecord",{ stuNo: $('#input1').val() ,
                                stuName: $('#input2').val(),
                                temperature: $('#input3').val()},
            function (data) {
                 alert("提交成功");
                 location.assign("/")
            });
  });
});
  function del1(id1){
      $.get("/delById", {
        id: id1
      },
            function (data) {
                 alert("删除成功" );
                 location.assign("/")
            });
  };
    function getAbn(){
      $.get("/delById",
            function (data) {
                 location.assign("/getAbnRecorde")
            });
  };
    function  getall(){
      $.get("/delById",
            function (data) {
                 location.assign("/")
            });
  };
</script>
<body>
<div class="fa1" >
    <div class="fa2">
        <table border="1" style="background-color: aliceblue">
            <tr>
                <td onclick="getall()">查看所有记录</td>
                <td style="width: 20px"> </td>
                <td onclick="getAbn()">查看异常记录</td>
            </tr>
        </table>
        <table border="2" class="fa2">
        <caption>学生体温统计表</caption>
            {# 表头        #}
            <tr style="font-size: larger">
                    {% for item in heads %}
                        <td> {{ item }} </td>
                    {% else %}
                        <td> {{ "服务器故障" }} </td>
                    {% endfor %}
            </tr>
            <tr>
                <td></td><td></td>
                <td><input id="input1" type="text" size="15" min-length="30" placeholder="请输入 学号 大于五位"></td>
                <td><input id="input2" type="text" size="15" min-length="30" placeholder="请输入 姓名 大于两个字"></td>
                <td><input id="input3" type="text" size="15" min-length="30" placeholder="请输入 真实体温 例如 36.5"></td>
                <td id="click1" style="background-color: azure"  > 提交 </td>
            </tr>
            {% for oneinfo in allinfo %}
                <tr style="font-size: medium">
                <script language="JavaScript"> var id1=0 </script>
                    {% for onestr in oneinfo %}
                        <script language="JavaScript">
                            if (id1==0){id1='{{ onestr }}' }
                        </script>
                        <td> {{ onestr }} </td>
                    {% else %}
                        <td> {{ "服务器故障" }} </td>
                    {% endfor %}
                    <td  onclick="del1(id1)"  style="background-color: azure"  > {{ "删除" }} </td>
                </tr>
            {% else %}
                    <td> {{ "服务器故障" }} </td>
            {% endfor %}
        </table>
    </div>
</div>
</body>
</html>

封装flask容器步骤

创建文件夹 flask_docker 名称随意



其中flask_demo 放置源代码

书写Dockerfile

#基于的基础镜像
FROM python:3
#代码添加到code文件夹
ADD ./flask_demo  /usr/src/app
# 设置app文件夹是工作目录
WORKDIR /usr/src/app
# 安装支持
RUN pip install Flask==1.1.1 Jinja2==2.11.1 PyMySQL==0.9.3 cryptography -i  https://pypi.tuna.tsinghua.edu.cn/simple
CMD [ "python", "/usr/src/app/app.py" ]


创建镜像 命令最后的 点 . 不要省略
docker build -t  registry.cn-hangzhou.aliyuncs.com/mkmk/flask:studentTemperature   .
使用镜像
docker run -it -p 35000:5000  --name flask_demo_cn  --net mynet1 --ip 10.10.10.12  registry.cn-hangzhou.aliyuncs.com/mkmk/flask:studentTemperature

此时访问 localhost:35000 即可 看到网页

完成

docker常用命令

#强制删除所有镜像和容器
docker stop -f  $(docker ps -a -q) | docker rm -f $(docker ps -a -q) |  docker rmi -f $(docker images -q)
#查看镜像列表
docker images
#删除单个镜像
docker rmi image-id
#删除所有镜像
docker rmi $(docker images -q)
#查看运行中的容器
docker ps
#查看所有容器
docker ps -a
#停止单个容器
docker stop container-id
#停止所有容器
docker stop $(docker ps -a -q)
#删除单个容器
docker rm container-id
#删除所有容器
docker rm $(docker ps -a -q)
#删除系统数据
docker system prune
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
应用服务中间件 nginx Docker
使用 Python Flask 创建简易文件上传服务
在平时工作中,文件上传是一项常见的需求,例如将应用异常时通过脚本生成的dump文件收集起来进行分析,但实现起来却可能相当复杂。幸运的是,Flask框架提供了一种简单而高效的方式来处理文件上传,代码不到100行。在本文中,我们将探讨如何使用Flask实现文件上传功能,编写Dockerfile将应用程序通过docker部署。
|
13小时前
|
机器学习/深度学习 数据采集 监控
基于Python的图像识别技术在智能安防系统中的应用
【5月更文挑战第30天】 在当今社会,随着人工智能技术的飞速发展,图像识别已经成为了一个重要的研究领域。本文将介绍基于Python的图像识别技术在智能安防系统中的应用,通过对深度学习模型的讲解和实例分析,展示了如何利用Python实现高效、准确的图像识别功能,为智能安防系统的设计和实现提供了有力的技术支持。
|
2天前
|
前端开发 Java Docker
【分享】记一次项目迁移(docker java | docker python)
该项目是一个前端Vue3和后端Python+Java的应用,原本部署在CentOS7服务器上通过宝塔面板管理。由于服务器即将到期,计划迁移到另一台使用OpenCloudOS和1Plane的服务器。在尝试构建Docker镜像时,首先为Java应用创建Dockerfile,成功构建并运行。对于Python应用,也创建了Dockerfile,并处理了依赖包的安装。在迁移过程中遇到Java项目加载验证码失败的问题,原因是缺少字体配置。通过在宿主机安装fontconfig并将相关字体文件复制到镜像中解决了问题。最后,前端Vue应用作为静态文件运行,如果使用反代理,需要进行相应配置。
18 1
|
2天前
|
应用服务中间件 API nginx
使用Python和Flask构建RESTful Web API
使用Python和Flask构建RESTful Web API
12 0
|
2天前
|
存储 数据库连接 数据安全/隐私保护
使用Python和Flask构建一个简单的Web博客应用
使用Python和Flask构建一个简单的Web博客应用
9 0
|
2天前
|
安全 数据安全/隐私保护 开发者
Python实现简单的邮件发送系统
Python实现简单的邮件发送系统
14 3
|
8天前
|
缓存 应用服务中间件 数据库
Python Web Service开发及优化
随着互联网的快速发展,Web服务已成为现代技术的核心。Python作为一种功能强大且易于学习的编程语言,在Web服务开发领域占据着重要地位。Python Web服务开发的重要性在于它能够提供高效、可扩展且易于维护的解决方案。本篇博客将探讨如何使用Python的Flask框架、Gunicorn WSGI服务器和Nginx网页服务器来实现高性能的Web服务。
|
9天前
|
网络协议 Python
在python中利用TCP协议编写简单网络通信程序,要求服务器端和客户端进行信息互传。 - 蓝易云
在这个示例中,服务器端创建一个socket并监听本地的12345端口。当客户端连接后,服务器发送一条欢迎消息,然后关闭连接。客户端创建一个socket,连接到服务器,接收消息,然后关闭连接。
64 0
|
10天前
|
IDE 开发工具 开发者
2024年最新5个提升生产效率的Python开发和配置的小技巧_python高级开发技巧,字节跳动面试必问
2024年最新5个提升生产效率的Python开发和配置的小技巧_python高级开发技巧,字节跳动面试必问
2024年最新5个提升生产效率的Python开发和配置的小技巧_python高级开发技巧,字节跳动面试必问
|
10天前
|
Python
2024年最全用Python写了一个电子考勤系统_用python写一个宿舍考勤系统,2024年最新1307页阿里Python面试全套真题解析在互联网火了
2024年最全用Python写了一个电子考勤系统_用python写一个宿舍考勤系统,2024年最新1307页阿里Python面试全套真题解析在互联网火了
http://www.vxiaotou.com