前言

最近工作中会遇到这样的一个问题,当有个依赖包更新,或者某些配置需要更新的时候,需要在目前处理的所有系统中一起更新,这样的工作量其实是挺繁琐的。(多个系统配置几乎一致)。所以就想着能够有方法统一这个构建环境,包依赖和webpack配置能够统一处理。

实践过程

  • 第一步:#抽取公共配置作为配置仓库 docker-front
  • 第二步:编写Dockerfile,以node镜像为基础,拉取配置仓库为内容的镜像
  • 第三步:编写docker-compose.yml。定义port,共享文件夹卷,定义启动后的指令操作
  • 第四步:整理业务系统代码。项目目录剩下 src目录(处理业务),config目录 (处理配置)
  • 第五步:docker-compose up启动项目

抽取公共配置作为仓库docker-front

一般来说公共配置如下

  • webpack.base.config.js
  • webpack.dev.config.js
  • webpack.pro.config.js
  • package.json
  • index.ejs

还有一些可能有公共的常量配置等等,可以继续往上添加

编写Dokcerfile

这里docker主要是提供了一个环境,拉取配置仓库代码

FROM node:8.9.3
RUN git clone http://username:[email protected]/docker-front.git
WORKDIR /docker-front

编写docker-compose.yml

yourapp 定义docker-compose名字

prots 定义暴露的端口

volumes 定义了共享的目录

command 定义启动时候执行的指令

version: "3"

services:
  yourapp:
    build: .
    ports:
      - 5000:5000
    # stdin_open: true
    volumes:
      - "./src:/docker-front/src"
      - "./config:/docker-front/config"
    # 这段指令是每次启动都会拉取最新的代码执行npm i再启动
    command: 
      - /bin/sh
      - -c
      - |
        git reset --hard HEAD
        git fetch
        git checkout dev
        git pull
        npm i
        npm start        
    tty: true
    

整理业务系统代码

src 主要是用作映射业务系统的业务代码

config 的作用是用于配置各个业务系统中个性化的配置

比如webpack中独立的配置、index.ejs中的项目名称、配置的项目独立私有的key等等

目前还没有做独立的包的处理。不过有思路就是config中增加_package.json文件,在启动项目的时候增加指令处理package.json,将业务系统的私有配置和公共package.json配置合并。再执行包安装指令

Docker-compose up

通过这个指令可以构建镜像,创建容器和启动容器。如果想要重新构建镜像可以docker-compose build指令处理

更多的操作可以找相关的教程。

Docker统一构建的优势

  • 解决了公共配置在多个系统里重复配置的问题
  • 解决了环境不统一的问题,node版本npm 版本
  • 解决了项目window和Mac 差异性问题
  • 提供给非前端使用的可能性,无需配置简单执行指令即可启动项目

带来的问题也是有的

  • docker占用资源问题,是否构建速度下降?
  • 公共配置管理的问题,需要更严格的处理,不然影响范围比较大