Docker 构建统一的前端开发环境

简介:
1

往事

15年刚来运满满,那个时候的前端团队还只有2个人,还没有用到打包的相关工具,我们重构了前端的开发流程,引入了vue做基础开发框架,使用了fis3做项目打包,由于项目快速迭代,公共库的增加,我们引入了webpack,配合npm进行基础库的拆分,方便维护和管理。同时也带来了一个新的问题,那就是前端开发环境越来越复杂。

记得以前一个前端开发,那时候号称一个记事本就能写html。现在随着项目复杂度提高,你需要安装vscode,node,webpack等等为了开发,打包等一系列工具。一般新来的员工我们就会按照如下4步骤安装相关环境。感受下

1:下载node安装
// 基础库
npm install yarn -g 
yarn global add nrm 
nrm use taobao
yarn global add cooking-cli@1.5.3 
yarn global add rmdir
yarn global add cross-env
yarn global add rimraf
cooking import autoprefixer
cooking import less
cooking import lint
cooking import vue
cooking import vue2 
//内部打包上传发布工具
nrm add _131 http://xxx.xxx.xxx.xxx:4873
nrm use _131
yarn global add ymm_build 
// 老的fis3项目依赖包
yarn global add fis3@3.4.25
yarn global add fis3-hook-module@1.2.2
yarn global add fis3-hook-relative@1.0.7
yarn global add fis3-parser-less-2.x@0.1.4
yarn global add fis3-postpackager-loader@1.3.19

2:clone项目代码
3:yarn install 安装项目依赖
4:npm run dev运行开发项目
复制代码

刚开始团队规模小。新入成员速度也不快。帮助新员工进来安装下环境还能促进沟通,一切感觉都是挺好的。就这样过了一年多。

随着人越来越多,团队成长速度越来越快,每位新进入的同学都要这样让老司机带着撸一次,原来快乐的事次数多了也就麻木了,要命的还有进来的人安装环境的时间不一样。导致有些全局的工具包是有小版本差异的。这在新进入的员工有时候碰到的一些莫名其妙的问题,最后查下来好多都是环境不统一导致的。这才开始慢慢重视起来。以前npm是没有锁版本机制的。特别是一些全局的工具库,每个人都有自己的一套,线上环境的打包机器上也有一套。不少时候开发是好的,线上打包发布的时候会出现和预期不一样的情况。痛的次数多了。

思考如何能够统一前端团队的开发环境。下面上干货

使用

docker介绍

百度百科上的介绍: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

  1. dockerClient客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. DockerContainer容器

一个命令就用到了上面4个部分,这个命令也是后面我们最常用的。

docker run -v "$(PWD)":/data -p 8000:8000 harbor.ymmoa.com/h5/ymmbaseup npm run dev
复制代码

通过dockerclient 发送run指令到 dockerDaemon,dockerDaemon 通过harbor.ymmoa.com/h5/ymmbaseup镜像创建了一个容器去运行 npm run dev的命令。容器暴露了 8000端口,并关联了$(PWD)(本地目录)到容器里面的/data 目录

这次docker你可以简单理解为 他可以把 linux+node+npm装的依赖包 打包成一个镜像,然后其他电脑安装docker后,可以快速下载这个镜像到电脑中进行使用,如何使用我们后面说。再简单点,你就把你个docker打包好的镜像当做一个应用程序,每个电脑都可以下载下来然后运行他。 先这么理解吧,如果觉得我说的不够清楚的可以找度娘。

docker安装

推荐使用阿里云做加速 https://dev.aliyun.com/search.html

按照上面的方法安装好就行,加速配置好,不然下载镜像非常慢。安装细节就自行百度了。docker制作镜像创建一个Dockerfile文件。
新建一个目录,并在里面创建Dockerfile文件。内容如下
复制代码
## 指定这个镜像的基础是什么,我们选择了node: 8.9.3这个版本作为基础镜像
FROM node:8.9.3

MAINTAINER stoneship stoneship <258137678@qq.com>

##安装node相关依赖
RUN \
npm install yarn -g \
yarn global add nrm && \
nrm use taobao &&\
yarn global add vue-cli &&\
yarn global add cross-env

## 安装nginx ## 安装数据库... ## 创建一个目录
RUN mkdir /data
## 指定命令运行的目录
WORKDIR /data
复制代码

特别说明的是,每条run指令在当前基础镜像执行,并且提交新镜像。当命令比较长时,可以使用“/”换行。这里这个demo里面我们就打包了些node依赖的工具,你可以自己添加自己的 run 命令达到你环境需要依赖。

build镜像

在Dockerfile目录运行下面的build命令, -t 参数指定了 创建好的镜像的名称

docker build -t dockerdemo .
复制代码

build成功后可以通过下面命令查询你的镜像列表

docker images
复制代码
上传到服务器

这个时候打包好的镜像只是在你的电脑上。如果需要别人也能用到这个镜像最方便的是上传你的镜像到服务器。通过下面命令进行上传

docker push dockerdemo:latest
复制代码
使用以及打包好的镜像

我们在dockerdemo镜像里面打包了 vue-cli ,下面我们尝试通过deckerdemo镜像里面的 vue-cli来创建一个项目,注意有些网络慢的。通过 vue init webpack-simple my-project 下载模板项目可能会失败。这个只做演示说明如何使用docker去运行相关命令。你可以尝试运行其他命令。

docker run -v "$(PWD)":/data dockerdemo vue init webpack-simple my-project
复制代码

