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://xiahunao.cn/news/2776316.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

运维高级篇-分库分表(拆分策略详解)

分库分表 介绍 问题分析 随着互联网及移动互联网的发展&#xff0c;应用系统的数据量也是成指数式增长&#xff0c;若采用单数据库进行数据存 储&#xff0c;存在以下性能瓶颈&#xff1a; IO瓶颈&#xff1a;热点数据太多&#xff0c;数据库缓存不足&#xff0c;产生大量磁盘…

【前端web入门第四天】01 复合选择器与伪类选择器

文章目录: 1. 复合选择器 1.1 后代选择器 1.2 子代选择器 1.3 并集选择器1.4 交集选择器(了解) 2.伪类选择器 2.1 伪类-文本2.2 伪类-超链接&#xff08;拓展) 1. 复合选择器 什么叫复合选择器? 由两个或多个基础选择器&#xff0c;通过不同的方式组合而成。 复合选择器的作…

基于微信小程序的校园失物招领小程序

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【JavaEE】_传输层协议UDP与TCP

目录 1. 开发中常见的数据组织格式 1.1 XML 1.2 JSON 1.3 Protobuf 2. 端口号 3. UDP协议 4. TCP协议 4.1 特点 4.2 TCP报文格式 4.3 TCP可靠性机制 4.3.1 确认应答机制 4.3.2 超时重传机制 4.3.2.1 丢包的两种情况 4.3.2.2 重传时间 4.3.3 连接管理机制 4.3.3…

肯尼斯·里科《C和指针》第13章 高级指针话题(3)命令行参数

处理命令行参数是指向指针的指针的另一个用武之地。有些操作系统&#xff0c;包括UNIX和MS-DOS&#xff0c;让用户在命令行中编写参数来启动一个程序的执行。这些参数被传递给程序&#xff0c;程序按照它认为合适的任何方式对它们进行处理。 13.4.1 传递命令行参数 这些参数如何…

在计算机/移动设备上恢复已删除视频的 10 个数据恢复工具

视频在网上疯传&#xff0c;我们都观看或创建视频&#xff0c;并将我们最喜欢的视频保存在硬盘上。如果我们丢失了一些重要的视频&#xff0c;那将是非常令人心碎的。但是今天&#xff0c;恢复已删除的视频变得更加容易。删除的视频在被新数据覆盖之前并没有真正从您的存储驱动…

OpenSSL 创建自签名证书

前言 Openssl 是一个方便的实用程序,用于创建自签名证书。您可以在所有操作系统(如 Windows、MAC 和 Linux 版本)上使用 OpenSSL。 自签名证书 创建我们自己的根 CA 证书和 CA 私钥(我们自己充当 CA)创建服务器私钥以生成 CSR使用我们的根 CA 和 CA 私钥创建具有 CSR 的…

Redis 单线程

文章目录 Redis单线程架构Redis 单线程访问速度IO多路复用原理 Redis单线程架构 Redis的单线程架构的效果为&#xff1a;Redis的单线程是对于服务端而言的&#xff0c;Redis允许多个Redis用户端同时在线操作&#xff0c;但同时只有一个用户端在和服务端交互。多个用户同时发送…

centos7的git使用方法

下载git yum install git git克隆 git clone https...(图片中复制的内容) git提交到远程仓库 git add filename git commit -m "提交日志" git push git首次使用要配置邮箱和用户名 查看提交日志 git log 查看当前提交状态 git status

人力资源智能化管理项目(day04:组织架构)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject 觉得有帮助的同学&#xff0c;可以点心心支持一下哈 树组件应用 <!-- 展示树形结构 --><!-- default-expand-all默认展开所有节点 --><el-tree default-ex…

黄金交易策略(EA):三个仓位的设计是确保可以不停息做单

完整EA&#xff1a;Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客

c++ 类的第二章,对象的创建和使用

新年快乐&#xff01;&#xff01;&#xff01;&#xff01; 定义了类&#xff0c;相当于定义了一个数据类型。使用方法和int double是一样的,可以定义变量&#xff0c;数组&#xff0c;指针&#xff0c;而定以后的变量&#xff0c;我们把它叫做这个类的对象。 定义如下&#…

猫头虎分享已解决Bug || 未定义的变量(Undefined Variable):ReferenceError: x is not defined

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

AI创作2024科幻大片《沙丘2》高清宣传片

AI创作2024科幻大片《沙丘2》高清宣传片 "Beyond the vast deserts of Dune, a new threat looms." "The war for control of the universe has just begun." "In the shadows of the great sand dunes, danger waits." "The power of t…

排序算法---快速排序

原创不易&#xff0c;转载请注明出处。欢迎点赞收藏~ 快速排序是一种常用的排序算法&#xff0c;采用分治的策略来进行排序。它的基本思想是选取一个元素作为基准&#xff08;通常是数组中的第一个元素&#xff09;&#xff0c;然后将数组分割成两部分&#xff0c;其中一部分的…

MySQL篇之索引

一、定义 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff08;B树&#xff09;&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff0…

Linux 命令基础

Shell概述 Linux操作系统的Shell作为操作系统的外壳&#xff0c;为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。 Shell是用户和Linux内核之间的接口程序&#xff0c;如果把硬件想象成一个球体的中心&#xff0c;内核围绕在硬件的外层管理着…

【Java八股面试系列】并发编程-并发关键字,线程池

目录 并发关键字 Synchronized synchronized最主要的三种使用方式&#xff1a; 具体使用&#xff1a;双重校验锁单例模式 synchronized 底层实现原理&#xff1f; synchronized锁的优化 偏向锁 轻量级锁 重量级锁 Mark Word 与 Monitor 之间的关系 总结 偏向锁、轻量…

数字IC实践项目(9)— Tang Nano 20K: I2C OLED Driver

Tang Nano 20K: I2C OLED Driver 写在前面的话硬件模块RTL电路和相关资源报告SSD1306 OLED 驱动芯片SSD1306 I2C协议接口OLED 驱动模块RTL综合实现 总结 写在前面的话 之前在逛淘宝的时候偶然发现了Tang Nano 20K&#xff0c;十分感慨国产FPGA替代方案的进步之快&#xff1b;被…

算法------(11)并查集

例题&#xff1a; &#xff08;1&#xff09;Acwing 836.合并集合 并查集就是把每一个集合看成一棵树&#xff0c;记录每个节点的父节点。合并集合就是把一棵树变成另一棵树的子树&#xff0c;即把一棵树的父节点变为另一棵树的父节点的儿子。查询是否在同一集合就是看他们的根…