美文网首页
docker部署项目实践

docker部署项目实践

作者: 愤愤的有痣青年 | 来源:发表于2019-05-07 15:09 被阅读0次

    项目介绍

    此项目是一个基于ubuntu16.4+python3的flask web项目,使用gunicorn启动,项目运行时需要加载一些动态链接库,并且项目在运行时需要多个后缀为.vpo的授权文件,项目结构如下

    ../web
    ├── app # web应用
    ├── Dockerfile  # 用以构建镜像
    ├── gethid  # 生成设备指纹信息,然后根据生成的指纹信息生成授权文件
    ├── requirements.txt  # python依赖库
    ├── so  # 动态链接库文件夹
    ├── sources.list  # ubuntu国内下载源
    └── start.sh  # 项目启动脚本
    

    项目主要文件说明

    • DockerFile处理流程


      DockerFile
    • DockerFile代码

    FROM ubuntu:16.04
    MAINTAINER panso
    
    # 替换apt-get下载源并安装相关依赖库
    COPY ./sources.list /etc/apt/sources.list
    RUN apt-get update && apt-get install python3.5 -y && apt-get install python3-pip -y && apt-get install vim -y && && apt install tzdata  -y
    
    # 修改系统时间
    RUN rm /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    
    # 安装python依赖库
    COPY ./requirements.txt /home/requirements.txt
    RUN python3 -m pip install -r /home/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    
    #拷贝项目到/home/web目录下
    COPY . /home/web/
    WORKDIR /home/IdPhotoCheckService/
    
    # 配置动态链接库搜索的路径
    ENV LD_LIBRARY_PATH="/home/web/so/"
    
    # 给启动脚本执行权限并启动
    RUN chmod a+x ./start.sh
    CMD "./start.sh"
    
    • start.sh 脚本处理流程图


      start.sh 脚本处理流程图
    • start.sh 代码

    #! /bin/bash
    vpo_array=('m0.vpo' 'm1.vpo')
    
    # 判断vpo是否都存在
    for vpo in "${vpo_array[@]}"
        do
            if [ ! -f "./api_server/$vpo" ];then
                # 判断是否存在/home/vpos目录且该目录下是否有该vpo文件,若有就直接拷贝过去,没有则报错
                if [ -d "/home/vpos" ];then
                    if [ -f "/home/vpos/$vpo" ];then
                        cp /home/vpos/*.vpo ./api_server/
                    else
                        cp gethid /home/vpos
                        cd /home/vpos
                        chmod a+x gethid
                        ./gethid
                        printf  "项目缺少授权文件文件, 已在/home/vpos目录下生成了设备指纹文件temphk.key,请联系XXX公司\n"
                        exit
                    fi
                else
                    printf  "项目无/home/vpos目录,导致无法获取vpo文件或生成凭据,请联系相关技术人员获得支持\n"
                    exit
                fi
            fi
        done
    
    # 授权文件校验通过,即将启动服务器
    exec gunicorn app:app -b 0.0.0.0:8024
    

    项目打包成镜像发布

    1 构建镜像

    docker build -t ubuntu/flask:v1 ./

    执行完成后,可以通过如下命令查看构建的镜像

    sudo docker images
    

    执行结果

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu/flask        v1                  b8a4929de352        4 minutes ago       1.2GB
    ubuntu              16.04               a3551444fc85        10 days ago         119MB
    

    2 导出镜像

    sudo docker save [镜像名称]> [打包后的存储路径]
    [示例]
    sudo docker save ubuntu/flask:v1> /home/docker_images/flask_v1.tar
    

    导入镜像并运行

    1 docker镜像导入

    docker import  镜像文件路径 镜像的名字及标签
    
    • 示例
    docker import  flask_v1.tar ubuntu/flask:v1
    

    2 构建容器

    用步骤2导入的镜像创建容器,创建前最好将旧版本的容器停掉,以防止由于端口占用导致的容器启动失败的问题

    docker run -d -v $path1:/mnt -v $path2:/home/vpos [-v $path3:/home/logs] -p $port:8024 --name $name $imgae
    

    在如上命令中,以$开头的是需要自定义的数据,其对应的含义如下

    参数名 类型 说明 示例
    $path1 PATH 储存结果图的文件夹绝对路径,此文件夹下需要有两个目录,分别是upload(存储上传的图片)和result(存储结果图) /mnt
    $path2 PATH 设备授权文件(vpo)所在的文件夹路径.若有此设备对应的vpo文件,则只需放到此目录下即可.
    若没有,此文件夹可以为空,容器启动后会在此文件夹内生成设备指纹信息并退出,然后可凭此指纹信息联系我们生成授权文件vpo
    /vpos
    $path3 PATH 日志文件存储路径,用以存储web服务器的日志文件,可省选项,若为空,则日志将输出至标准输出流中 /logs
    $port INT 暴露出的端口 7001
    $name STRING 容器名称 flask_v1
    $imgae STRING 镜像名称 ubuntu/flask:v1
    • 示例
    docker run -d -v /mnt:/mnt -v /home/vpos:/home/vpos -v /home/logs:/home/logs  -p 6001:8024 --name flask_v1 ubuntu/flask:v1
    

    查看容器是否正常运行可以通过docker ps 来查看,若容器退出,可以查看其日志输出 dcoker logs -f flask_v1path3所在目录下的日志信息. 若容器是因为缺少vpo文件退出,在将vpo文件放置到path2对应的文件夹内后,再执行docker start flask_v1即可,若因为其他原因退出可联系技术人员.

    4 几个常用的容器命令

    docker stop  <容器名称>    # 停止容器
    docker start <容器名称>    # 启动容器
    docker restart <容器名称>    # 重启容器
    docker exec -it <容器名称> bash   # 进入容器内(容器须处于启动状态)
    

    相关文章

      网友评论

          本文标题:docker部署项目实践

          本文链接:https://www.haomeiwen.com/subject/tymeoqtx.html