docker部署项目

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

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

项目主要文件说明

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 代码

#! /bin/bash
vpo_array=('m0.vpo' 'm1.vpo')# 判断vpo是否都存在
for vpo in "${vpo_array[@]}"doif [ ! -f "./api_server/$vpo" ];then# 判断是否存在/home/vpos目录且该目录下是否有该vpo文件,若有就直接拷贝过去,没有则报错if [ -d "/home/vpos" ];thenif [ -f "/home/vpos/$vpo" ];thencp /home/vpos/*.vpo ./api_server/elsecp gethid /home/vposcd /home/vposchmod a+x gethid./gethidprintf  "项目缺少授权文件文件, 已在/home/vpos目录下生成了设备指纹文件temphk.key,请联系XXX公司\n"exitfielseprintf  "项目无/home/vpos目录,导致无法获取vpo文件或生成凭据,请联系相关技术人员获得支持\n"exitfifidone# 授权文件校验通过,即将启动服务器
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
  • 示例
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_v1 和path3所在目录下的信息,若缺少,则放置在path2,再执行docker start flask_v1即可,若因为其他原因退出可联系技术人员.

4 几个常用的容器命令

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

参考链接:https://www.jianshu.com/p/4539e3da9290

(四)docker部署项目相关推荐

  1. Docker系列 四.Docker部署SpringBoot

    四.Docker部署SpringBoot 环境&工具: 阿里云轻量级服务器.CentOS 7系统.FinalShell(其他连接客户端也可以).IDEA 1. 创建springboot项目 这 ...

  2. 【7】idea集成docker部署项目

    [7]idea集成docker部署项目 一.修改docker配置 1.1 修改服务器docker.service服务信息 允许其他主机远程访问服务器的docker vim /usr/lib/syste ...

  3. IDE工具(45) idea使用Docker部署项目到服务器的全过程

    一.前言 温馨小提示: 案例源码demo放文章最后了 基本环境 idea CentOS7.3服务器 docker springboot项目 二.服务器配置docker远程连接 可参考小编的另外一篇文章 ...

  4. docker部署项目自动化脚本

    docker部署项目脚本,脚本会完成容器停止,删除,镜像删除,镜像构造,运行容器等一系列操作 该脚本配合jenkins使用,真的舒服 #!/bin/bash echo "开始执行脚本&quo ...

  5. Spring Boot细节挖掘(Docker部署项目)

    如今 Docker 的使用已经非常普遍,特别是在一线互联网公司,使用 Docker 技术可以帮助企业快速水平扩展服务,从而达到弹性部署业务的能力.在云服务概念兴起之后,Docker 的使用场景和范围进 ...

  6. docker部署项目流程-基于若依系统(vue+springboot)

    背景: 工作中使用了若依系统开发了项目,后来需要部署到linux的测试环境中,选择了docker方式部署.针对前台vue后台springboot的docker部署流程,在这里记录一下,有需要的朋友可以 ...

  7. 使用docker部署项目程序

    一.安装docker程序 # 1.yum 包更新到最新 yum update # 2.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapp ...

  8. docker部署项目 dockerfile 实战 SpringBoot、flask

    1 SpringBoot微服务打包Docker镜像 1.1 构建springboot项目 package com.example.springboot.demo;import org.springfr ...

  9. docker部署项目 入门版

    1 通用 1.1 权限 开启挂载目录权限 #开启目录权限 chmod a+rwx /usr/local/test#开启docker挂载权限 chmod a+rw /var/run/docker.soc ...

最新文章

  1. 康托展开(Cantor expansion)
  2. java 调用父类的变量_java创建子类对象设置并调用父类的变量操作
  3. ​内核调试技巧--systemtap定位丢包原因
  4. SCSI、FC、iSCSI三大协议概述
  5. 【Python CheckiO 题解】The Warriors
  6. 实战 SQL Server 2008 数据库误删除数据的恢复 (转)
  7. c语言中O空字符,OC语言中字符串的使用
  8. 如何查看linux服务器的白名单,linux服务器iptables防火墙白名单添加方式
  9. 计算机网络实验五静态路由与RIP协议,实验锐捷实训8-1--配置静态路由和rip协议...
  10. Weka开发[8]-ID3源码介绍
  11. docker安装sentinel的超简单步骤
  12. 前端每日实战:47# 视频演示如何用纯 CSS 创作一个蝴蝶标本展示框
  13. 如何选择配置管理工具
  14. ps—图层、(移动工具中)对齐
  15. n维空间被m个n-1维的“刀”最多切出多少块
  16. 常见竖屏设备屏幕宽高比
  17. 11091 最优自然数分解问题
  18. 如何用cmd链接linux,如何在Windows cmd 下使用linux的命令
  19. 如何使用 COMSOL 进行电热分析?
  20. DNS服务器故障纠错

热门文章

  1. Excel表格模板:主营收入利润表下载
  2. 将搜狗浏览器的收藏夹导入到IE
  3. L2-030 冰岛人 (25 分)(unordered_map)
  4. 远程协作与多方会议工具TeamViewer的使用
  5. 计算机模拟双缝干涉实验报告,杨氏双缝干涉实验参考报告.doc
  6. VS2019移动.sln方案文件
  7. MATLAB简单三维曲面的绘制
  8. 动手学深度学习——卷积层里的填充和步幅
  9. 微信公众号迁移:办理公证书时如何扫脸验证?
  10. PTA 考试座位号(C语言)(团体程序设计天梯赛)