Docker基本概念、linux

2023-10-30

一 认识容器

Docker是全球领先的软件容器平台,因此要搞懂Docker的概念,首先需要从容器入手。

1.1 容器是什么?

容器是将软件打包成标准化的单元,便于项目开发、交付和部署。

  • 轻量:容器的运行环境镜像是轻量、可独立执行的软件包,其中包含软件运行的所有内容,包括运行环境、系统库、系统工具、设置参数和代码;
  • 稳定:容器化的软件适用于Linux和Window系统的应用,且在任何环境下都能够稳定地运行;
  • 独立:容器赋予软件独立性,使其免受外部环境差异的影响,例如系统开机预演环境改变,从而有助于减少项目在团队间交付的冲突。
    容器是一个存放东西的地方,像书包可以装各种文具、衣柜可以方衣服。我们使用容器存放的东西更偏向于应用,例如前端页面、后端数据库甚至是系统环境。
    在这里插入图片描述

1.2 对比容器和虚拟机

简单来说,虚拟机就像在物理机上建多套房,例如可以在一台服务器上运行多个虚拟机。而容器是每套房独立的小隔间,这些小隔间共享套房的水电、WIFI等资源。

1.2.1 虚拟化的差异

  • 传统虚拟机是虚拟出一套硬件,在上面运行一个完整的操作系统,在该系统上运行所需的应用进程。因此,启动时间较慢,硬盘使用较多。
  • 容器虚拟化的是操作系统,而不是硬件,因此更容易高效率地迁移。
    在这里插入图片描述

1.2.2 资源利用总结

两者都具有各自的优势,无所谓谁取代谁。可以在服务器上运行多个虚拟机,在虚拟机上运行容器,因此两者可以和谐共存。

  • 虚拟机将一台服务器变成多台,是物理硬件层抽象。每个VM包含一整套操作系统,多个应用以及必要的库资源和文件,因此占用大量空间,启动也十分缓慢。
  • 容器将代码和依赖的资源打包,是应用层的抽象。多个容器在同一个机器上运行,共享操作系统内核,但各自独立的进程在用户空间运行。因此,相比于虚拟机,占用空间较少,能瞬间启动。

在这里插入图片描述

二 Docker基本概念

2.1 Docker是什么?

  • 来源:Docker由Google公司的Go语言开发,给予Linux内核的CGroup和Namespace实现。
  • 原理:对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主机和其他进程,因此也成为了容器。
  • 用途:Docker能够自动执行重复性的任务,例如搭建和配置开发系统,解放了开发人员的配置成本,把更多精力专注于更重要的软件开发上。
  • 作用:便于创建和使用容器,存放自己的应用到容器内。容器还可以进行版本管理、复制、分享、修改,就像管理代码一样。

2.2 Docker 的思想与核心

  • 思想:集装箱(容器)、标准化(运输方式,存储方式,API接口)、隔离
  • 核心:镜像、容器、仓库

2.3 Docker容器的特点

  • 轻量:在一台宿主机上可以运行多个Docker容器共享操作系统内核,这些容器迅速启动,只需少量的算力和内存资源。镜像通过文件系统层构建,属于静态文件,只需少量磁盘内存,且镜像文件容易被下载。
  • 标准:Docker容器给予开放式标准,能够在主流的Linux版本、Windows以及VM、裸机和云服务器设备上使用。
  • 安全:Docker容器的应用不仅彼此隔离,还独立于底层的基础设施。Docker默认提供最强的隔离,因此当应用出现问题,也只是当个容器的问题,不会涉及整台机器。

2.4 为什么使用Docker?

基于Docker 的特点,其容易应用于项目开发、交付和部署,优点如下:

  • 一致的运行环境:Docker提供了除内核外的完整运行环境,确保应用运行环境一致性;
  • 快速启动:容器应用可以做到毫秒级的启动时间,节省了开发、测试和部署的时间;
  • 隔离:避免了公共主机资源会被其他用户使用的影响;
  • 快速扩展:Docker善于处理集中爆发的服务器使用压力;
  • 迁移方便:可以很轻易迁移Docker容器的应用到另外一个平台上,而不用担心运行环境差异带来的影响;
  • 持续交付和部署:可以自定制应用镜像来实现持续集成、交付和部署。

三 Docker的核心

理解Docker的整个生命周期需了解三个基本概念

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)
    在这里插入图片描述

