-
-
Notifications
You must be signed in to change notification settings - Fork 36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
使用 Docker 打造超溜的前端环境 #178
Comments
强行用 docker ... |
何来强行一说,简直不要太好用。 对于我来说,维护几个 NodeJS 项目,分别依赖 MySQL,Postgres,Redis,Mongo,Nginx... 用 Docker 很好的解决了很多问题 |
路过...我有一个疑问...比如说..我司有一台服务器,上面要部署很多很多很多的服务....这些服务有各自的依赖...这个时候假如我们用Docker来部署... |
@Tarhyru 确实如你所说,有很多很多服务的情况下,很有可能是有重复的服务,例如数据库,多个服务都用MySQL。如果各自都搭建自己的数据库,那么很浪费性能。 这时候共通的依赖应该抽离出来作为公共服务,单独一个 |
@axetroy |
正好要找 Docker 相关的资料, 先 star 一波. |
@Tarhyru 比如你服务器,要部署5个java服务,你是想不安装5次 JAVA JDK,是这个意思吗? 打包成镜像就好了呀,在JAVA+JDK镜像包的基础上,再把5个服务的代码,依赖,分别�打包5个镜像。 再服务端部署5个就行了。 |
@axetroy |
虽说我们项目也是前后端不分离(php),但也没你说的那么麻烦啊,sftp idea 自动上传,后端接口 nginx 转发到开发机,静态资源 nginx 转发 webpack,整个开发体验跟前后端分离没什么两样。 |
@huangw1 你这个前端单独调试体验不会好吧...如果你们前端是php顺手做了,自然两说... |
哇塞…… 刚才发现这个博客,真的是厉害…… 完全基于 GH API |
如果我没猜错,楼主应该是咪付的前端... |
6 |
问个问题,统一前端开发环境,如何做到 node_modules 不重复下载和新增依赖后 多人同步? |
前言:
为什么需要 Docker?
在上一家公司,操作系统是自由的,你想用 Windows/Linux/Mac, 只要你用的习惯,能够高效率工作,无所谓什么系统。
然而问题就来了,大家的环境不一样。Unix 系系统基本无太大差别,Windows 就不一样了。
环境的差异会导致踩很多很多坑, 印象比较深刻的就是 sass 编译,在哪个还需要依赖 ruby 的年代,安装 gem 是不顺畅的,windows 格式编码格式不是 utf-8, 导致 sass 文件中有中文编译报错等等。
还有一些诸如文件监听,在 Windows 下需要 fallback,靠轮循监听变化。
在经过一系列的折腾之后,我们就尝试使用 Docker 来解决开发环境统一的问题。
构建一个通用的 Linux 镜像,里面包含了前端开发的基本环境,包括 python,nodejs 等等... 前端只要给定源码文件就行了。就这样暂时统一了开发环境,虽然最后我们统一使用 Unix 系统。
Docker 还有哪些场景
前后端不分离的项目
你作为一个前端,你是如何与 PHP 后端参与开发的?你需要搭建 PHP 环境吗?
如果你是这种开发模式,不是说 low,而是说效率低下。每次修改都要上传,盲人改代码。
所以你需要 Docker,配置好环境,一键启动,一键关闭,各开发人员相互独立,代码通过 git 同步,指向同一个数据库,修改代码立即见效,
F*CK FTP
单页面应用
前后端分离的情况下,单页面渲染一般使用
nginx
, Docker 同样配置 nginx,做静态页渲染和去除难看的#
号(通过 404 重定向只 index.html, 把 404 的控制权,交还给前端)这样你的路由
http://example.com/#/home
变成了http://example.com/home
甚至你可以作反向代理,消除跨域
http://example.com/api
>http://api.server.com
服务端渲染
那么你更需要 Docker, 因为你需要 Node 环境,你需要负载均衡,你需要反向代理等等...
Node 后端
既然是后端,数据库你要吧?nginx 你要吧,Node 你要安装吧?
A 同事项目依赖了 [email protected], 结果你项目依赖 [email protected]. 难道你叫他卸载了重新装一个?
如何应用 Docker
首先你得安装
Docker
和Docker Compose
, 使用Docker Compose
来配置镜像.配置最简单的 Node 环境
一个简单的项目结构如下
运行命令启动
$ docker-compose up Starting example_web_1 ... done Attaching to example_web_1
现在 NodeJs 应用已经跑起来了,试着访问
http://localhost:3000
Node 的依赖包怎么办?
现在我们给项目添加依赖
Koa
,用 Koa 来搭建服务器.这我们需要把
node_modules
和package.json
打包进镜像而官方的 node 镜像
node:8-alpine
是不安装依赖的,需要我们自定义一个镜像创建一个
Dockerfile
修改
docker-compose.yml
此时项目目录
运行命令
服务已运行起来了,访问 3000 试试看吧
如何用 Nginx 反向代理,消除跨域问题
首先得有一个 nginx.conf 配置
此时项目目录
运行命令
访问
localhost:3000
, 返回hello html
访问
localhost:3000/api
, 返回hello koa
解决了跨域,但同时也存在问题,代理之后,应用程序无法获取 IP,需要从 header 的
X-Real-IP
字段获取
最佳部署姿势是怎么样的?
其他还有很多案例需要使用 Docker,特别是开发后端的应用。后端应用依赖 数据库(MySQL, Postgres, Redis...)、服务器(Nginx/Apache),开发语言(如 PHP)。
如果我是一名开发者,接手别人的项目,项目需要安装 PHP, 需要安装 MySQL, Apache, redis, mongo... 最好能提供一个
docker-compose.yml
,否则我不保证我打不死你回到 Node 部署,最佳的姿势:
把编译过后的代码(例如 Typescript>JS)+依赖+配置打包进镜像
然后 push 镜像,最后在服务端部署。其余的配置,尽量都通过
docker-compose.yml
的环境变量去设置做到只需要一个配置文件,就能把完整的项目搭建起来
总结
Docker 到底解决了我们哪些问题?
The text was updated successfully, but these errors were encountered: