带你了解docker是什么----初始篇

news2024/11/17 22:34:40

docker

  • 容器
  • docker简介
  • docker、虚拟环境与虚拟机
  • docker 的核心概念
    • Docker 镜像
    • Docker 仓库
    • Docker容器
    • 镜像、容器、仓库,三者之间的联系

容器

容器一词的英文是container,其实container还有集装箱的意思,集装箱绝对是商业史上了不起的一项发明,大大降低了海洋贸易运输成本。让我们来看看集装箱的好处:

  • 集装箱之间相互隔离
  • 长期反复使用
  • 快速装载和卸载
  • 规格标准,在港口和船上都可以摆放

回到软件中的容器,其实容器和集装箱在概念上是很相似的。

现代软件开发的一大目的就是隔离,应用程序在运行时相互独立互不干扰,这种隔离实现起来是很不容易的,其中一种解决方案就是上面提到的虚拟机技术,通过将应用程序部署在不同的虚拟机中从而实现隔离。

docker简介

 先谈谈运输时我们用到的集装箱是如何产生的。当时,各种各样的散货通过海运进行运输,而困扰托运人和承运人的问题是由于大小、样式以及质量不同的商品放在一起容易出现挤压、破损等不良现象,例如将一批钢材和一把香蕉压在一起等。此外,不同运输方式之间的转运也相当麻烦。不同商品和不同运输手段的结合组成了一个巨大的二维矩阵,最终在美国海陆运输公司的推动下,海运界制定了国际标准集装箱来解决这个棘手的问题,如图10.2所示。

 同样的问题也出现在互联网行业,在软件应用开发过程中,需要有一种东西能够像集装箱一样方便地打包应用程序,隔离它们之间的不良影响,使应用能够在各种运行环境下运行并且在平台之间易于移植。如图10.3所示, Docker的初衷就是将各种应用程序和它们所依赖的运行环境打包成标准的容器,进而发布到不同的平台上运行。

 Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于Google公司推出的Go语言实现。

 Docker的基础是Linux容器(Linux Containers,LXC)技术, Docker是一种实现轻量级的操作系统虚拟化解决方案。在LXC的基础上Docker进行了进一步的封装,让用户不需要去关心容器的原理,使得操作更为简便。使得用户操作Docker容器就想操作一个快速轻量级别的虚拟机一样简单。

D29F8A6A766E3C07BA31E61CF5A4F6D0.jpg

docker、虚拟环境与虚拟机

  1. 首先虚拟环境特指的是Python 的虚拟环境是方便与在Python下的环境的配置问题,方便不同Python环境下项目的执行。类似于专门化的一个docker的一个容器。
  2. 虚拟机:传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有⾃⼰的操作系统,虚拟机⼀旦被开启,预分配给他的资源将全部被占⽤。每⼀个虚拟机包括应⽤,必要的⼆进制和库,以及⼀个完整的⽤户操作系统。像我平常用的VMware就属于虚拟机操作软件。
  3. Docker是一种容器技术。

    容器技术是和我们的宿主机共享硬件资源及操作系统可以实现资源的动态分配。容器包含应⽤和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在⽤户空间以分离的进程运⾏。
  4. 容器与虚拟机的对比

B17C9AF2A57490CA8152D566BFBF166C.jpg

docker 的核心概念

 Docker是一个C/S类型的架构。一般来说,用户通过client端进行相应操作,然后对应操作指令会传递到server端,然后交由server端的Docker daemon处理。

 Docker包括三个核心组件:镜像、容器和仓库。

Docker 镜像

  1.  Docker镜像是Docker容器运行时的只读模板,它保存着容器需要的环境和应用的执行代码,可以把镜像看成容器的代码,当代码运行起来后就变成了容器。

     每一个镜像都是由一系列的层(layers)组成。docker的镜像机制是有层次感的,一个镜像可以放到另一个镜像的顶部。位于下端的为父镜像,以此类推;最底部的镜像可称为基础镜像。最后从一个镜像启动容器时,docker会在镜像的最顶层加载一个读写的文件系统,我们想在docker上运行的程序就是在这个读写层中执行的。如下图:

image.png

