前端需要知道的CI / CD知识不完全指北(四)

308 阅读2分钟

这是我参与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就有了一切

展望: 弹性扩展 微服务