• 将把python项目打包成Docker镜像(linux版)


    1.前提

    1.1 安装anconda,并创建虚拟环境,安装python项目所需的包。

    Anconda:https://www.anaconda.com/products/distribution#Downloads

    1.2 打包python项目所需的依赖:

    pip freeze > reauirments.txt
    
    • 1

    1.3 下载python项目所需依赖包到指定文件夹py_pkgs:

    pip download -d py_pkgs -r requirments.txt
    
    • 1

    2.安装Docker

    2.1 查看当前linux系统是否支持docker版本:

    Docker要求CentOS系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本是否支持安账docker。

    >uname -r
    
    • 1

    在这里插入图片描述

    2.2 安装yum工具

    注意:先切换root用户:su root

    yum install -y yum-utils \
    >            device-mapper-persistent-data \
    >            lvm2 --skip-broken
    
    • 1
    • 2
    • 3

    2.3 更新本地镜像源

    2.3.1 设置docker镜像源

    yum-config-manager \
        --add-repo \
        https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
        
    sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
    
    yum makecache fast
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.3.2 安装Docker

    yum install -y docker-ce
    
    • 1

    2.4 查看docker 版本

    docker version
    
    • 1

    在这里插入图片描述

    2.5 先输入:sudo systemctl start docker,再输入:sudo systemctl enable docker

    sudo systemctl start docker
    sudo systemctl enable docker
    
    • 1
    • 2

    在这里插入图片描述

    2.6 再次输入:docker version,出现了client和server就代表安装成功了。

    ![](https://img-blog.csdnimg.cn/bd54309d09eb459a8c526c4d1d7d5921.pn

    2.7 查看docker启动状态:systemctl status docker(如下图即启动成功)

    在这里插入图片描述

    2.8 卸载命令:

    a.查询docker安装过的包:
    yum list installed | grep docker
    
    b.删除安装包:
    yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y
    
    c.删除镜像/容器等:
    rm -rf /var/lib/docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.将python web项目打包成镜像

    3.1 先安装一个基础的镜像,如python3.6

    docker pull silverlogic/python3.6
    
    • 1

    3.2 在当前项目文件目录下,编写gunicorn配置文件gunicorn.conf.py文件

    sudo vim gunicorn.conf.py
    
    • 1

    添加一下代码:

    workers = 5
    worker_class = "gevent"
    bind = "0.0.0.0:8080"
    
    • 1
    • 2
    • 3

    3.3 编写Dockerfile文件

    3.1 创建Dockerfile文件

    sudo vim Dockerfile
    
    • 1

    先借一张图介绍一下 dockerfile:
    在这里插入图片描述

    添加以下代码到Dockerfile文件中:

    FROM python:3.6.2
    MAINTAINER name  name@163.com
    WORKDIR /flask_project
    COPY requirements.txt ./
    RUN pip install  -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    COPY . .
    CMD ["gunicorn", "app_flask:app", "-c", "./gunicorn.conf.py"]
    以下不用添加
    解释一下参数:
    FROM   # 指明你创建的镜像,他的基础镜像是谁
    MAINTAINER  # 维护者信息
    COPY  # 将宿主机的文件cp到创建的镜像当前路径下
    RUN  # 你需要在创建镜像之前,需要执行的命令
    CMD  # 创建容器后执行的第一个命令
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.2 制作docker image

    我这里镜像的名字直接做成flask_demo了

    docker build -t flask_demo:1.0 .
    
    • 1

    在这里插入图片描述

    制作完成了,可以看到还是蛮大的,接下来就是使用它了

    docker image ls -a | grep flask_demo
    docker images | grep flask_demo
    两个命令一样,喜欢用哪一个看你自己啊
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    3.3 使用testflask

    创建:

    docker run -it --name=flask_app -p 5001:8080 flask_demo:1.0
    
    • 1

    在这里插入图片描述

    解释一下参数
    –name # 是给你创建的容器起一个名字,在后续进行容器操作的时候可以直接使用名字,不用在使用id
    -p # 将宿主机的端口映射到容器中

    3.4 查看docker容器内容

    docker ps -a | grep flask_app
    docker container ls -a | grep flask_app
    两个命令一样啊,用哪个都可以
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    再次启动:

    docker container start flask_app
    
    • 1

    在这里插入图片描述

    进入容器中看看:

    docker exec -it flask_app /bin/bash
    
    • 1

    在这里插入图片描述

    3.5 制作成为tar,这样就可以发布到任何一台安装过docker的机器,我这里命名为flask_image.tar用于区别

    docker save -o flask_image.tar flask_demo:1.0
    
    • 1

    在这里插入图片描述

    打开看一下(这个命令是打开当前路径的文件夹)

    nautilus ./
    
    • 1

    可以看到文件是存在的
    在这里插入图片描述

    3.6 载入

    下边这个文件,你可以添加绝对路径来导入,我是由于就在当前路径下,直接这样写了

    docker load --input flask_image.tar
    
    • 1

    是载入成功的,由于我之前的镜像没有删除,这里没有区别开:
    是载入成功的,由于我之前的镜像没有删除,这里没有区别开
    到此,flask项目使用docker就完整完成了。

  • 相关阅读:
    Mybatis的二级缓存 (默认方式)
    数电与非门方波震荡器为什么不起振
    关于content-type的理解
    java内存地址
    主流X86-ARM-RISC-V-MIPS芯片架构分析
    奇淫巧技,CompletableFuture 异步多线程是真的优雅
    Ajax学习:设置CROS响应头实现跨域(跨域资源共享)
    Python批量读取HDF多波段栅格数据并绘制像元直方图
    Impala中replace和translate的用法和区别
    啊?现在初级测试招聘都要求会自动化了?
  • 原文地址:https://blog.csdn.net/sinat_37935727/article/details/125875287