云原生-部署python应用到docker镜像里

场景: 定时发送邮件到指定邮箱(这里做了个阉割版的,是在docker内部运行服务器主机上的python程序,然后发送邮箱到指定邮箱)。

工具: python
环境: ubuntu 18.04.4 LTS
Docker version 20.10.16, build aa7e414
python3 (使用smtplib发送)
(有些人肯定觉得没必要那么麻烦,直接装在宿主机里就可以了,没必要放到docker里。但是我想的是开发分离。python的环境和其他环境独立开来,后面迁移也方便,而且也不需要再宿主机做虚拟python环境,如果有多个python版本的就直接多个镜像好了)

1、首先先安装smtplib

pip3 install PyEmail #注意不是smtplib

测试发送代码

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

my_sender='1910076XXX@qq.com' # 发件人邮箱账号
my_pass = 'skmficoprl123456111'    # qq邮箱的授权码,并不是登录密码(当时申请smtp给的口令)
my_user='1910076XXX@qq.com'  # 收件人邮箱账号,我这边发送给自己
def mail():
    ret=True
    try:
        msg=MIMEText('docker 挂载python路径自动发送','plain','utf-8')
        msg['From']=formataddr(["发件人昵称",my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
        msg['To']=formataddr(["收件人昵称",my_user])    # 括号里的对应收件人邮箱昵称、收件人邮箱账号
        msg['Subject']="邮件主题-测试"    # 邮件的主题,也可以说是标题
        
        server=smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件人邮箱中的SMTP服务器,端口是465
        server.login(my_sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
        server.sendmail(my_sender,[my_user,],msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()# 关闭连接
    except smtplib.SMTPException:# 如果 try 中的语句没有执行,则会执行下面的 ret=False
        print(smtplib.SMTPException)
        ret=False
    return ret
 
 
if __name__ == "__main__":
    ret=mail()
    if ret:
        print("邮件发送成功")
    else:
        print("邮件发送失败")

邮件授权码配置
在这里插入图片描述

在这里插入图片描述

2、安装python 镜像(如果已经有现成的这一步可以省略)

docker image pull python

在这里插入图片描述

3、将文件上传到服务器

在这里插入图片描述

4、挂载本地python项目路径到docker 内部

docker run -itd -v "/var/www/html/Python/Python Project":"/var/www/html/Python/Python Project" --name python -p 8071:80 -d python

在这里插入图片描述

5、进入容器里

docker exec -it python /bin/bash

在这里插入图片描述

6、进入docker里映射后的python项目路径

在这里插入图片描述

7、运行python程序

在python项目目录下执行以下代码

python sentMail.py

在这里插入图片描述

总结:

优势: docker 环境下很好对程序进行了隔离。看下面2张图可以看出来,第一张图是docker镜像python里的目录,只有python的项目,但是宿主机里相同的路径下是有python、ui5、vue、nginx等等应用程序。权限管理起来会比较麻烦。
不足: 劣势也很明显,对开发人员的要求更高,技术栈需要更多,而且随着系统的复杂上升,对架构、负载均衡,端口正向映射/反向映射 等等知识都需要了解。而且随着容器的增多必然也会面临权限分割、容器管理等等问题。
目前来看的话还是使用docker还是比没使用管理起来会更高效和便捷
在这里插入图片描述
在这里插入图片描述

posted @ 2022-06-02 17:25  linhuang  阅读(17)  评论(0编辑  收藏  举报  来源