当我们启动容器之后,我们接触的是最顶层的可写容器,最顶层的镜像以处于他下发层的镜像迭代构建而成。接下来引出docker镜像的另一个特性,写时复制:

  1. 写时复制

    还是看上边的图,刚开始运行的时候可写容器与顶层的镜像内容是完全一致的;当我对内容进行修改的时候,文件会从下一层的镜像(只读层)复制到顶层的可写容器(读写层),只读层的文件依然存在,但是会被读写层的文件所隐藏;在容器中所做的所有操作,都不会影响底层的原有数据,除非你把他打包成一个新的镜像。(但是在虚拟机上,如果改变了一个docker镜像,那么需要替换原先的整个镜像或者重新建立镜像)

Docker 仓库

Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库,是Docker集中存放镜像文件的场所。

 通常,一个用户可以建立多个仓库来保存自己的镜像。从这里可以看出仓库是注册服务器(Registry)的一部分,一个个的仓库组成了一个注册服务器。简单来说, Docker仓库的概念跟Git类似,注册服务器可以理解为GitHub这样的托管服务。

 Docker仓库有公有和私有的概念。其中公共的仓库如Docker官方的Docker Hub。Docker Hub提供了庞大的镜像集合供使用,这些镜像可以是自己创建的,还可以是在别人的镜像基础上创建国内的公开仓库(包括Docker Pool等),能提供稳定的国内访问。如果用户不希望公开分享自己的镜像文件, Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。

 在用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上pull下来就可以了。

Docker容器

 Docker容器和文件夹类似,一个Docker容器包含了某个应用运行所需要的所有环境。相对于静态的镜像而言,容器是镜像执行的动态表现。每一个Docker容器都是从Docker镜像创建的。Docker容器可以运行、开始、停止、移动和删除。每一个Docker容器都是独立和安全的应用平台, Docker容器是Docker的运行部分。

 容器易于交互、便于传输、易移植、易扩展,非常适合进行软件开发、软件测试以及软件产品的部署。

镜像、容器、仓库,三者之间的联系

image.png

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

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

相关文章

11.3 关联容器操作

文章目录关联容器迭代器关键字成员不可修改,值可修改关于泛型算法添加元素向set插入元素向map插入数据insert操作总结检测insert的返回值展开递增语句向multiset和multimap添加元素删除元素map下标操作访问元素类型别名:类型别名说明key_type关键字类型&…

第一个Spring、第一个SpringBoot、Spring-Mybatis整合、SpringBoot-Mybatis整合

目录一、第一个Spring程序二、第一个SpringBoot三、Spring-Mybatis整合四、SpringBoot-Mybatis整合第一个程序一、第一个Spring程序 添加依赖——用以支持spring <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</a…

线程池的简单介绍以及实现一个线程池

文章目录1、线程池存在的意义2、什么是线程池&#xff1f;3、线程池的使用2、java标准库中的线程池3、认识一下不同的线程池&#xff1a;4、认识一下线程池里的参数&#xff1a;4、实现一个简单的线程池1、线程池存在的意义 线程存在的意义&#xff1a;使用进程来实现并发编程…

鼠标右键没有git bash here(图文详解)

升级Win11后突然发现右键没有git bash here了解决&#xff1a;1. winr键&#xff0c;打开命令窗口,输入regedit打开注册表2. 在注册表中按照路径打开\HKEY_CLASSES_ROOT\Directory\Background\shell\3. 在shell上右键新建项&#xff0c;取名Git Bash Here&#xff0c;再点击Git…

SpringCloudConsul

上篇文章注册中心选出了Consul 和 K8S&#xff0c;现在我需要把他们集成到SpringCloud里&#xff0c;体验一下他们的服务注册发现、动态配置与权限分配难易 问题&#xff0c;以便选出更适合我们的。SpringCloudConsul首先用Docker搭建出Consul集群&#xff0c;这一步忽略了&…

8、Ubuntu22.4Server安装MariaDB10.10初始化密码Navicat远程登录

安装MariaDB10.10 查找源 apt search mariadb 在Ubuntu系统上从MariaDB存储库安装MariaDB10.10时&#xff0c;需要运行以下命令 sudo apt-get install apt-transport-https curl sudo curl -o /etc/apt/trusted.gpg.d/mariadb_release_signing_key.asc https://mariadb.org…

【微服务】Feign远程调用

本系列介绍的是Spring Cloud中涉及的知识点&#xff0c;如有错误欢迎指出~ 一.引子 我们以前基于RestTemplate发起的http请求远程调用服务&#xff1a; 存在下面的问题&#xff1a; 代码可读性差&#xff0c;编程体验不统一 参数复杂URL难以维护&#xff0c;字符串拼接硬编码…

