kd-cloud-web / Blog

一群人, 关于前端, 做一些有趣的事儿
13 stars 1 forks source link

docker打包前端镜像总结 #58

Open mhfe123 opened 3 years ago

mhfe123 commented 3 years ago

背景

因为项目需要,现在需要前端单独打包构建上线,因为本身产品是一个k8s管理平台,有自研的一套CI/CD系统,所以为了配合自己的产品使用,总结有以下几个需求点:

制作镜像

环境准备

首先准备一个可以使用docker的Linux系统环境,自己接触Linux系统比较少,所以这里费了一点功夫,稍微总结一下吧,初步想法是在一台虚机上通过git的方式把基础配置文件拉过来,然后通过docker打包成一个基础镜像。

遇到的问题:

git问题搞定以后就是安装docker

#查看你当前的内核版本
uname -r

#安装 Docker
yum -y install docker

#查看Docker版本
docker version

#启动 Docker 后台服务
service docker start

制作镜像

环境问题搞定以后就开始正式制作镜像了

基础文件配置好以后,把代码提交到git,在通过git clone把我们的基础文件下载到我们的虚拟机中,当然有其他的更好方式也可以

当然现在这个镜像是还不能用的,这个只能作为我们自研的CI/CD构建环境的基础镜像,现在我们已经打包好了镜像,需要把它推到自己的镜像仓库去

# 标记本地镜像,将其归入某一仓库。docker tag webimage www.xx.com/xx/webimage:v1
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
# 推送镜像到仓库 docker push webimage www.xx.com/xx/webimage:v1
docker push [OPTIONS] NAME[:TAG]

CI/CD配置

现在我们基础的构建环境有了,下一步是构建代码的脚本,因为我们的CI/CD有配置拉取代码的地方,所以脚本是不包含拉取代码的过程的,只有构建的过程

# 首先进入到代码所在目录
cd /data/build
echo "---------------------------- /build/public npm install--------------------"
# 从基础镜像中将我们已经下载好的包复制到目录下
cp -r  /app/node_modules ./node_modules
# 整理一下复制之后的包目录
npm ddp
# 设置npm的地址为私有库
npm config set register http://192.168.206.231:4873
# 删除.npmrc文件防止影响
rm -rf .npmrc
npm install --unsafe-perm
echo "-------------------------build--------------------------------"
npm run build
echo "----------------------------build done-------------------"
rm -rf /data/build/public/node_modules
rm -rf /data/build/.git
rm -rf /data/build/public/src
rm -rf /data/build/public/server
rm -rf /data/build/public/build
chmod -R  777  /data/build
cd /data/build

完成我们代码的构建以后也需要通过docker将我们的项目打包成一个镜像可以用来独立部署,这里采用了nginx来提供服务能力

编写Dockerfile文件:

FROM nginx
ADD dist /usr/share/nginx/html
# 端口可以不设置,使用nginx默认的
EXPOSE 80

以上脚本与镜像的构建是通过我们CI/CD系统自动执行的,所以省去了人工的过程,如果是自己去制作镜像的话还要重复之前制作基础镜像的过程来打包成一个可用的镜像。

暂时先记录这么多,后续有问题再补充。

Luin-Li commented 2 years ago

mark! 推送镜像 那里的一条命令写错了?应该是docker push www.xx.com/xx/webimage:v1

Luin-Li commented 2 years ago

在有一个基础镜像的前提下,拉合适的node包然后解压到本地,再设置环境变量:

FROM www.xx.com/xx/webimage:v1
ADD node-v12.13.0-linux-x64 /usr/local/lib/node-v12.13.0-linux-x64
ENV NODE_HOME=/usr/local/lib/node-v12.13.0-linux-x64
ENV PATH=$PATH:$NODE_HOME/bin
ENV NODE_PATH=$NODE_HOME/lib/node_modules