docker越来越受欢迎。可以方便灵活的进行环境隔离,扩容,方便运维管理。也更方便开发者开发、测试和部署。最重要的是,当你面对一个不熟悉的项目时,你可以跟着Dockerfile甚至阅读文档(文档不一定完整,也不一定都是正确的),你可以很快让它在本地运行起来。现在我强调devops的概念。我把devops这五个字放在电脑桌面上,学了一天。突然之间,devops的意思就是写一个Dockerfile来运行应用(开玩笑的,下面是如何使用Docker部署前端应用,千里之行,始于足下。一步之遥的意思就是先让它跑起来原文地址:如何使用Docker高效部署前端系列文章:当我有云服务器的时候,我做了什么?如果能帮到你,可以帮我在shfshanyue/上点个starop-note让它先跑起来首先简单介绍一个典型的前端应用部署流程npminstall,安装依赖npmrunbuild,编译,打包,生成静态资源servicestaticresources介绍完部署流程,简单写下aDockerfileFROMnode:alpine#代表生产环境ENVPROJECT_ENVproduction#很多包会根据这个环境变量做出不同的行为#另外webpack中打包也会根据这个环境变量进行优化,但是create-react-app会打包时把环境变量写死ENVNODE_ENVproductionWORKDIR/codeADD./codeRUNnpminstall&&npmrunbuild&&npminstall-ghttp-serverEXPOSE80CMDhttp-server./public-p80现在前端服务运行起来了。然后您可以完成部署的其他阶段。总的来说,下面就变成了运维的工作。然而,扩大你的知识边界总是对的。使用nginx或traefik作为反向代理,使用kubernetes或compose进行编排。在使用gitlabci或者droneci做CI/CD的时候,镜像有两个问题,导致每次部署的时间很长,不利于产品的快速交付。构建映像时间太长。buildimagesize太大,dependencies和devDependencies1G+卢晓峰说,如果一个前端程序员每天工作八小时,至少要浪费两个小时。npminstall一个小时,npmrunbuild另一个小时。对于每次部署,如果能减少无用包的下载,就可以节省大量的镜像构建时间。eslint、mocha、chai等代码风格测试模块可以放在devDependencies中。使用npminstall--production在生产中安装包。两者的区别可以参考文档:https://docs.npmjs.com/files/...FROMnode:alpineENVPROJECT_ENVproductionENVNODE_ENVproductionWORKDIR/codeADD。/codeRUNnpminstall--production&&npmrunbuild&&npminstall-ghttp-serverEXPOSE80CMDhttp-server./public-p80似乎快了一点。我们注意到package.json与项目的源文件相比相对稳定。如果没有新的安装包下载,再次构建镜像时无需重新安装。然后你可以在npminstall上节省一半的时间。使用镜像缓存对于ADD,如果需要添加的内容没有变化,可以使用缓存。把package.json和源文件分开写镜像是个不错的选择。目前如果没有新的安装包更新,可以节省一半的时间FROMnode:alpineENVPROJECT_ENVproductionENVNODE_ENVproduction#http-server也可以不改RUNnpminstall-ghttp-serverWORKDIR/codeADD包使用缓存。json/codeRUNnpminstall--productionADD./codeRUNnpmrunbuildEXPOSE80CMDhttp-server./public-p80使用缓存的细节比较多,需要特别注意,比如RUN的缓存gitclone
