flask项目部署到docker容器操作详解

目录

1、构建一个带有poetry工具的镜像python-poetry

2、将python-poetry镜像推送到本地镜像仓库

3、编写Dockerfile文件部署flask项目到容器中

环境:使用poetry工具管理依赖。python版本3.9+

1、构建一个带有poetry工具的镜像python-poetry

  • 背景:flask项目是通过poetry管理依赖的,所以需要使用带有Python和poetry工具的镜像
  • 目标:构建一个带有poetry工具的镜像python-poetry

步骤:

  • 1、拉取Python最新的镜像文件,最新版本的python镜像中的python版本为3.10,符合poetry需要的python版本

docker pull python

  • 2、启动python镜像容器

docker run -it python /bin/bash

  • 3、apt-get 命令安装 curl 和 python3-venv工具,注意:拉取的python镜像时基于Ubuntu 构建的,所以使用apt-get工具

apt-get update apt-get install curl python3-venv -y

  • 4、安装poetry工具

curl -sSL https://install.python-poetry.org | python3 -

  • 5、配置poetry环境变量,注:poetry安装好之后,需要将poetry路径配置到环境变量中
    • 注意:在使用该镜像为基础编写Dockerfile文件的时候,可能会出现poetry路径没有配置到环境变量中的情况,所以需要在Dockerfile文件中添加poetry的环境变量

ENV PATH=/root/.local/bin:$PATH

echo 'export PATH="/root/.local/bin:$PATH"' >> ~/.bashrc source ~/.bashrc

  • 6、验证poetry安装是否成功

poetry --version

  • 7、构建镜像python-poetry

docker commit -m="poetry add" -a="zhangsan" imageID python-poetry:1.0.0

参数说明:

-m:表示镜像描述

-a:表示镜像作者

imageID:表示基于构建的容器id ; 使用docker ps 查看python的容器id

2、将python-poetry镜像推送到本地镜像仓库

  • 背景:将python-poetry镜像推送到本地仓库,以便于后面使用Dockerfile构建镜像时可以从本地镜像仓库拉取python-poetry镜像
  • 目标:创建本地私有库并将python-poetry镜像推送到本地镜像仓库

步骤:

  • 1、下载镜像Docker Registry

docker pull registry

  • 2、运行私有库Registry
    • 相当于本地有个私有Docker hub
    • 默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调

docker run -d -p 5000:5000 -v /liujun/myregistry/:/tmp/registry --privileged=true registry

  • 3、curl验证私服库上有什么镜像

curl -XGET http://127.0.0.1:5000/v2/_catalog

  • 4、修改配置文件使之支持http
    • 说明:docker默认不允许http方式推送镜像,通过配置选项来取消这个限制。修改完后如果不生效,建议重启docker。
    • 1、修改/etc/docker/daemon.json配置文件

vim /etc/docker/daemon.json         

  •  
    • 2、新增以下内容
      • 特别注意:2个配置中间有个逗号 ','别漏了,这个配置是json格式

"insecure-registries": ["127.0.0.1:5000"]

  • 5、将新镜像python-poetry:1.0.0修改符合私服规范的Tag
    • 注意:host也可以使用本机真实的IP地址,如:192.168.10.122

docker tag 镜像:Tag Host:Port/Repository:Tag

示例: docker tag python-poetry:1.0.0 127.0.0.1:5000/python-poetry:1.0.0

  • 6、推送本地镜像python-poetry到私服库

docker push 127.0.0.1:5000/python-poetry:1.0.0

  • 7、使用crul验证是否推送成功

curl -XGET http://127.0.0.1:5000/v2/_catalog

curl -XGET http://192.168.10.122:5000/v2/_catalog

  • 8、拉取镜像到本地【如果需要】

docker pull 127.0.0.1:5000/python-poetry:1.0.0

3、编写Dockerfile文件部署flask项目到容器中

  • 背景:如果需要将项目集成到CI CD自动化部署中就需要编辑Dockerfile文件构建服务镜像容器
  • 目标:编写Dockerfile文件,并将flask项目部署到容器中

步骤:

  • 1、编写Dockerfile文件,文件内容如下:

# 从本地仓库拉取镜像
FROM 127.0.0.1:5000/python-poetry:1.0.0 

# 镜像维护者的姓名和邮箱地址
MAINTAINER  zhangsan<zhangsan@qq.com>

# 将poetry的路径添加到PATH中
ENV PATH=/root/.local/bin:$PATH
ENV MYPATH /home

# 定义一个工作目录,即进入容器后当前所在的目录
WORKDIR $MYPATH


# 日志记录持久保存到主机中 
VOLUME ["/docker/visProject/visDataCreate/log/operation_logs_dir/","/home/visDataCreate/log/operation_logs_dir/"]

# 将项目visDataCreate添加工作路径/home下并自动解包
ADD visDataCreate.tar /home

# 在visDataCreate目录下执行虚拟环境的创建和依赖包的安装
RUN cd visDataCreate && poetry install

# 对外暴露5566端口
EXPOSE 5566

# 启动容器时,切换到项目目录下,使用poetry run执行会先自动激活虚拟环境然后再执行
CMD ["/bin/bash", "-c", "cd $MYPATH/visDataCreate/ && poetry run python app.py"]

  • 2、构建服务镜像
    • 1、将flask的项目的tar文件和Dockerfile文件放在同一目录

    • 2、执行Dockerfile构建新的镜像
      • 注意:命令最后还有个 .

docker build -t vis-basic-data-server:1.0 .

  • 3、启动容器(启动flask项目)

# 交互式启动,可以在控制台到看到日志信息

docker run -p 5566:5566 vis-basic-data-server:1.0

# 后台启动, 非交互式启动

docker run -d -p vis-basic-data-server:1.0

# 挂载容器卷启动命令

 docker run --privileged=true  -v /docker/visProject/visDataCreate/log/operation_logs_dir/:/home/visDataCreate/log/operation_logs_dir/  -p 5566:5566 vis-basic-data-server:1.0

参数 --privileged=true作用:扩大容器的权限解决挂载目录没有权限的问题,也即 使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。

  • 4、使用命令查看容器卷是否挂载成功

docker inspect 容器ID

  • 5、服务启动后验证服务是否启动成功,在浏览器中输入对应的url地址,查看是否可以成功访问。如:http://192.168.10.122:5566/index

部署flask项目到docker容器中不能访问的问题_MY测试之道的博客-CSDN博客

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值