Citypos项目的docker化部署实践

原因

为简化部署操做,统一线上环境。在近期迁移服务器时将CityPos项目的服务端使用docker进行了部署。python

使用的docker版本:ce 18.09git

使用docker部署有如下优势:web

  • 便于规范化环境,一样的部署脚本能够在多个项目中充分重复利用
  • 有利于资源的安全,多个依赖组件之间使用docker内网通讯,不对外暴露。
  • 有利于对外的安全:docker内部对宿主机的影响较少。
  • 重启方便:docker-compose restart一键重启
  • 环境统一:不会由于环境差别致使项目没法启动(尤为对系统环境依赖较多的Python/c之类的项目)
  • 相对独立:不会影响宿主机上已经存在的项目
  • 宿主机环境较为干净。

部署脚本

部署的配置使用docker-compose进行编排。主要包括如下镜像:redis

  • redis 缓存服务,配置有密码
  • tomcat:8.5.38-jre8 web服务,将webapps和logs文件夹映射到本地磁盘便于更新及查看日志,并对外映射8080端口以供访问。
  • opencv-python-flask 这个是本地本身使用dockerfile建立的镜像,提供python3, opencv3.3和flask环境。从本地映射服务的python脚本并执行。

其中opencv-python-flask的 镜像脚本以下:spring

FROM jjanzic/docker-python3-opencv:contrib-opencv-3.4.1
MAINTAINER Nature szd <zzbkszd@163.com>

RUN pip install flask
复制代码

能够看到很是简单,在别人的基础上安装了一个flask框架便可。docker

各个服务均在citypos网络下,互相之间直接使用container_name:port便可直接访问。理论上讲能够达到不用管理线上/测试等服务环境问题的目标。数据库

docker-compose.yml文件以下:flask

# 基础docker环境搭建

version: '3'
services:
  # redis 数据库服务
  redis:
    container_name: citypos-redis
    image: redis
    restart: always
    volumes:
      - ./redis.conf:/usr/local/etc/redis/redis.conf
    command:
      redis-server --requirepass ******
    networks:
      - citypos
  # tomcat web服务
  tomcat:
    container_name: citypos-tomcat
    image: tomcat:8.5.38-jre8
    restart: always
    networks:
      - citypos
    volumes:
      - ./webapps:/usr/local/tomcat/webapps
      - ./tomcatlog:/usr/local/tomcat/logs
    ports:
      - 8080:8080
    links:
      - redis:citypos-redis
  # 图片对比服务
  imagesearch:
    container_name: image-search
    image: opencv-python-flask:latest
    restart: always
    volumes:
      - /root/compose/imagesearch:/mnt/
    networks:
      - citypos
    command:
      python /mnt/imgsearch.py   
networks:
  citypos:
复制代码

运维相关

代码更新:

服务器上有拉取maven镜像,由于本地上传较慢,故直接在服务器从git拉取代码并经过docker使用maven编译、复制到webapps目录下进行部署。api

使用docker编译指令以下:缓存

docker run -it --rm --name my-maven-project -v "/root/src/citypos-api":/usr/src/mymaven -v "/root/src/m2":/root/.m2 -w /usr/src/mymaven maven:3.3-jdk-8 mvn clean compile package spring-boot:repackage

以上步骤可使用自动化脚本实现。

服务管理

服务管理的命令就是使用docker-compose命令。

docker-compose up 启动新的容器

docker-compose down 关闭并删除容器

docker-compose start 启动容器,必须已经新建过

docker-compose stop 关闭容器并不删除。

docker-compose restart 以上两个命令二连,重启容器

能够看到运维难度大幅度简化了。

相关文章
相关标签/搜索