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.mfbz.cn/a/380199.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CTF--Web安全--SQL注入之‘绕过方法’

一、什么是绕过注入 众所周知&#xff0c;SQL注入是利用源码中的漏洞进行注入的&#xff0c;但是有攻击手段&#xff0c;就会有防御手段。很多题目和网站会在源码中设置反SQL注入的机制。SQL注入中常用的命令&#xff0c;符号&#xff0c;甚至空格&#xff0c;会在反SQL机制中…

springboot173疫苗发布和接种预约系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

Java面向对象 多态

目录 多态多态的好处实例创建一个Main 多态 在Java中&#xff0c;多态是面向对象编程的三大基本特性之一&#xff0c;另外两个是封装和继承。多态是指一个接口可以有多种实现方式&#xff0c;或者一个对象可以表现出多种形态。 在Java中&#xff0c;多态主要通过方法重载和重写…

Java面向对象 方法的重写

目录 重写重写的规则实例创建Person类创建Student类测试 重载和重写的区别 重写 发生在子类和父类中&#xff0c;当子类对父类提供的方法不满意的时候&#xff0c;要对父类的方法进行重写。 重写的规则 子类的方法名字和父类必须一致&#xff0c;参数列表&#xff08;个数&…

【Linux】进程学习(一):基本认识

目录 1.基本概念2.初步理解3.描述进程-PCB3.1task_struct-PCB的一种3.2task_ struct内容分类 4.组织进程5.查看进程5.1通过ps指令查看5.2通过系统目录查看 6.通过系统调用获取进程的PID和PPID7.通过系统调用创建进程-fork初识 1.基本概念 课本概念&#xff1a;程序的一个执行实…

【跳槽须知】关于企业所签订的竞业协议你知道多少?

年后跳槽须知自己签订的合同中是否存在竞业协议&#xff0c;谨防协议造成经济损失 &#x1f413; 什么是竞业协议 竞业协议时用于保护自己的权益&#xff0c;在员工离职时决定是否启动的一种协议&#xff0c;避免一些掌握公司机密的一些重要岗位人才流入竞争对手的公司&#xf…

C++ 位图布隆过滤器哈希切割

文章目录 位图概念模拟实现海量数据面试题1 布隆过滤器模拟实现应用场景海量数据面试题2 哈希切割海量数据面试题3 位图 概念 我们用一道题引出此概念&#xff1a; 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这…

算法---回溯(正文)

1.什么是回溯&#xff1f; 回溯算法的定义就是和暴力枚举一样枚举所有可能并加撤回&#xff0c;也能和暴力一样去掉一些重复&#xff08;在之前就被筛出&#xff0c;但还要枚举这个&#xff0c;我们可以跳过这个了---------这个就是回溯剪枝&#xff09;。但为什么回溯不是暴力…

多线程基础详解(看到就是赚到)

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 创建线程 1.创建类继承Thread,重写run() 2.实现Runnable,重写run() 3.继承Thread,使用匿名内部类 …

版本控制工具——Git

版本控制工具——Git 前言一、版本库二、git的工作区域和文件状态三、添加和提交文件四、回退版本&#xff1a;git reset --模式 版本号五、查看差异&#xff1a;git diff六、从版本库中删除文件七、.gitignore&#xff1a;git中的特殊文件八、Git、GitHub跟Sourcetree的关系九…

基于 Python 的漏洞扫描系统,附源码

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

【Python】使用 requirements.txt 与 pytorch 相关配置

【Python】使用 requirements.txt 与 pytorch 相关配置 前言一、pip1、导出结果含有路径2、导出不带路径的 二、Conda1、导出requirements.txt2、导出yml 文件 三、第三方包&#xff1a;pipreqs&#xff08;推荐&#xff09;1、创建并激活conda环境2、安装requirements文件的pi…

金融信贷风控评分卡模型

评分卡模型概念 评分模型是根据借款人的历史数据&#xff0c;选取不同维度的数据类型&#xff0c;通过计算而得出的对借款人信用情况打分的模型。不同等级的信用分数代表了借款人信用情况的好坏&#xff0c;以此来分析借款人按时还款的可能性。 评分卡模型分类 A卡&#xff…

揭开Markdown的秘籍:标题|文字样式|列表

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Markdown指南、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️Markdown 标题二. ⛳️Markdown 文字样式2.1 &#x1f514;斜体2.2 &…

Netty连接通道中的Channel参数模型

ChannelOption(Channel中的连接参数) ChannelOption.SOBACKLOG ChannelOption.SO_BACKLOG对应的是tcp/ip协议listen函数中的backlog参数&#xff0c;服务端处理客户端连接请求是顺序处理的&#xff0c;所以同一时间只能处理一个客户端连接&#xff0c;多个客户端来的时候&…

代理与Reflect反射

属性描述符 Proprety Descriptor 属性描述符 用于描述一个属性的相关信息 1.Object.getOwnPropertyDescriptor(对象&#xff0c;属性名) 可以得到一个对象的 某个属性的属性描述符 Object.getOwnPropertyDescriptors(对象) 可以得到某个对象的所有属性描述符 如果需要为某个…

node.js基础-02

Author nodes&#xff1a;&#xff08;题记&#xff09; Hypertest Transfer protocol is very important to programming personnel。it doesnt matter if youre a front-end engineer or a back-end engineer.So,lets study it together. http协议对于编程工程师很重要&am…

基于华为云欧拉操作系统(HCE OS)单节点容器化部署(Prometheus、node-exporter、Grafana)应用性能监控平台

写在前面 博文内容为 华为云欧拉操作系统入门级开发者认证(HCCDA – Huawei Cloud EulerOS)实验笔记整理认证地址&#xff1a;https://edu.huaweicloud.com/certificationindex/developer/9bf91efb086a448ab4331a2f53a4d3a1内容涉及&#xff0c;HCE OS 容器化部署(Prometheus、…

【C++修行之道】(引用、函数提高)

目录 一、引用 1.1引用的基本使用 1.2 引用注意事项 1.3 引用做函数参数 1.4 引用做函数返回值 1.5 引用的本质 1.6 常量引用 1.7引用和指针的区别 二、函数提高 2.1 函数默认参数 2.2函数占位参数 2.3 函数重载 2.4函数重载注意事项 一、引用 1.1引用的基本使用 …

【canvas】获取鼠标点击位置坐标的颜色信息

在项目当中&#xff0c;要实现某业务需求例如PS魔棒功能时&#xff0c;则需要获取点击坐标的颜色信息。 功能不复杂&#xff0c;代码也很少&#xff0c;一看便知~~ 核心API为getImageData&#xff0c;传入4个参数&#xff0c;前2个为点击坐标xy&#xff0c;后2个都传1&#xf…
最新文章