百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

(第一篇)记一次python分布式web开发(docker)

off999 2024-11-08 12:54 20 浏览 0 评论

作者:落阳

日期:2020-12-23

在一次项目开发中,决定使用docker+nginx+flask+mysql的技术栈来开发,用此系列文章记录开发的过程。

系列文章,当前为第一篇,记录一次python分布式web开发过程。

一、docker的安装


作为学生,想找到合适数量的计算机部署分布式系统是一个令人头疼的问题。所以打算在虚拟机上利用docker来部署伪分布式的系统,方便环境搭建、开发和二次部署。

docker定义如下(摘自百度百科):

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

docker的安装可参见官网:docker官方安装教程

安装完成后,运行下面的命令验证是否安装成功:

docker version
# 或者
docker info

docker安装完成之后,每一次使用docker命令都需要sudo权限,可以考虑把当前用户加入docker用户组或者进入sudo su模式,这里采用第二种方法。

二、拉取所需的镜像


根据采用的技术栈,目前确定需要拉取的镜像有nginx、python、mysql。

含flask框架的镜像可以在python镜像的基础上制作。

拉取镜像的命令如下:

docker pull mysql
# 拉取比较稳定的3.8版本的python即可
docker pull python:3.8
docker pull nginx

之后输入命令

docker images

即可查看拉取下来的镜像。

三、启动容器

由于这个分布式的项目需要启动多个容器,所以这里使用了docker-compose来配置和启动多个容器,docker-compose解释如下(摘自菜鸟教程):

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

windows和mac上在安装docker的同时会一起安装了docker-compose,linux需要额外安装。如果你电脑上有pip的话可以利用pip很容易的安装:

pip install docker-compose

之后docker-compose命令会默认处于环境变量之下,可以输入

docker-compose --help

检查是否安装成功。

之后就是配置docker-compose.yml文件,关于docker-compose的使用和配置文件的配置教程可以参考https://vuepress.mirror.docker-practice.com/compose/

目前配置如下:

version: "3.2"
services:
    flask1:
        image: python:3.8 
        container_name: flask1
        restart: always
        volumes: 
        - /root/myflask/estateProject:/estateProject
        - /root/myflask/uwsgi1:/uwsgi
        working_dir: /uwsgi
        command: /bin/bash -c "pip install -r /estateProject/requirements.txt -i https://pypi.douban.com/simple && uwsgi --ini uwsgi.ini"
    flask2:
        image: python:3.8
        container_name: flask2
        restart: always
        volumes: 
        - /root/myflask/estateProject:/estateProject
        - /root/myflask/uwsgi2:/uwsgi
        working_dir: /uwsgi
        command: /bin/bash -c "pip install -r /estateProject/requirements.txt -i https://pypi.douban.com/simple && uwsgi --ini uwsgi.ini"

    nginx:
        image: nginx
        container_name: nginx
        restart: always
        ports:
        - "127.0.0.1:8080:80"
        - "127.0.0.1:8081:443"
        volumes:
        - /root/mynginx/html:/usr/share/nginx/html
        - /root/mynginx/conf:/etc/nginx
        depends_on:
        - flask1
        - flask2

    mysql:
        image: mysql
        container_name: mysql
        restart: always
        command: --default-authentication-plugin=mysql_native_password
        networks:
            my-net:
                ipv4_address: 172.21.0.2
        volumes:
        - /root/mymysql:/docker-entrypoint-initdb.d
        environment:
        - MYSQL_DATABASE=estate_db
        - MYSQL_ROOT_PASSWORD=123456
        
networks:
   my-net:
      driver: bridge
      name: my-net
      ipam: 
        driver: default
        config:
          - subnet: 172.21.0.0/16
            gateway: 172.21.0.1

目前创建了四个容器一个网络。

两个flask容器都是用python:3.8基础上安装requirements.txt文档中的库。并且挂载了目录到宿主机上,避免在容器中的数据层的修改(在docker中不提倡直接修改容器中的数据层)。flask外面套了一层中间层uwsgi目的是让flask和反向代理nginx连接上,并且增加flask的稳定性。uwsgi.ini配置如下:

[uwsgi]
socket = 0.0.0.0:8080
chdir = /estateProject/
wsgi-file = run.py
callable = app
processes = 2
threads = 2

由于uwsgi不直接做服务器,而是作为一个类似中介般的存在,所以这里开放socket端口与nginx作连接以增加安全性和速度。

在mysql容器中的/docker-entrypoint-initdb.d目录下的sql、sh文件会被自动执行,详情参考官方文档https://hub.docker.com/_/mysql。这里将建库建表文件放到mymysql文件夹下并将/docker-entrypoint-initdb.d挂载到此文件夹,在mysql容器初始化时便自动建表,且方便二次修改。