3.1 镜像(Image):特殊的文件系统

  • 挂载文件:操作系统分为内核和用户空间。对于Linux,当启动内核时,会挂在root文件夹下的固定文件提供用户空间支持。而镜像,就相当于一个root文件系统。
  • 配置文件:除了容器运行时所需的程序代码、库、资源和配置文件外,还包括了运行时准备的一些配置参数(如匿名卷、环境变量、用户)。镜像不包含任何动态数据,其内容在构建之后不会被改变。
  • 分布式存储架构:镜像构建时,前一层时后一层的基础,构建完不再改变。分布式存储是的镜像复用、定制变得容易。甚至还可以用之前构建好的镜像作为基础层,再往上添加新的层,定制自己所需的内容。

3.2 容器(Container):镜像运行时的实体

  • 实质上是进程:与直接在宿主机执行的进程不同,容器进程运行于属于自己独立的命名空间,其使用了类似于镜像的分布式存储。
  • 生命周期:容器存储层的生命周期和容器一样,容器消亡时,存储层也会随着消亡。
  • 数据卷:为增加使用效率,容器不应该向其存储层写入任何数据,要保持无状态化。写入的文件应该使用数据集(volume)、或者绑定宿主目录,其直接跳过容器存储层进行读写,性能和稳定性更高。数据卷的生命周期独立于容器,使用数据卷后,容器可以随意删除,重新run,数据也不会丢失。

3.3 仓库(Repository):集中存放镜像文件

  • 集中存储分发:为了方便其他服务器使用构造的镜像,需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。镜像仓库是 Docker 用来集中存放镜像文件的地方类似于我们之前常用的代码仓库。
  • Docker Registry 公开服务:是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像。
  • 官方镜像:最常使用的 Registry 公开服务是官方的 Docker Hub ,这也是默认的 Registry,并拥有大量的高质量的官方镜像,网址为:https://hub.docker.com/.
  • 私有Registry:用户还可以在本地搭建私有Registry,Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。

四 常见Docker命令

4.1 基本命令

  • [ ]
  • [ ]
docker version # 查看docker版本 
docker images # 查看所有已下载镜像,等价于:docker image ls 命令 
docker container ls #	查看所有容器 
docker ps #查看正在运行的容器
docker image prune # 清理临时的、没有被使用的镜像文件。-a, --all:删除所有没有用的镜像,而不仅仅是临时文件;

4.2 拉取镜像

docker search mysql # 查看mysql相关镜像
docker pull mysql:5.7 # 拉取mysql镜像
docker image ls # 查看所有已下载镜像

4.3 删除镜像

docker image rm [镜像名] #删除某一个镜像
docker ps #确保这个镜像没有被容器引用(可以通过标签名称或者镜像 ID删除)
docker stop mysql #暂停mysql容器

五 构建、运输和运行

Docker 运行过程也就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器。它就像工人搬运码头的货物一样,主要涉及的字样有 Build、Ship、and Run

  • Build(构建镜像): 镜像就像是集装箱包括文件以及运行环境等等资源。
  • Ship(运输镜像):主机和仓库间运输,这里的仓库就像是超级码头一样。
  • Run (运行镜像):运行的镜像就是一个容器,容器就是运行程序的地方。

六 Docker底层原理

6.1 虚拟化技术

  • Docker 容器虚拟化技术为基础的软件,它是一种资源管理技术。
  • 将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。
  • 这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制,使用户可以比原本的配置更好的方式来应用。

6.2 LXC虚拟容器技术

LXC 技术主要是借助 Linux 内核中提供的 CGroup 功能和 namespace 来实现的,通过 LXC 可以为软件提供一个独立的操作系统运行环境。

  • CGroup: 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组 (process groups) 所使用的物力资源 (如 cpu memory i/o 等等) 的机制。
  • namespace 是 Linux 内核用来隔离内核资源的方式。 通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。
  • 对比:两者都是将进程进行分组,但是两者的作用还是有本质区别。namespace 是为了隔离进程组之间的资源,而 cgroup 是为了对一组进程进行统一的资源监控和限制
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker基本概念、linux 的相关文章

