以前总觉得 Docker 是后端和运维搞的东西,前端也就是扔个静态资源包(dist)上服务器完事。但后来做的项目越来越杂,老是遇到测试环境和线上环境不一致导致跑不起来的问题,索性学着用 Docker 把前端也打包了。
这里简单整理一点前端常用的 Docker 操作,全当个备忘录。
1. 最基础的几个概念
说白了,其实就这三个词绕来绕去:
- 镜像(Image):你可以把它当成是个装好系统和软件的“安装包”。
- 容器(Container):把镜像跑起来,它就变成了一个“容器”,相当于一个轻量级的虚拟机。
- Dockerfile:自己写的一个配置脚本,告诉电脑怎么去一步步打包出这个镜像。
2. 常用命令备忘
平时用得最多的无非就是查、启、停、删。
1 | # 拉取别人做好的镜像 |
3. 前端平时怎么写 Dockerfile
一般单页应用(Vue/React),最稳的办法就是搞分步构建。先用 Node 打包出静态文件,再丢给 Nginx 提供服务。
1 | # 第一步:找个有 node 的环境做打包 |
对应的 nginx.conf 顺手记一下,做单页路由刷新不 404 全靠它:
1 | server { |
4. 前后端一起跑:Docker Compose
如果还有个 Node.js 后端,外加一个 MongoDB 数据库,总不能一个个敲命令跑。搞个 docker-compose.yml 比较实在。
1 | version: '3.8' |
写好后,在目录下敲一句 docker-compose up -d,全都跑起来了。想关掉就 docker-compose down,挺无脑的。
5. 几个小坑
- **别忘了加
.dockerignore**:跟 Git 一样,千万记得把node_modules屏蔽掉,不然打包的时候把本地几十个 G 的包也拷进去,慢得让人怀疑人生。 - 尽量用
alpine结尾的镜像:正常的 node 镜像动不动就快一个 G,换成 alpine 版本可能就一两百兆。 - 留意层级缓存:写 Dockerfile 的时候,把不常变的命令放前面(比如拷贝
package.json),常变的(比如拷贝源码)放后面,下次打包能快不少。
偶尔折腾一下,会发现用 Docker 统一部署环境后,”在我电脑上好好的怎么到服务器就挂了”这种事确实少了不少。
评论加载中…