Docker 用作编码环境 | LIXI.FUN
0%

Docker 用作编码环境

Debug your app, not your environment.

示例

1
2
3
4
5
6
7
docker run -it \
--rm \
-v `pwd`:/app \
-w /app \
-p 80:80 \
node:14.15.4 \
sh -c "npm install && npm run dev"

参数说明

命令 含义
-it 启动一个伪终端以交互模式运行容器
–rm 即用即抛,用完删除容器
-v 映射目录,通常把代码目录映射到容器工作目录中
-w 指定容器工作目录
-p 本地端口:容器端口 的映射
sh -c 容器启动后执行的脚本,可以是双引号引起来命令字符串,也可以是映射在工作目录里的某个脚本文件

注意

sh -c 后面如果是多条命令字符串,一定要用英文双引号包裹,如:"命令1 && 命令2" ,如果不包裹,命令1 && 命令2 则只有 命令1 在容器中执行,命令2 在宿主机执行,原因 && 连接的命令相当于 docker run命令2命令1 只是作为 sh -c 的参数。

常用

1
2
# install 
docker run -it --rm -v `pwd`:/app -w /app node:14.15.4 sh -c "npm config set registry https://registry.npm.taobao.org && npm install"
1
2
# run dev
docker run -it --rm -v `pwd`:/app -w /app -p 80:80 node:14.15.4 sh -c "npm run dev"

上面的内容可以写到 package.json 或者 Makefile 里,熟悉哪个用哪个,这样用起来能方便些。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 想换 node 版本了直接改这里就可以了
# 如果用的 package.json 也可以设置个变量,本地 npm 仅作为调用 docker 的入口
_NODE_VERSION=14.15.4

docker-install:
@docker run -it --rm -v `pwd`:/app -w /app node:$(_NODE_VERSION) sh -c "npm config set registry https://registry.npm.taobao.org && npm install"

docker-run-dev:
@docker run -it --rm -v `pwd`:/app -w /app -p 80:80 node:$(_NODE_VERSION) sh -c "npm run dev"

docker-build:
@docker run -it --rm -v `pwd`:/app -w /app node:$(_NODE_VERSION) sh -c "npm run build"

docker-test:
@docker run -it --rm -v `pwd`:/app -w /app node:$(_NODE_VERSION) sh -c "npm run test"

注意 Makefile 中的缩进不能用空格代替

使用解释型编程语言,比如 python 和 nodejs 这类在编码阶段还是比较容易使用 docker 来真正统一所有人的编码环境的。

觉得有收获就鼓励下作者吧