其次,为了避免mysql容器每次启动会自动重新分配ip地址,docker-compose配置中创建了一个网络并为mysql固定了它的ip地址以便flask可以顺利稳定的连接上。

四、初步效果


通过上面的一系列配置,在虚拟机上输入url来查看效果http://127.0.0.1:8080/

效果如图

初步效果

以上是初步搭建出来的效果。

相关推荐

dell笔记本客服电话(dell笔记本客服电话人工服务)

戴尔中国的官方网站http://www.dell.com/zh-cn。通过这个网站购买的都没有问题;有问题也可以进入官网联系售后客服,也可以拔打dell电脑说明书上的售后热线,都可以为你解决的。还是建...

联想乐商店app官方下载(联想乐商店在哪下载)

您好!很遗憾!若是您的手机联想乐商店和联想游戏中心只能有流量,建议您核实是否乐安全有限制wifi上网,核实您所使用的wifi是否本身有限制。若还是无效,可清除缓存数据;备份资料恢复出厂设置尝试。欢迎您...

fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
  • fat32u盘(FAT32u盘多少钱一个)
不用拉网线的路由器是真的吗

是真的不插卡不拉线有线就有网,这11个字其实就涵盖了无线路由器的特点,无线路由器免插卡、不用拉网线,完全摆脱了之前家用路由器和网线捆绑的模式,有电就有网,其实说的就是无线路由器的使用操作简单,通电就可...

微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
  • 微信恢复好友怎么弄回来(vx好友恢复)
u盘检测软件下载(u盘测试软件)

1、u盘芯片检测工具(ChipEasy)可以查看USB设备PID、VID、SN、制造商、产品名等;2、查看USB设备主控芯片信息、闪存芯片信息、固件信息、电流控制3、SSD型号...

电脑现在什么系统最好(电脑现在用什么系统好)

WINXP好用,但过时了。VISTA不好用,没推开就夭折了。WIN8/8.1是针对触模屏设计的,如果你用的不是触摸屏平板电脑是普通电脑,使WIN8/8.1总觉着很蹩扭。新出的WIN10,功能...

账号怎么注册(steam账号怎么注册)

如果注册是qq账号【qq号码的申请办法】【1】双击qq登陆界面,在qq帐号填写空格的后面你可以看见:[申请帐号];【2】点击[申请帐号]进入,就可以在网上免费申请号码了;【3】进入www.qq.com...

tmp文件是什么意思(tmp文件有什么用)

在系统C:\Windows\Temp文件夹中,我们经常会发现一些后缀名为TMP的文件,在该文件夹中的这些文件其实都是临时文件。它们可能是系统被误关机,或者其他程序没有删除而生的。而且在该文件夹中还有其...

怎么给u盘格式化(怎么给u盘格式化成FAT32)

u盘插入电脑,等待桌面弹出u盘图标。打开“计算机”。左键选中u盘,单击右键,在弹出的菜单中,点击“格式化”。点击“开始”,点击“确定”即可。格式化u盘详细步骤1、找到U盘盘符,鼠标右键点击,弹出菜单中...

harmonyos主题下载(harmonyos主题怎么换)

首先,打开荣耀手机的应用市场,在搜索框中输入“华为鸿蒙主题”,然后点击搜索。找到“华为鸿蒙主题”应用后,点击下载即可。下载完成后,打开“华为鸿蒙主题”应用,选择心仪的主题,点击下载并应用即可享受华为鸿...

戴尔笔记本电脑黑屏却开着机

对于电脑黑屏的处理基本上采用排除、替换相结合的方法,其原则应本着先替换排除可疑性最大的部件。对于普通电脑用户来讲,专业知识不足,可以按下列步骤分析故障原因,以便可以自己动手排除故障。首先检查接触是否良...

手机版电脑桌面下载(手机电脑桌面下载软件安装包)

只有电脑版手机助手软件,没有手机桌面这个软件在电脑上点击今日头条APP下载安装即可哦你好,陌陌电脑版如果说你想要下载到电脑桌面的话,你只需要长按把它添加到你的电脑桌面就可以了。要将软件下载到桌面并创建...

ghost备份中文图解(ghost备份1837)

其实是这样的ghost文件备份后会生成两个文件一个是.GHO一个是.GHS文件FAT32格式的分区,单个文件最大只支持到2G(2048M),如果你的镜像>2G,这时的做的GHOST在一个文件里装...

win10一键重装win7(win10一键重装系统)

1、首先准备一个4GB以上可以正常使用的U盘。2、在一个可以正常使用的电脑上,下载老毛桃软件并安装。3、去网上下载所需的win7,win10选择自己所需要的系统,并下载下来。4、插入u盘并打开老毛桃...

取消回复欢迎 发表评论: