Docker部署前端项目

某次阿里云的自动流水线失败了,代码本地跑起来莫得问题,错误日志提示让我跑一下npm run build ,但是俺忽然发现,我跑了,文件打包好了,但是往哪里运行呢?这涉及到要构建一个环境供打包文件部署吧?于是查了查,想起了之前大佬说过的docker。
于是有了这一篇研究笔记,over。本笔记的目的就是研究一下docker怎么用,最终成果是把俺的项目用新构建的环境跑起来。
 
Docker 边学边用

1、下载docker的应用软件,同时申请一个docker的账号。

下载个人免费版就好了,然后打开软件后我一脸懵,(全英文)(不是),参考了几个博客后还是没懂。

参考:
镜像、容器、仓库1
镜像、容器、仓库2-未写完
中文版docker入门教程

名词解释:

  1. 镜像(Image):镜像包含了容器运行时所需的程序、资源、配置等文件信息,是一个特殊的文件系统,但是它不包含任何的动态数据。镜像是分层存储的结构,分层存储的特征使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。
    Dockerfile可用于构建镜像。
  2. 容器(Container):镜像和容器的关系,就像是面向对象程序设计中的类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以看作是一个进程,它可以被创建、启动、停止、删除、暂停等。因为容器是通过镜像来创建的(实例化镜像),所以必须先有镜像才能创建容器,而生成的容器是一个独立于宿主机的隔离进程,并且有属于容器自己的网络和命名空间。
    一个镜像可以拥有多个容器,正如它可以有多个实例化进程一样。
  3. 镜像仓库(Registry / Repository):存储镜像的地方,就像github,集中存储、分发镜像的服务,便于我们在不同的环境使用某一个镜像。一个Resistry也可以由很多只保存同一镜像的不同版本的小仓库组成。

     

2、尝试根据提示自己在本地开一个容器跑一跑

就在软件边上的containers,点进去就会提示你跑一下这个命令:docker run -d -p 80:80 docker/getting-started


然后我就试着运行了一下,这个命令就帮我创建了一个镜像还有它的容器。就可以在浏览器打开了
接下来找补地解释一下

  1. docker run 命令用于启动容器,它可以通过镜像创建一个容器。
  2. docker/getting-started启动的镜像名称(可以自己取)
  3. -d:(detached)表示后台启动。即当前进程为守护进程,会一直处于运行状态。
    -p 80:80:主机80端口映射容器80端口(web请求时注意设置该端口的值为实际端口值)

以上,只要再学会多一些操作镜像、容器、仓库的命令就已经四舍五入我会了!(不是)。
比如

  1. docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    我们本地没有任何镜像,但是我们可以使用这个命令从Docker官方提供的仓库服务Docker Hub上拉取官方或第三方已经构建好的镜像。
    要拉取镜像,需要指定Docker Registry的URL和端口号,默认是Docker Hub,另外还需要指定仓库名和标签,仓库名和标签唯一确定一个镜像,而标签是可能省略,如果省略,则默认使用latest作为标签名,而仓库名则由作者名和软件名组成。
    如果我们想要拉取centos镜像,可以使用docker pull centos
  2. 查看本地镜像
    Docker的镜像名由仓库名和标签组成,docker images可用于查看本地所有的镜像,同时如果拉取到相同名称的镜像,之前的镜像名称会变成<none>,我们称之为虚悬镜像,可以重新给它取名字,也可以把它删掉,具体的命令行参考这里。搜索虚悬就好了。
  3. 使用docker commit conntaner_id [ID]容器可以提交为镜像,不过这样没办法追溯镜像被新加的层次内容,因此更多使用DockerFile来定义新增的镜像。这样一来,我们不用把镜像分发给别人,而只是把Dockerfile和相应需要写入镜像的资料发给别人,别人也能自己构建镜像,安全透明。
  4. 容器的启动、停止、删除、导出、查看状态(stats)、明细(inspect)等命令。

3、进行实验,在本地跑一个已经npm run build打包好的项目。

如果想要跑我们的项目代码,根据上面查询的知识,我们晓得必须得有一个镜像把项目运行所需的资源、代码包装好,然后再根据镜像生成项目的容器,接下来运行容器。制作镜像需要借助 Dockerfile 文件,所以我们先要写一下Dockerfile。

什么是Dockerfile

参考1:Dockerfile
参考2(写得更通俗易懂):Dockerfile
** 推荐阅读:DockerFile详解 **

如果有一天我们想要制作一个反复使用的镜像,每一次使用都要重新安装环境和配置很麻烦,但是使用Dockerfile就可以达到一次制作反复clone的效果了。只需要把步骤都写进一个文件里,然后让docker自己去实现就好了。

Dockerfile其中的每一条指令都会构建出一层镜像,因此每一条指令就是用于描述该镜像如何构建。并且docker的构建使用缓存机制,如果重复构建镜像,第一次构建的内容能被缓存下来,并被后续的构建使用,对每一条指令,docker都会检查有没有相应的缓存镜像与其对应,如果有,则为缓存命中,但是一旦没有命中,此后的所有命令将不再使用缓存,所以,在编写Dockerfile文件的时候,尽量将稳定的不会改变的命令放在前面,产生变化的命令放在后面,以更好的利用缓存。

  常用命令
* FROM 指定基础镜像文件
* MAINTAINER  维护者的信息
* RUN   执行命令
* EXPOSE  对外暴露的端口
* ADD  复制文件到容器中,若是压缩文件会自动解压
* COPY  复制文件到容器中,若是压缩文件不会自动解压
* WORKDIR  改变工作目录(切换目录)
* ENTRYPOINT  运行容器时执行的命令(default 自启动)CMD 在docker run 时运行,用于指定在容器启动时所要执行的命令
RUN 是在docker build时运行,用于指定镜像构建时所要执行的命令

DockerFile开头命令为 FROM,它指定了基础镜像,比如一开始我们选择了基础镜像为ubuntu FROM ubuntu:18.04,接下来就可以使用(RUN)环境的命令语言apt-get进行安装其他的内部软件了,比如RUN apt-get install python3-pip -y
其实就好像虚拟机装了一个环境(From),然后在虚拟机的终端页面RUN安装依赖命令,指定工作目录(MKDIR),把配置(COPY)拷过去,或者设置ENV环境变量,最后切换工作目录(WORKDIR),就可以开始跑项目了(CMD)。

幸运的是我这里已经有写好了的dockerfile。
但是怎么能偷工减脸捏?如果想要从头编写一个dockerfile应该怎么写?
参考:以create-react-app为例部署docker项目
参考:保姆级的部署docker项目教程
参考:编写Dockerfile并运行(推荐阅读)

首先把dockerfile运行起来,把我们的镜像构建一下。步骤如下,命令在本地的终端内执行即可。

  1. 编写dockerfile文件。
  2. docker build 运行文件。(docker build 命令用于使用 Dockerfile 创建镜像。)
    进入我们的dockerfile所在的工作目录,运行docker build -t <标签名,例:myProj/docker:test> .最后有一个点非常重要不要漏了,这代表是基于当前目录下的dockerfile文件执行的镜像。
    可以看到我们的命令行一步步执行。

  3. docker run 运行镜像。或者直接在docker的客户端界面中操作即可。
  4. docker push 仓库,将镜像上传到镜像库。

K8s使用

参考:
Kubernetes原理与架构初探

全称Kubernetes。是谷歌推出的一个容器集群管理系统,为什么简称是k8s呢,因为k和s之间有8个字母…
接下来我主要学习的是使用方面,因此本篇的目的主要是会使用阿里云的k8s服务。


 
在搜索这里找到K8S并且开通认证。
看一下学习文档先什么是阿里云Kubernetes监控
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/675200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】线程池线程安全的单例模式和STL读者写者问题