随机推荐

  • Ubuntu 18.04 镜像下载

    打开 官网 点击 下载 点击 Ubuntu桌面系统 点击 其他下载 鼠标滑到最下方 点击 Ubuntu 18 04 6 桌面版 64位 点击 保存
  • STM32 USB学习笔记9

    主机环境 Windows 7 SP1 开发环境 MDK5 14 目标板 STM32F103C8T6 开发库 STM32F1Cube库和STM32 USB Device Library 现在我们来分析VCP例程的最后一个文件USB设备类的us
  • LDAP概念和原理

    http blog sina com cn s blog 6151984a0100ey3z html 什么是目录服务 目录服务就是按照 树状存储信息的模式 目录服务的特点 目录服务与关系型数据库不同 目录服务的数据类型主要是字符型 而不是关
  • 如何通过redis 配置提高redis的性能

    redis的性能 我拿什么拯救 持久化选项 客户端输出缓冲限制 数据结构优化 压缩列表 网络配置 连接池 客户端输出缓冲限制 数据结构优化 压缩列表 网络配置 连接池 不冷战 不任性 多沟通 用舒服的方式喜欢和爱 知道承担 懂得分享 一起进
  • 组件扫描功能

    Spring提供了注解扫描 利用组件扫描注解和组件注解配合 可以自动扫描包空间自动创建Bean对象 减少编码 提高效率 配置文件 Configuration ComponentScan basePackages cn tedu Demo p
  • 数据结构——深度优先遍历(DFS)无向连通图

    以下是数据结构中关于深度优先遍历无向连通图的操作 编程风格参考严蔚敏版数据结构 其实深度优先遍历就是二叉树的先序遍历的推广 头文件以及宏定义 include
  • GitHub博客地址

    本人博客主要发布在GitHub Pages CSDN上的博客不再更新 我的GitHub博客地址 Hong s Bloghttps yalandhong github io 备用链接 https yalandhong vercel app h
  • IDEA解决运行项目虚拟内存溢出问题

    在我们运行一个比较大的项目的时候总是出现Caused by java lang OutOfMemoryError PermGen space的问题简单在网上查询了一下意思是内存溢出了 什么 我的电脑是8G运行内存 256的固态 你告诉这样都
  • bigquant量化平台笔记

    https bigquant com tutorial 宽客学院 https bigquant com community t topic 131694 AI量化策略快速理解 AI量化策略的目标 Label 默认使用股票收益率作为目标 第一
  • 关于antd的treeselect使用

    在表单中 我们可能会碰到这样的需求 比如我想将某一个物品或者资产 分配到某一个部门的员工下 那么我们需要在表单中做这样的配置 这样就会用到antd的treeselect组件 组件很好用 自带搜索框 可以大大的提高用户的可操作性 我们来看一下
  • 【CentOS安装配置Jupyter 】

    CentOS安装配置Jupyter 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 SmartyPants 创建一个自
  • 攻防世界之misc1

    攻防世界之misc1 首先这题非常的考研脚本实力 他题目没有下载文件 只有一个值 d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b
  • Nginx Upstream负责均衡的实现方案

    nginx中upstream实现负责均衡的几种方式 1 轮询 weight 1 默认选项 当weight不指定时 各服务器weight相同 每个请求按时间顺序逐一分配到不同的后端服务器 如果后端服务器down掉 能自动剔除 upstream
  • commons math用户手册翻译(一)

    翻译源址 http commons apache org proper commons math userguide index html 1 math包版本3 6 2 commons math包解决哪些问题 math包由一组数据和统计的包
  • jmavsim使用说明

    一 启动 在px4源码目录下输入 make px4 sitl jmavsim 二 基础操作 在操作界面上按F1键 会弹出操作说明 操作说明如下 按照说明可以控制飞机移动 视角控制 F 第一人称视角 S 地面固定视角 G 稳定云台视角 Z 切
  • jsp 页面选项卡

  • 使用阿里巴巴的EasyExcel操作Excel

    引入依赖
  • 使用TortoiseGit执行merge/rebase操作

    如果使用git 相信大家比较多的使用merge 对于rebase则少有陌生 相信刚使用git不久的同学会有一个困惑 经常使用merge会造成破窗效应 查阅log时会掺杂了大量无用的小提交 起初也对此习以为常 毕竟svn就是这样 使用reba
  • js中background-position 无效

    css中正确书写background position x y 坐标之间有空格 然而在写js的时候如果粗心会忘记第一个 px 后面加个空格 正确js书写应该是backgroundposi x px y px
  • Docker基本概念、linux

    Docker的基本概念 一 认识容器 1 1 容器是什么 1 2 对比容器和虚拟机 1 2 1 虚拟化的差异 1 2 2 资源利用总结 二 Docker基本概念 2 1 Docker是什么 2 2 Docker 的思想与核心 2 3 Doc