Docker构建node镜像
2025年1月12日
为什么要用docker装node
node经常有多版本需求,某些特殊项目还容易遇到各种坑。尤其是文件夹繁多问题,对于我来说感觉很烦躁。我认为放在docker里能解决所有问题,这对后来接手的人也友好。
构建脚本
- 创建一个目录,放入
start.sh和Dockerfile
start.sh 为:
#!/bin/sh
if [ -d "$1" ]; then
cd "$1"
fi
shift
command="$@"
eval $commandDockerfile 为: (此处以 node16版本举例,alpine、node、npm、pnpm都需要指定版本。 若构建最新的,去掉所有版本号。 例: apk add nodejs)
FROM alpine:3.16
# 自定义版本号在 https://pkgs.alpinelinux.org/packages 搜索nodejs>和npm
RUN apk add nodejs=16.20.2-r0 && \
apk add npm=8.10.0-r0 && \
npm install -g pnpm@latest-8
COPY start.sh /root/start.sh
RUN chmod +x /root/start.sh- 构建镜像
docker build -t node:16 . - 运行
docker run -itd -p 8080-8085:8080-8085 -v 代码目录:代码目录 --name=node16 node:16
设置环境变量
此时如果使用node需要进入容器,命令为 docker exec -it node16 /root/start.sh $(pwd) npm -v 过于冗长,增加环境变量解决。
alias node='docker exec -it node16 /root/start.sh $(pwd) node'
alias npm='docker exec -it node16 /root/start.sh $(pwd) npm'
alias pnpm='docker exec -it node16 /root/start.sh $(pwd) pnpm'