简单解释下:上面命令表示docker通过dockerdemo镜像创建了一个容器,把当前目录关联到了容器的/data目录,并在目录中运行 vue init webpack-simple my-project 命令,同样你可以运行其他命令。

改造已有项目进行适配

有了自己项目统一的环境镜像后,也知道如何用docker来运行命令后,原来的项目开发打包通过 npm run 的。现在可用通过 docker来运行。命令入下

docker run -v "$(PWD)":/data dockerdemo npm run dev
docker run -v "$(PWD)":/data dockerdemo npm run dist 
....
复制代码

对这些命令可以结合makefile 或者 .bat 文件进行整合。现在运满满前端项目对 makefile进行了调整。如下可以进行参考

1 1

现在我们的项目打包的命令由原来的 npm run build_dist 变成了 make build_dist(win 上是 Makefile.bat build_dist),简单的改变却是换了另外的docker容器进行打包,环境统一了。通过docker的环境结构如下图。可以感受下

1

总结

经过使用docker构建统一的前端开发环境后,新来的人安装环境的步骤就变成如下3步,并且不会出现开发环境版本不同的问题,感受下。

  1. 安装docker
  2. clone代码,安装项目依赖
  3. 然后直接通过docker容器运行项目或者打包项目

原文发布时间:2018-06-02

原文作者:运满满前端团队
本文来源 掘金如需转载请紧急联系作者
相关文章
|
15天前
|
编解码 前端开发 JavaScript
构建高效响应式Web界面:现代前端框架的比较
【4月更文挑战第9天】在移动设备和多样屏幕尺寸盛行的时代,构建能够适应不同视口的响应式Web界面变得至关重要。本文深入探讨了几种流行的前端框架——Bootstrap、Foundation和Tailwind CSS,分析它们在创建响应式设计中的优势与局限。通过对比这些框架的栅格系统、组件库和定制化能力,开发者可以更好地理解如何选择合适的工具来优化前端开发流程,并最终实现高性能、跨平台兼容的用户界面。
|
16天前
|
前端开发 JavaScript 关系型数据库
从前端到后端:构建现代化Web应用的技术探索
在当今互联网时代,Web应用的开发已成为了各行各业不可或缺的一部分。从前端到后端,这篇文章将带你深入探索如何构建现代化的Web应用。我们将介绍多种技术,包括前端开发、后端开发以及各种编程语言(如Java、Python、C、PHP、Go)和数据库,帮助你了解如何利用这些技术构建出高效、安全和可扩展的Web应用。
|
1月前
|
存储 运维 安全
构建高效自动化运维体系:Ansible与Docker的完美结合
【2月更文挑战第31天】 随着云计算和微服务架构的兴起,自动化运维成为保障系统稳定性和提升部署效率的关键手段。本文将详细探讨如何通过Ansible和Docker的结合来构建一个高效、可靠且易于管理的自动化运维体系。首先,介绍自动化运维的必要性及其在现代IT基础设施中的作用;然后,分别阐述Ansible和Docker的技术特点及优势;最后,提供一个基于Ansible和Docker结合使用的实践案例,以及实施过程中遇到的挑战和解决方案。
|
1月前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【2月更文挑战第30天】 在当今快速发展的云计算时代,传统的IT运维模式已难以满足业务的敏捷性和稳定性需求。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理工具构建一个高效、可靠的自动化运维体系。文章首先概述了容器化技术和微服务架构的基本概念,随后详细阐述了基于Docker的应用打包、部署流程,以及Kubernetes在自动化部署、扩展和管理容器化应用中的关键作用。最后,文中通过案例分析,展示了如何在实际场景中利用这些技术优化运维流程,提高系统的整体效率和可靠性。
|
1月前
|
运维 安全 网络安全
构建高效自动化运维体系:Ansible与Docker的完美融合
【2月更文挑战第30天】在当今快速迭代和持续部署的软件发展环境中,自动化运维成为确保效率和稳定性的关键。本文将探讨如何通过结合Ansible和Docker技术,构建一个高效的自动化运维体系。我们将分析Ansible的配置管理功能和Docker容器化的优势,并展示它们如何协同工作以简化部署流程,增强应用的可移植性,并提供一致性的系统环境。此外,文章还将介绍一些最佳实践,帮助读者在真实环境中实现这一整合方案。
|
23天前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
93 0
|
7天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
12 0
|
20天前
|
jenkins 测试技术 持续交付
软件测试|docker搭建Jenkins+Python+allure自动化测试环境
通过以上步骤,你可以在Docker中搭建起Jenkins自动化测试环境,实现Python测试的自动化执行和Allure报告生成。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
39 6
|
26天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的最佳实践
在现代云计算环境中,自动化运维成为保障系统稳定性与提升效率的关键。本文深入探讨了如何利用Docker容器化技术和Kubernetes容器编排工具构建一个高效、可靠的自动化运维体系。文中不仅介绍了相关的技术原理,还结合具体案例分析了实施过程中的常见问题及解决方案,为读者提供了一套行之有效的最佳实践指南。
|
28天前
|
前端开发 JavaScript NoSQL
从前端到后端:构建全栈应用的技术挑战与解决方案
在当今互联网时代,全栈开发成为越来越受欢迎的技术趋势。本文将深入探讨从前端到后端的全栈开发过程中所面临的技术挑战,并提出相应的解决方案,涵盖前端框架选择、后端技术架构、数据库设计以及跨平台兼容性等关键问题。