需要云服务器等云产品来学习Linux的同学可以移步/–>腾讯云<–/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;优惠多多。&#xff08;联系我有折扣哦&#xff09; 文章目录 1. 线程池1.1 线程池是什么1.2 为什么要有线程池1.3 线程池的应用场景1.4 线程池的任…

ONLYOFFICE文档8.0新功能浅探

ONLYOFFICE文档8.0新功能浅探 上个月末这个月初的几天&#xff0c;ONLYOFFICE版本更新了&#xff01;更新到了一个比较整的大的版本号&#xff0c;8.0版本&#xff0c;看来这个生产力工具的升级速度基本上能保持每年两个版本号的速度&#xff0c;还是很快的&#xff0c;一般来…

【stomp实战】websocket原理解析与简单使用

一、WebSocket 原理 WebSocket是HTML5提供的一种浏览器与服务器进行全双工通讯的网络技术&#xff0c;属于应用层协议。它基于TCP传输协议&#xff0c;并复用HTTP的握手通道。浏览器和服务器只需要完成一次握手&#xff0c;两者之间就直接可以创建持久性的连接&#xff0c; 并…

多线程JUC:等待唤醒机制(生产者消费者模式)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;多线程&JUC&#xff1a;解决线程安全问题——synchronized同步代码块、Lock锁 &#x1f4da;订阅专栏&#xff1a;多线程&am…

Kubernetes实战(二十七)-HPA实战

1 HPA简介 HPA 全称是 Horizontal Pod Autoscaler&#xff0c;用于POD 水平自动伸缩&#xff0c; HPA 可以 基于 POD CPU 利用率对 deployment 中的 pod 数量进行自动扩缩容&#xff08;除了 CPU 也可以基于自定义的指标进行自动扩缩容&#xff09;。pod 自动缩放不适用于无法…

NGINX upstream、stream、四/七层负载均衡以及案例示例

文章目录 前言1. 四/七层负载均衡1.1 开放式系统互联模型 —— OSI1.2 四/七层负载均衡 2. Nginx七层负载均衡2.1 upstream指令2.2 server指令和负载均衡状态与策略2.2.1 负载均衡状态2.2.2 负载均衡策略 2.3 案例 3. Nginx四层负载均衡的指令3.1 stream3.2 upstream指令3.3 四…

深入理解ES的倒排索引

目录 数据写入过程 词项字典 term dictionary 倒排表 posting list FOR算法 RBM算法 ArrayContainer BitMapContainer 词项索引 term index 在Elasticsearch中&#xff0c;倒排索引的设计无疑是惊为天人的&#xff0c;下面看下倒排索引的结构。 倒排索引分为词项索引【…

JS中常用占位符使用方法详解_ |%s|%d|%f|%o|%O|%c|

在 JavaScript 中&#xff0c;%s 是一种字符串格式化占位符&#xff0c;用于将字符串插入到另一个字符串中的指定位置。这种方法基于 C 语言的 printf() 函数&#xff0c;但在 JavaScript 中有一些变化。 在 JavaScript 中&#xff0c;%s 可以接受任何类型的值&#xff0c;并将…

上市公司人工智能转型指数及55个工具变量汇总数据集(2024.2月更新)

一、“智能化转型”发文趋势和主题分布 二、数据来源 上市公司年报、官网&#xff0c;中国知网及各期刊官网等三、时间跨度 工具变量&#xff1a;2022-2024年&#xff1b; 上市公司人工智能转型指数&#xff1a;2007-2021年四、数据范围 中国A股上市公司五、数据展示 序号…

一键部署自动化运维工具spug

简介 Spug是面向中小型企业设计的轻量级无Agent的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、应用发布部署、在线任务计划、配置中心、监控、报警等一系列功能。 部署 1.创建目录 mkdir -p /opt/spug/{mysql,service,repos} 2.进入目录 cd /o…

Modern C++ 内存篇1 - allocator

