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.rhkb.cn/news/254037.html

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

相关文章

RedissonClient妙用-分布式布隆过滤器

目录 布隆过滤器介绍 布隆过滤器的落地应用场景 高并发处理 多个过滤器平滑切换 分析总结 布隆过滤器介绍 布隆过滤器&#xff08;Bloom Filter&#xff09;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是…

unity-ios-解决内购商品在Appstore上面已配置,但在手机测试时却无法显示的问题

自己这几天用 unity 2021 xcode 14.2 开发ios内购&#xff0c;appstore上面内购商品都已经配置好了&#xff0c;但是在手机里就是不显示&#xff0c;最后才发现必需得满足以下条件才行&#xff1a; 1. Appstore后台 -> 内购商品 -> 商品状态必需为『准备提交』以上状态…

Docker部署Grafana+Promethus监控Mysql和服务器

一、Grafana部署所需资源 Grafana 需要最少的系统资源&#xff1a; 建议的最小内存&#xff1a;512 MB建议的最低 CPU&#xff1a;1 官方文档&#xff1a;https://grafana.com/docs/grafana/latest/getting-started/build-first-dashboard/ 可以看到&#xff0c;我的这台服务…

放假--寒假自学版 day1(补2.5)

fread 函数&#xff1a; 今日练习 C语言面试题5道~ 1. static 有什么用途&#xff1f;&#xff08;请至少说明两种&#xff09; 1) 限制变量的作用域 2) 设置变量的存储域 2. 引用与指针有什么区别&#xff1f; 1) 引用必须被初始化&#xff0c;指针不必。 2) 引用初始…

Android中设置Toast.setGravity()了后没有效果

当设置 toast.setGravity()后&#xff0c;弹窗依旧从原来的位置弹出&#xff0c;不按设置方向弹出 类似以下代码&#xff1a; var toast Toast.makeText(this, R.string.ture_toast, Toast.LENGTH_SHORT)toast.setGravity(Gravity.TOP, 0, 0)//设置toast的弹出方向为屏幕顶部…

【Java八股面试系列】JVM-常见参数设置

目录 堆内存相关 显式指定堆内存–Xms和-Xmx 显式新生代内存(Young Generation) 显式指定永久代/元空间的大小 垃圾收集相关 垃圾回收器 GC 日志记录 处理 OOM JDK监控和故障处理工具总结 堆内存相关 Java 虚拟机所管理的内存中最大的一块&#xff0c;Java 堆是所有线…

汇编笔记 01

小蒟蒻的汇编自学笔记&#xff0c;如有错误&#xff0c;望不吝赐教 文章目录 笔记编辑器&#xff0c;启动&#xff01;debug功能CS & IPmovaddsub汇编语言寄存器的英文全称中英对照表muldivandor 笔记 编辑器&#xff0c;启动&#xff01; 进入 debug 模式 debug功能 …

Arm发布新的人工智能Cortex-M处理器

Arm发布了一款新的Cortex-M处理器&#xff0c;旨在为资源受限的物联网&#xff08;IoT&#xff09;设备提供先进的人工智能功能。这款新的Cortex-M52声称是最小的、面积和成本效率最高的处理器&#xff0c;采用了Arm Helium技术&#xff0c;使开发者能够在单一工具链上使用简化…

动漫风博客介绍页面源码

动漫风博客介绍页面源码&#xff0c;HTML源码&#xff0c;图片背景有淡入切换特效 蓝奏云&#xff1a;https://wfr.lanzout.com/iIDZu1nrmjve

Python调用matlab程序

matlab官网&#xff1a;https://ww2.mathworks.cn/?s_tidgn_logo matlab外部语言和库接口&#xff0c;包括 Python、Java、C、C、.NET 和 Web 服务。 matlab和python的版本 安装依赖配置 安装matlab的engine 找到matlab的安装目录&#xff1a;“xxx\ extern\engines\python…

【python量化交易】qteasy使用教程01 - 安装方法及初始化配置

qteasy教程1 - 安装方法及初始化配置 qteasy教程1 - 安装方法及初始配置qteasy安装前的准备工作1&#xff0c; 创建安装环境2&#xff0c;安装MySQL数据库 (可选)安装pymysql 3&#xff0c;创建tushare账号并获取API token (可选)4&#xff0c;安装TA-lib (可选)WindowsMac OSL…

Windows自动化实现:系统通知和任务栏图标自定义

文章目录 Windows自动化的三个小工具系统通知任务栏图标使用pystray实现使用infi.systray实现 Windows自动化的三个小工具 系统通知 import win10toastwin10toast.ToastNotifier().show_toast("eee", "休息一下", icon_path"icon.ico", durati…

uniapp中使用EelementPlus

uniapp的强大是非常震撼的&#xff0c;一套代码可以编写到十几个平台。这个可以在官网上进行查询uni-app官网。主要还是开发小型的软件系统&#xff0c;使用起来非常的方便、快捷、高效。 uniapp中有很多自带的UI&#xff0c;在创建项目的时候&#xff0c;就可以自由选择。而E…

深度神经网络中的BNN和DNN:基于存内计算的原理、实现与能量效率

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言引言内存计算体系结构深度神经网络&#xff08;DNN&#xff09;随机梯度的优…

自然语言处理(NLP)——使用Rasa创建聊天机器人

1 基本概念 1.1 自然语言处理的分类 IR-BOT&#xff1a;检索型问答系统 Task-bot&#xff1a;任务型对话系统 Chitchat-bot:闲聊系统 1.2 任务型对话Task-Bot:task-oriented bot 这张图展示了一个语音对话系统&#xff08;或聊天机器人&#xff09;的基本组成部分和它们之间的…

MYSQL分区NOW()不支持

传说同事写个复杂的SQL代码,跑一次需要7-10秒, 复杂如上,我也懒得去分析 IF IF IF是怎么回事了! 发现此表是分区表,后面要求加上了分区时间,以便利用到分区裁剪技术. 因为需求是查近10天来到期还款的人和金额.就是今天应该还款的人, 一般还款周期是7天. 给个10天的范围挺可以的…

【Qt学习笔记】Qt Creator环境下 信号与槽 详解(自定义信号槽、断连、lambda表达式等)

文章目录 1. 信号槽概念1.1 信号的本质1.2 槽的本质1.3 标准信号槽1.4 信号槽 实例 2. 自定义信号槽2.1 自定义槽函数2.2 自定义信号2.3 带参 信号槽 3. 信号槽的意义 与 作用4. 信号槽断连 &#xff08;了解&#xff09;5. lamda表达式的使用5.1 基本用法5.2 捕获局部变量5.3 …

打包 iOS 的 IPA 文件

目录 摘要 引言 准备 选择证书类型 创建应用程序 设置应用程序标识和证书 配置构建设置 构建应用程序 导出IPA 签名和导出 代码案例演示 完成 总结 参考资料 摘要 本篇博客将为您介绍如何打包iOS的IPA文件。从APP提交、创建应用程序、设置应用程序标识和证书、配…

单片机接收PC发出的数据

#include<reg51.h> //包含单片机寄存器的头文件 /***************************************************** 函数功能&#xff1a;接收一个字节数据 ***************************************************/ unsigned char Receive(void) { unsigned char dat; …

Qt|实现时间选择小功能

在软件开发过程中&#xff0c;QtDesigner系统给出的控件很多时候都无法满足炫酷的效果&#xff0c;前一段时间需要用Qt实现选择时间的小功能&#xff0c;今天为大家分享一下&#xff01; 首先看一下时间效果吧&#xff01; 如果有需要继续往下看下去哟~ 功能 1&#xff1a;开…