前端认识docker

前端,认识,docker · 浏览次数 : 84

小编点评

## 欢迎使用docker 部署 **docker 您好!~** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **docker 您好!~** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **欢迎用docker 部署** **docker 您好!~** **欢迎使用docker 部署** **docker 您好!~** **欢迎使用docker 部署** **docker 您好!~** **欢迎使用docker 部署** **docker 您好!~** **欢迎使用docker 部署** **docker 您好!~** **欢迎使用docker 部署** **docker 您好!~** **欢迎使用docker 部署** **docker 您好!~** **欢迎使用docker 部署** **docker 您好!~** **欢迎使用docker 部署**

正文

Docker 是什么

先看看百科的定义:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

容器引擎?镜像?容器?虚拟化?这些概念对前端来说是不是有点懵。

假如现在要把你的代码发给他另外一个不懂开发的同事,要在他的电脑上跑起来,那你第一反应是不是要在他的电脑上安装代码所依赖的环境。

此时你的大脑瞬间反应过来问自己假如还要发给第三个、第四个同事,难道我要一个一个的去安装环境吗?我不要干活了吗?

此时要是有一个工具,可以把我的代码跟环境一起打包成一个文件,然后我只要把这个文件发给同事,同事在通过某个工具把这个文件加载进来,然后就可以跑起来,这样是不是方便很多。

这个工具就是Docker他可以很快捷的帮我们完成上面的工作,当然他不止这些功能。

或许你会想到虚拟机,在虚拟机配置好环境,把虚拟机保存下来,在把虚拟机镜像文件发给他。这种方式也是可以的,只不过相对于Docker而言,Docker 启动更快、消耗的资源更少、更好用

Docker 将程序软件运行环境,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器,容器之间是互相独立、互相隔离。

docker抹平了不同系统的应用程序安装差异,也就是说,只要把程序打包到了docker中,那么无论运行在什么环境下程序的行为都是一致的,正如官网说的 Run anywhere.

Docker 其他基本概念

在docker中其他几个概念:

  • dockerfile
  • image
  • container

首先编写dockerfile脚本,打包成镜像,镜像生成容器,在容器里面跑的就是我们的应用。

Dockerfile

  DockerFile是用来构建Docker镜像的构建文件,是由一系列命令参数构成的脚本,Docker会根据我们编写的脚本完成一系列的指令,最后将最终的状态生成一个镜像。

Dockerfile文件格式:

# 1、第一行必须指定:基础镜像信息
FROM ubuntu

# 2、维护者信息
MAINTAINER docker_user docker_user@email.com

# 3、镜像操作指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
RUN apt-get update && apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

# 4、容器启动执行指令
CMD /usr/sbin/nginx

Dockerfile 分为四部分:

  1. 基础镜像信息
  2. 维护者信息
  3. 镜像操作指令
  4. 容器启动执行指令

一开始必须要指明所基于的镜像名称,接下来一般会说明维护者信息;后面则是镜像操作指令,例如 RUN 指令。每执行一条RUN 指令,镜像添加新的一层,并提交;最后是 CMD 指令,来指明运行容器时的操作命令。

 Docker image

docker build 命令会根据 Dockerfile 文件及上下文构建新 Docker 镜像。

那么镜像到底是什么呢?

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序资源配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

镜像不包含任何动态数据,其内容在构建之后也不会被改变。

Docker container

  Docker 容器就是 Docker 镜像的运行实例,是真正运行项目程序、消耗系统资源、提供服务的地方,容器里面跑的就是我们部署的应用,所以他是一个独立的进程。一个镜像可以创建多个容器,每个容器之间互相独立。

  容器类似码头的集装箱,集装箱就是容器,不同的集装箱里面可以放相同的东西,也可以放不同的东西,并且他们互相隔离、独立。

  这些牛逼的现象背后是容器技术。

容器技术

  容器是实现操作系统虚拟化的一种途径,可以让用户在资源受到隔离的进程中运行应用程序及其依赖关系。简单的理解,容器技术可以隔离应用程序的运行时环境,但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。

