来啦来啦,下面大米饭来分享前端怎么通过docker利用nginx镜像来部署项目,正常来说docker部署属于运维工作,身为前端的我暂时只负责了前半部分镜像相关的工作,后面更深层的k8s部署原理等只闻其名,未闻其含义,后面略讲一些,有兴趣的人可以深究一下
什么是Docker什么是Docker,百度官方表明Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
简单来说就是,docker是一个开源的容器平台,帮助开发者在不同的环境和平台、不同的计算机,实现轻松部署以及管理,把项目打包成容器的形式,并且可以在任何支持docker的环境中运行。
Docker优质文章传送门,没有docker的可以按照下面文章安装了解一下 Docker-desktop(Docker桌面版)——入门篇 点击查看 Docker Desktop 安装使用教程 点击查看 Docker基础篇 点击查看
几个基本概念 镜像通俗一点来讲,镜像类似一个菜谱,是一个静态模板,上面列出了制作一道菜所需要的全部食材和步骤。 这个菜谱可以拿给不同人在不同地方-也就是不限于Windows、Linux环境使用,做出美味菜肴(也就是容器),它是只读的。 在Docker中,镜像是docker中的一个基础概念,镜像可以运行到容器里面,镜像是一个预配置的、包含了Nginx服务器环境的静态模板,记录了运行某个应用或服务所需要的操作系统环境、文件以及各种依赖和程序本身的项目信息。前端主要通过docker根据打包好的项目文件去生成镜像。镜像可以通过从官方仓库下载或者基于现有的镜像使用docker build命令通过Dockerfile自定义构建。
容器那么也通俗一点来讲呢,容器类似从镜像这个 “静态模板” 里生成出来的一个个具体的“菜肴”,这些“菜肴”之间是独立的,互不影响的,类似生活中每个人都可以独立享用自己的美味佳肴。 也就是说,容器是镜像的一个可写副本,并且每个容器都有自己独立的运行空间,包括进程、网络配置等。即使是基于同一镜像创建出来的容器,它们之间也是隔离的,各自拥有自己的运行状态。
总结:镜像是静态模板,容器是镜像的实例化,是从镜像启动的一个可写、运行时环境,同一镜像可以启动多个容器,每个容器可以根据需要独立地进行个性化配置和操作。
DockerfileDockerfile是用来构建镜像的脚本,这个脚本里面有一些说明,主要是把前端生成的项目复制到容器中某个位置以及后续要用的nginx配置文件复制到容器中的某个位置(当然还有其他,比如设置环境变量或者启动命令等,本人项目只是把主要文件复制到镜像中)
Dockerfile文件例子如下所示
# 设置 nginx 作为静态资源服务器# 指定基础镜像nginx:alpineFROM nginx:alpine# 将我们自定义的网站静态文件复制到容器中COPY dist/ /usr/share/nginx/html/# 将我们自定义的nginx配置文件复制到容器中COPY nginx.conf.template /etc/nginx/conf.d/default.conf# 暴露80端口EXPOSE 80# 启动 nginx 服务器CMD ["nginx", "-g", "daemon off;"] nginx.conf.templatenginx.conf.template文件可以自行命名,主要是跟Dockerfile搭配使用的,是一个nginx配置文件,用来复制到容器中,记住就是一个nginx配置文件,(后面自己可以在阿里云控制台进行查看复制过去的nginx文件,找相关路径就可以了/etc/nginx/conf.d/default.conf)
熟悉的nginx配方
镜像仓库镜像仓库主要是来存储和管理容器镜像的服务,通过标签(tag)来区分镜像的不同版本,后续也是根据这个版本去做项目版本更新 可以选择官方镜像库,也可以选择一下私有镜像库去管理,一般公司会有自己的私有镜像库。 比如 Harbor等可以托管私有镜像
阿里云的Kubernetes(k8s)服务Kubernetes(简称k8s)是一个开源的容器编排系统,用于自动化部署、扩展和管理容器应用。阿里云提供了Kubernetes服务,成为阿里云容器服务Kubernetes,用户可以直接在阿里云平台进行创建和管理k8s集群。实现一键部署、完全托管、深度集成等优势 总结来说,阿里云为用户提供了一个内置于其云平台之中的Kubernetes环境,允许用户无缝地在云上运行和管理Kubernetes集群,而无需关注集群底层的运维复杂性。
前端发布流程 首次部署 打开 ACK 集群,选择合适的工作负载类型,点击“使用镜像创建”按钮(没有集群可以先按官方指示创建集群) 填写相关信息(应用名称,镜像名称,首次镜像tag,设置镜像密钥,选择cpu和所需资源等) 在详情内看到镜像状态为Running,代表创建成功创建 ALB 路由(这里不怎么熟,跟着其他人来的,有兴趣的可以自己在阿里云试下) 点击“网络-路由”菜单,点击“创建 Ingress"按钮,选择 ALB 应用负载均衡,填写对应内容,在 DNS 解析,将对应域名配置到该 ALB,即可访问该服务 正常发布流程 发布可执行文件/静态文件(前端打包dist文件)打包成Docker镜像将镜像推送到公司私有镜像仓库触发k8s拉取最新镜像,更改tag来更新项目1.发布可执行文件,前端打包dist文件,正确配置Dockerfile和nginx.conf.template两个脚