使用docker构建本地开发环境

v2ex做了点讨论

https://www.v2ex.com/t/661334#reply0

最近在研究 remote development 突然想到可以用docker构建本地开发环境,而且优势还挺多的。
优势:

  1. 组内成员的开发环境一致
  2. 环境为linux,解决编译时大小写问题,以及可以提供类似生产环境的体验
  3. node-sass 等需要配置的环境在 dockerfile 内定义好,甚至可能需要的 python 环境也能提供
  4. 某些没有梯子的小伙伴下载依赖比较困难,需要设置变量,这里可以提前做好

劣势:

  1. 需要额外的内存开销,对低配机器不友好
  2. npm 命令需要进入容器内执行

这是目前看到的一些优劣势,总体来说收益比较高。
vscode等编辑器依旧打开宿主机的项目目录进行开发。

搭建

以下文件在我的 github 有提供

https://github.com/DougFlands/k8s-config/front-development

dockerfile

构建镜像时注入环境,实测 alpine 镜像由于无 python环境,且本地开发使用并不需要特别在意 image 大小,所以直接使用 node 镜像为基础构建。
构建命令 docker build -t node-front ./ -f ./Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
FROM node

USER root

WORKDIR /data

# node-sass 注意版本号
# 三种方式,镜像内下载
# RUN wget https://github.com/sass/node-sass/releases/download/v4.9.0/win32-x64-46_binding.node

# 先下载好然后复制到镜像内
COPY ./image /data

RUN set SASS_BINARY_PATH=/data/win32-x64-46_binding.node

# 设置从淘宝源下载
# RUN yarn config set sass_binary_site=https://npm.taobao.org/mirrors/node-sass/

RUN yarn config set registry https://registry.npm.taobao.org

# 由于没有服务,需要让容器不退出
CMD exec /bin/sh -c "trap : TERM INT; (while true; do sleep 1000; done) & wait"

docker-compose

目录映射修改一下,或者使用命令直接跑
docker run -d -p 8080:8080 -v e:/Coding/vue:/data/code node-front

1
2
3
4
5
6
7
8
version: "3"
services:
forent:
image: node-front
ports:
- 8080:8080
volumes:
- "e:/Coding/vue:/data/code"

容器内操作

  • 进入容器 docker exec -it xx /bin/bash
  • cd 到项目目录,yarn,然后跑起来即可