类似docker 官网图标中的集装箱,船就是操作系统,集装箱可以随便放在任意的船上。

容器特点:

  1. 容器是完全使用沙箱机制,相互之间不会有任何接口。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
  2. 容器技术可以让我们的应用共享硬件资源及操作系统,可以实现资源的动态分配。

容器是一种虚拟的隔离技术,docker 是其中的一种实现

docker容器和虚拟机的对比

 传统的虚拟机有VMware, VirtualBox ,它们需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦开启,预分配给它们的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。

  虚拟机通过操作系统实现隔离不同,容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统以及硬件资源,这里的运行时环境指的是程序运行依赖的各种库以及配置。

  容器更加的轻量级且占用的资源更少,与操作系统动辄几G的内存占用相比,容器技术只需数M空间。

Docker优点

(1)提供一次性的环境:本地测试他人软件,持续集成的时候提供单元测试和构建的环境

(2)配置简化:将环境和配置放入代码然后部署,同样的Docker配置能够在各种环境中使用

(3)快速部署:适用于持续集成和持续交付(CI/CD)

对比

Docker容器

虚拟机

启动时间

秒级

分钟级

系统支持量

上千个

一般只能几十个

硬盘占用

KB-MB

GB-TB

隔离级别

进程级

操作系统级

 

Docker 部署测试

尝试部署一个静态文件,里面只是一个很简单p 标签

1、新建index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
  <meta content="yes" name="apple-mobile-web-app-capable">
  <meta content="black" name="apple-mobile-web-app-status-bar-style">
  <meta content="telephone=no,email=no" name="format-detection">
  <meta name="App-Config" content="fullscreen=yes,useHistoryState=yes,transition=yes">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>hello docker</title>
  <link href="css/style.css" rel="stylesheet">
</head>

<body>
  <div>
    <p>欢迎用docker 部署</p>
    <p>docker 您好!~</p>
  </div>

</body>

</html>

2、编写dockerfile 文件

 # 基于哪个镜像
FROM nginx
 # 将宿主机中的./index.html文件复制进容器里的/html/index.html
COPY ./index.html /usr/share/nginx/html/index.html
 # 容器对外暴露80端口
EXPOSE 80

3、大包成镜像

docker build -t hello-docker .

4、运行

docker run -p 7720:80 -d hello-docker

使用docker desktop 可视化也能看到容器已经跑起来了。

Docker 常用命令 

#info|version
docker info       #显示docker的系统信息,包括镜像和容器的数量
docker version    #显示docker的版本信息。
#帮助命令
docker 命令 --help #帮助命令
#镜像命令
docker images #查看所有本地主机上的镜像 可以使用docker image ls代替
docker search #搜索镜像
docker pull #下载镜像 docker image pull
docker rmi #删除镜像 docker image rm
#容器命令
docker run 镜像id #新建容器并启动
docker ps 列出所有运行的容器 docker container list
docker rm 容器id #删除指定容器
#删除所有容器
docker rm -f $(docker ps -aq)  	 #删除所有的容器
docker ps -a -q|xargs docker rm  #删除所有的容器
#启动和停止容器
docker start 容器id	#启动容器
docker restart 容器id	#重启容器
docker stop 容器id	#停止当前正在运行的容器
docker kill 容器id	#强制停止当前容器
#退出容器
exit 		#容器直接退出
ctrl +P +Q  #容器不停止退出 	---注意:这个很有用的操作
#其他常用命令
docker run -d 镜像名  #后台启动命令
docker logs 		#查看日志
docker top 容器id 	#查看容器中进程信息ps
docker inspect 容器id  #查看镜像的元数据
docker exec 		#进入当前容器后开启一个新的终端,可以在里面操作。(常用)
docker attach 		# 进入容器正在执行的终端
docker cp 容器id:容器内路径  主机目的路径	#从容器内拷贝到主机上

小结

  docker将程序以及程序所有的依赖都打包到docker 容器中,这样你的程序可以在任何环境都会有一致的表现,这里程序运行的依赖也就是容器就好比集装箱,容器所处的操作系统环境就好比货船或港口,程序的表现只和集装箱有关系(容器),和集装箱放在哪个货船或者哪个港口(操作系统)没有关系

 

