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
| 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
| 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_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 来真正统一所有人的编码环境的。