这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战
前端需要知道的CI / CD知识不完全指北(四)
DockerFile
一个简单的配置文件,描述如何构建一个新的image镜像。
注意: 必须是 Dockerfile 这个文件名, 必须在项目的根目录。 如果不是Dockerfile文件名需要加-o指定文件名,不推荐
语法
FROM node:16
WORKDIR /app
COPY . /app
# 构建镜像时, 一般用于做一些系统配置,安装必备的软件。可有多个RUN
RUN XXX
RUN XXX
RUN XXX
# 启动容器时,只能有一个 CMD
CMD xxx
# 环境变量设置
ENV K1=V1
ENV K2=V2
# Docker 虚拟机里, 默认没有各个时区,需要自己在Dockerfile里配置
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
# 设置 NPM 镜像
RUN npm set registry https://registry.npm.taobao.org
RUN npm install
# 启动
CMD echo $SERVER_NAME && echo $AUTHOR_NAME && npm run dev && npx pm2 log # Dockerfile需要阻塞控制台的程序
# 设置环境变量
ENV SERVER_NAME="dev"
ENV AUTHOR_NAME="xujiantong"
# 备注 npm run dev
# cross-env NODE_ENV=dev pm2 start bin/pm2-prd-dev.config.js
构建
docker build -t <name> . # 最后的 `.` 指 Dockerfile 在当前目录
docker images
Node.js 项目示例
1.创建 .dockerignore 忽略掉docker中没有用的文件夹
.git
node_modules
logs
.docker-volumes
__test__
2. 创建 Dockerfile 文件
FROM node:16
WORKDIR /app
COPY . /app
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
# 设置 NPM 镜像
RUN npm set registry https://registry.npm.taobao.org
RUN npm install
# 启动
CMD echo $SERVER_NAME && echo $AUTHOR_NAME && npm run dev && npx pm2 log # Dockerfile需要阻塞控制台的程序
# 设置环境变量
ENV SERVER_NAME="dev"
ENV AUTHOR_NAME="xujiantong"
本地安装 pm2 npm install pm2 --save-dev
或 Dockerfile 中全局安装pm2
测试过程
docker build -t test-server . # 构建 image
docker images
docker run -p 8081:3000 -d --name server1 test-server # 创建容器, 注意端口映射
docker ps
docker logs <container-id> # 需等待构建完成
# 访问 logs: localhost:8081 查看docker logs
docker stop <container-id>
docker rm <container-id>
基于 Docker 我们可以把开发,测试环境,一键部署到任何一台机器上。只要该机器安装了Docker。
有了Docker就有了一切
展望: 弹性扩展
微服务