参考

https://docs.docker.com/

https://zhuanlan.zhihu.com/p/187505981 

与前端认识docker相似的内容:

前端认识docker

Docker 是什么 先看看百科的定义: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 容器引擎?镜像?容器?虚拟化

撮合前端平台在低代码平台的落地实践

基于传统认知,前端产品直接触达消费者,往往具有高度的定制化、需求变更频繁等特点,要求具有很好的动态性, 能够满足不同客户的需求。那么能否建设类似的前端中台产品,我们姑且称之为“前端领域产品”,实现接入团队端到端能力复用呢?我们在撮合业务线中进行了一系列思考和探索。

设计模式与前端工程师

前端要不要学习设计模式 始终认为每个行业都有自己的特点,各自的专业性。一个开发工程师如果不知道电脑是哪些基本硬件组成,那么我们大概率都会认为这个人非常不专业。那么前端要不要学设计模式呢?设计模式跟前端有多大关系呢? 前端工程师首先是一个工程师,既然是一个软件工程师,那么类似设计模式、数据结构、网络相

从 Helm 到 Operator:Kubernetes应用管理的进化

Helm 的作用 在开始前需要先对 kubernetes Operator 有个简单的认识。 以为我们在编写部署一些简单 Deployment 的时候只需要自己编写一个 yaml 文件然后 kubectl apply 即可。 apiVersion: apps/v1 kind: Deploymen

《最新出炉》系列初窥篇-Python+Playwright自动化测试-13-playwright操作iframe-下篇

1.简介 通过前边两篇的学习,想必大家已经对iframe有了一定的认识和了解,今天这一篇主要是对iframe做一个总结,主要从iframe的操作(输入框、点击等等)和定位两个方面进行总结。 2.iframe是什么? iframe 简单来说就是一个 html 嵌套了另外一个 html。在页面元素上最简

《最新出炉》系列初窥篇-Python+Playwright自动化测试-14-playwright操作iframe-番外篇

1.简介 通过前边三篇的学习,想必大家已经对iframe有了一定的认识和了解,今天这一篇主要是对iframe的一些特殊情况的介绍和讲解,主要从iframe的定位、监听事件和执行js脚本三个方面进行展开介绍。 2.iframe定位 2.1动态id属性如何定位 有时候,我们可能看到的iframe 的id

Vue 框架下提升加载速度的一些实战经验分享

现在前端的框架有很多,甚至两只手已经数不过来,当然也完全没必要全部都学,还是应该深入的学习一两个被广泛使用的就好。其实我和大部分同学的想法一致,认为最值得我们深究的还是主流的 Vue 和 React。我们通过深入的学习了解这些框架的思维,也让自己使用这些框架能够更加得心应手。

TypeScript 前端工程最佳实践

作者:王春雨 前言 随着前端工程化的快速发展, TypeScript 变得越来越受欢迎,它已经成为前端开发人员必备技能。 TypeScript 最初是由微软开发并开源的一种编程语言,自2012年10月发布首个公开版本以来,它已得到了人们的广泛认可。TypeScript 发展至今,已经成为很多大型项目

基于.NetCore开发博客项目 StarBlog - (19) Markdown渲染方案探索

## 前言 笔者认为,一个博客网站,最核心的是阅读体验。 在开发StarBlog的过程中,最耗时的恰恰也是文章的展示部分功能。 最开始还没研究出来如何很好的使用后端渲染,所以只能先用Editor.md组件做前端渲染,过渡一下。前端渲染我是不满意的,因为性能较差,页面加载出来还会闪一下,有割裂感,影响

前端开发个人职业发展的四个阶段,你处于哪里?

前言 前段时间跟一位前辈聊到前端职业发展该怎么去规划这个问题。他说到的其中几个点我觉得非常好: 第一是要有清晰的自我认知,知道自己在一个团队或者在一个项目中能发挥怎样的价值,不骄傲自大也不要妄自菲薄;