逆卷积(ConvTranspose2d)是什么?

上图是一个卷积操作&#xff08;蓝色为输入&#xff0c;绿色为输出&#xff09;。 输入的特征图为x&#xff1a;( 4&#xff0c;4 &#xff0c;channels_in&#xff09;其中channels_in表示通道数。 卷积核设置&#xff1a;无padding&#xff0c; kernel size为3*3&#xff0c…

<关键字(1)>——《C语言深度剖析》

目录 关键字 - 第一讲 1.关键字分类 2.定义与声明 2.1 什么是变量(是什么) 2.2如何定义变量(怎么用) 2.3为什么要定义变量(为什么) 2.4 变量定义的本质 2.5 变量声明的本质 3. 最宽宏大量的关键字 - auto 3.1 变量的分类 3.2 变量的作用域 3.3 变量的生命周期 …

汇编语言(第四版)第八章 实验7 习题解答

Power idea 公司从1975年成立一直到1995年的基本情况如下&#xff1a; 下面的程序中&#xff0c;已经定义好了这些数据&#xff1a; assume cs:codesg,ds:datasgdatasg segmentdb 1975,1976,1977,1978,1979,1980,1981,1982,1983db 1984,1985,1986,1987,1988,1989,1990,1991,19…

【12】C语言_几个循环的经典练习

目录 1. 打印n的阶乘; 2、计算 1!2!3!......10! 3、用二分查找在一个有序数组中查找一个数 4、打印如下 5、输入三次密码 6、写一个猜数字游戏 7、如题 8、打印1到100之间 3的倍数 9、给两个数&#xff0c;求出最大公约数 10、找出从1000到2000之间的闰年 11、找出10…

Java是编译性语言还是解释型语言 ?

首先我们应该了解这两种语言的概念 . 高级语言在计算机上执行 , 有两种方式 , 分为编译型语言和解释型语言 . 编译型语言 : 编写源代码–>编译–>链接. 典型的编译型语言 : C/C . 特点 : 源代码中一处有错 , 就不允许编译 ; 编译过程中出现一处错误 , 就停止编译 . 优…

论文投稿指南——中文核心期刊推荐(武器工业)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

4个免费数据恢复软件:免费恢复您的数据

意外的文件删除或文件损坏可能会令人头疼&#xff0c;尤其是在您不使用云存储的情况下。两者通常都支持已删除的文件恢复和版本控制&#xff0c;以帮助您摆脱此类困境。如果您不使用云&#xff0c;通常唯一的机会就是使用数据恢复软件来找回丢失或损坏的数据。 这种方法有两个…

使用 Burpsuite 测试的常用操作(二)

大家好啊&#xff0c;我是大田。接上篇文章「 使用 Burpsuite 测试的常用操作&#xff08;一&#xff09;」&#xff0c;今天继续分享一下 Burpsuite 在工作中常用操作三、本文中 2 个常用操作1、Burpsuite_proxy 篡改请求通过代理模式可以拦截、查看、修改所有客户端和服务器端…

(二)Linux嵌入式开发——软件安装(Ubuntu)

文章目录&#xff08;二)Linux嵌入式开发——软件安装&#xff08;Ubuntu&#xff09;APP StoreAPT工具问题解决办法1解决办法2deb软件包程序源码问题1解决办法问题2解决办法总结&#xff08;二)Linux嵌入式开发——软件安装&#xff08;Ubuntu&#xff09; 接下来&#xff0c;…

【GD32F427开发板试用】FOC矢量算法研究系列之一:PWM实现呼吸灯

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;Q_dGHvwj 前言 有幸被选为此次开发板测评活动的参与者&#xff0c;万分感谢。收到板子后迫不及待的拆来查看&#xff0c;画风整齐美观&#x…

SpringCloudAlibabaNacosConfig学习笔记

目录 1. Nacos配置中心使用 2 搭建nacos-config服务 3 Config相关配置 4 .配置的优先级 5. RefreshScope 1. Nacos配置中心使用 官方文档&#xff1a; https://github.com/alibaba/springcloudalibaba/wiki/Nacosconfig Nacos 提供用于存储配置和其他元数据的key/value 存…

23种设计模式(十三)——代理模式【接口隔离】

文章目录 意图什么时候使用代理真实世界类比代理模式的实现代理模式的优缺点亦称:Proxy 意图 由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 什么时候使用代理 1、…

论文投稿指南——中文核心期刊推荐(环境科学)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…