Debug your app, not your environment.
示例
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
的参数。
常用
# 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"
# 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
里,熟悉哪个用哪个,这样用起来能方便些。
# 想换 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 来真正统一所有人的编码环境的。