docker部署flask应用

0.1 前提

​ 阿里ecs:Ubuntu20.0

0.2 目标:

  • vscode SSH 到 阿里云ecs进行远程开发
  • 阿里云ecs部署python开发环境
  • flask 服务器部署
  • 打包镜像并上传到docker hub

1.1 vscode ssh设置

四步完成vscode远程开发配置 - 简书 (jianshu.com)

输入要ssh的远程主机的ip

请添加图片描述

进入ssh配置页面

在这里插入图片描述

在打开的文件中输入

Host 1XX.77.X.X
  HostName 1XX.77.X.XX
  User root

右键连接

在这里插入图片描述

输入密码,就可连接远程主机了。

1.2 python环境部署

如何在Ubuntu 20.04上创建Python虚拟环境?-51CTO.COM

1.2.1 创建venv环境

# ubuntu20 已移除python2且自带python3
apt update && apt upgrade 
python3 -V 
apt-cache search venv 
apt -y install python3-venv 

# 创建venv环境
python3 -m venv /opt/my_first_venv 
cd /opt/my_first_venv 
# 激活venv环境
source my_first_venv/bin/activate

# 激活后shell提示会变化为如下所示
(my_first_venv) # 

# 停用venv环境
(my_first_venv)  deactivate


1.3 flask 服务器部署

Flask + Docker 无脑部署新手教程 - 知乎 (zhihu.com)

# 1 在venv环境中使用gnicron部署flask应用
pip install gunicorn gevent

1.3.2 创建flask应用

在项目根目录下创建start.py 文件,这是项目的启动文件

#start.py
from project import create_app #从project文件夹中的__init__.py中导入create_app函数

app = create_app() #记住这里的变量名app

if __name__ == '__main__':
    app.run(debug=True)

1.3.3 gunicron服务器配置

在项目根目录下创建 gunicorn.conf.py 文件

workers = 5    # 定义同时开启的处理请求的进程数量,根据网站流量适当调整
worker_class = "gevent"   # 采用gevent库,支持异步处理请求,提高吞吐量
bind = "0.0.0.0:80"

测试项目运行

# start:app 中的start为前一步创建的start.py文件名,app为start.py文件中创建的flask app变量名

gunicorn start:app -c gunicorn.conf.py

1.4 打包镜像并上传到docker hub

1.4.1 阿里云ecs部署docker

Install Docker Engine on Ubuntu | Docker Documentation

sudo apt-get remove docker docker-engine docker.io containerd runc

sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg


sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker.io

systemctl enable docker
systemctl start docker
    

1.4.2 配置docker镜像加速

阿里云镜像加速: 容器镜像服务 (aliyun.com)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.js <<-'EOF'
{
    "registry-mirrors": [
        "https://docker.mirrors.ustc.edu.cn",
        "https://registry.docker-cn.com",
        "https://hub-mirror.c.163.com",
        "https://mirror.ccs.tencentyun.com",
        "http://f1361db2.m.daocloud.io"
    ]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

1.4.3 使用Docker封装flask应用

# 生成项目依赖文件,后期安装可使用 pip install -r requirements.txt安装依赖
pip freeze -> requirements.txt
1.4.3.2 创建Dockerfile文件

在项目根目录下创建名为Dockerfile的文件,用于docker镜像构建

FROM python:3.6
WORKDIR /Project/demo

COPY requirements.txt ./
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

COPY . .

CMD ["gunicorn", "start:app", "-c", "./gunicorn.conf.py"]

WORKDIR 为项目要部署到服务器上的路径

CMD 里面的 start 是我们上面写的 python 启动文件名,app 是启动文件里面要启动的应用名(变量名)

1.4.3.3 使用Dockerfile构建镜像
# 在Dockerfile目录下执行
sudo docker build -t "testflask" . # 最后的 点 表示使用当前目录下的Dockerfile文件

docker images # 查看镜像

1.4.4 推送镜像到docker hub

1.4.4.1 注册docker hub账号

Docker Hub

创建private 仓库,假设仓库名称为 ali/flask_server, 其中ali表示用户名,flask_server为repositories名。

1.4.4.2 修改image tag
# 1 查看生成的镜像
docker images 

REPOSITORY      TAG       IMAGE ID       CREATED        SIZE
testflask       latest    cadd2701b704   2 hours ago    998MB
python          3.8       ce9555db0df5   2 months ago   909MB
hello-world     latest    feb5d9fea6a5   5 months ago   13.3kB

# 2 修改tag
docker tag testflask  ali/flask_server:v1

# 3 查看修改结果
docker images 

REPOSITORY      TAG       IMAGE ID       CREATED        SIZE
testflask       latest    cadd2701b704   2 hours ago    998MB
ali/flask   v1        cadd2701b704   2 hours ago    998MB
python          3.8       ce9555db0df5   2 months ago   909MB
hello-world     latest    feb5d9fea6a5   5 months ago   13.3kB


1.4.4.3 push到docker hub
# 登录docker hub
docker login -u username -p

# 推送
docker push ali/flask:v1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值