1. 前言 从今天起我们开始内存相关的话题&#xff0c;内存是个很大的话题&#xff0c;一时不知从何说起。内存离不开allocator&#xff0c;我们就从allocator开始吧。allocator目前有两种&#xff1a;std::allocator, std::pmr::polymorphic_allocator&#xff0c;各有优缺点。…

Vue源码系列讲解——虚拟DOM篇【二】(Vue中的DOM-Diff)

目录 1. 前言 2. patch 3. 创建节点 4. 删除节点 5. 更新节点 6. 总结 1. 前言 在上一篇文章介绍VNode的时候我们说了&#xff0c;VNode最大的用途就是在数据变化前后生成真实DOM对应的虚拟DOM节点&#xff0c;然后就可以对比新旧两份VNode&#xff0c;找出差异所在&…

docker 基于容器创建本地web容器化镜像

一、docker 基于容器创建本地web容器化镜像 1、启动指定buysbox 镜像 docker run --name b1 -it busybox:latest 2、创建目录&#xff0c;并创建html mkdir -p /data/html vi index.html 内容自定义例如&#xff1a;<h1>welcome to busybox<h1> 3、新增窗口&am…

ubuntu22.04 安装部署05:禁用默认显卡驱动

一、相关文章 ubuntu22.04安装部署03&#xff1a; 设置root密码-CSDN博客 《ubuntu22.04装部署01&#xff1a;禁用内核更新》 《ubuntu22.04装部署02&#xff1a;禁用显卡更新》 二、场景说明 Ubuntu22.04 默认显卡驱动&#xff0c;如果安装cuda&#xff0c;需要单独安装显…

Android开发 button 按钮点击两次 响应onclick方法

问题 Android开发 button 按钮点击两次 响应onclick方法 详细问题 笔者xml代码 <!-- 一个按钮 --> <Button android:id"id/button1" android:layout_width"wrap_conten…

Conda历史版本下载地址和python对应关系

一、前言 因为Conda安装版本问题&#xff0c;带来了很多问题&#xff0c;虽然不能直接确定二者之间的关系&#xff0c;但是安装指定版本的conda,确实是一个比较好的方法。特此记忆。 二、下载地址 下载最新版本&#xff1a;Free Download | Anaconda 下载历史版本&#xff…

Xcode配置GLFW GLAD (MAC)

这里的GLFW用的是静态链接 博主反复修改&#xff0c;实在是没能找到为什么用动态会出现线程报错 下载GLAD:版本我一般是选倒数第二新&#xff0c;profile记得选core 点击GENRATE 点glad.zip获得下载 下载GLFW 点击download 最后&#xff0c;将两个文件都放到项目里面去 打开…

形态学操作之开操作与闭操作的python实现——数字图像处理

原理 图像处理中的开操作&#xff08;Opening&#xff09;和闭操作&#xff08;Closing&#xff09;是形态学&#xff08;Morphological&#xff09;操作的两个基本类型&#xff0c;它们都是基于膨胀&#xff08;Dilation&#xff09;和腐蚀&#xff08;Erosion&#xff09;操…

基于PHP的学生管理系统

前言 基于PHP的学生管理系统&#xff1b; 实现 登录、注册、学生信息、修改学生、删除学生、查询学生、添加学生等功能 &#xff1b; 环境准备 开发平台&#xff1a;PhpStrom2022.1.2 、Phpstudy_pro 数据库&#xff1a;MySQL5.7.26 技术架构 Bootstrap PHP7.3.4html5css3 项目…

系统架构21 - 统一建模语言UML(下)

UML图 UML中的图分类作用 视图用例视图逻辑视图进程视图实现视图部署视图 UML中的图 “图”是一组元素的图形表示&#xff0c;大多数情况下把图画成顶点&#xff08;代表事物&#xff09;和弧&#xff08;代表关系&#xff09;的连通图。为了对系统进行可视化&#xff0c;可以…