学习Docker前,我们有必要了解下Docker的前生LXC(Linux Container)。

一、LXC介绍

LXC 可以提供轻量级的虚拟化,用来隔离进程和资源,和我们传统观念中的全虚拟化完全不一样,非常轻量级。LXC 可以将单个操作系统管理的资源划分到独立的组中,和传统的虚拟化技术相比,LXC 有如下一些优势:

和宿主机使用同一个内核,所以性能损耗小

不需要指令级模拟

不需要即时编译

容器可以在 CPU 核心的本地运行指令,不需要任何专门的解释机制

避免了虚拟化和系统调用中的复杂性

轻量级隔离,隔离的同时还可以和宿主机共享资源

LXC 有点像 chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但是和虚拟机又不一样,因为 LXC 是一种操作系统层面上的资源的虚拟化。

chroot 简介

chroot(change root),在 Linux 系统中,系统默认的目录就都是以 / 也就是根目录开头的,chroot 的使用能够改变当前的系统根目录结构,通过改变当前系统的根目录,我们能够限制用户的权利,在新的根目录下并不能够访问旧系统根目录的结构个文件,也就建立了一个与原系统完全隔离的目录结构。

二、什么是 Docker

Docker 并不是 LXC 替代品,Docker 底层就是使用的 LXC 来实现,LXC 将 Linux 进程沙盒化,使得进程之间相互隔离,还可以共享宿主机的资源。在 LXC 的基础上,Docker 提供了一系列更加强大方便的功能,使得 Docker 成为了现在最火的虚拟化技术。

由于之前我们的后台在开发和运维阶段的环境是不一致的,这就导致了 Docker 的出现,因为我们通过 Docker 可以将程序运行的环境也一起打包到版本控制去了,这样就排除了因为环境不同造成的各种麻烦事情了,也不会出现在本地可以在线上却不行这样的窘境了。

Docker 是一个开源的应用容器引擎,基于 go 语言开发,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 服务器。容器是一个沙箱机制,相互之间不会有影响(类似于我们手机上运行的 app),并且容器开销是很低的。

用官方的话来说,Docker 受欢迎,是因为以下几个特点:

  • 灵活性:即使是最复杂的应用也可以集装箱化
  • 轻量级:容器利用并共享主机内核
  • 可互换:您可以即时部署更新和升级
  • 便携式:您可以在本地构建,部署到云,并在任何地方运行
  • 可扩展:您可以增加并自动分发容器副本
  • 可堆叠:您可以垂直和即时堆叠服务

三、Docker 几个重要概念

在了解了 Docker 是什么之后,我们需要先了解下 Docker 中最重要的3个概念:镜像、容器和仓库。

3.1 镜像

是一个只读模板,带有创建 Docker 容器的说明,一般来说的,镜像会基于另外的一些基础镜像并加上一些额外的自定义功能来组成。比如,你可以构建一个基于 Centos 的镜像,然后在这个基础镜像上面安装一个 Nginx 服务器,这样就可以构成一个属于我们自己的镜像了。

3.2 容器

是一个镜像的可运行的实例,可以使用 Docker REST API 或者 CLI 命令行工具来操作容器,容器的本质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

3.3 仓库

registry 是用来存储 Docker 镜像的仓库,Docker Hub 是 Docker 官方提供的一个公共仓库,而且 Docker 默认也是从 Docker Hub 上查找镜像的,当然你也可以很方便的运行一个私有仓库,当我们使用 docker pull 或者 docker run 命令时,就会从我们配置的 Docker 镜像仓库中去拉取镜像,使用 docker push 命令时,会将我们构建的镜像推送到对应的镜像仓库中,registry 可以理解为用于镜像的 github 这样的托管服务。

四、容器和虚拟机

上面我们说到了容器是在 Linux 上本机运行,并与其他容器共享主机的内核,它运行一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。

而虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源需要更多,但是非常安全,因为是独立的操作系统,独立的内核。

来自官网 https://www.docker.com/resources/what-container/

下一篇将介绍支持Docker的底层技术

(转发请注明出处:http://www.cnblogs.com/zhangyongli2011/ 如发现有错,请留言,谢谢)

Docker基本概念(LXC?镜像、容器、仓库是什么?容器和虚拟机又是什么?)(一)的更多相关文章

  1. docker核心概念(镜像、容器、仓库)及基本操作

    概要 docker是一种linux容器技术.容器有效的将由单个操作系统挂管理的资源划分到孤立的组中,以便更好的在组之间平衡有冲突的资源使用需求.可简单理解为一种沙盒 .每个容器内运行一个应用,不同的容 ...

  2. Docker概念学习系列之Docker核心概念之镜像Image

    不多说,直接上干货! 说明:   Docker 运行容器之前需要本地存在对应的镜像,如果镜像不存在,Docker 会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户 ...

  3. 后端技术杂谈9:先搞懂Docker核心概念吧

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  4. 《第一本docker书》第4章 使用docker镜像和仓库 读书笔记

    docker最底端是一个引导文件系统,即bootfs. 第二层是root文件系统rootfs,位于引导文件系统之上. 在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并 ...

  5. Docker for .Net Developers(part1:Docker基本概念介绍)

    一.什么是Docker 目前,.Net 社区中很可能会用到的两个词是“微服务”和“Docker”. 这两个主题都非常引人注目,并为开发人员和架构师带来兴奋之情. 在这个新系列的博客文章中,我把自己最近 ...

  6. Docker 基本概念(三)-生命周期详解(镜像、容器、仓库)

    Docker三大组件:镜像.容器.仓库.  一.镜像 1 从仓库获取镜像 #一.从仓库获取镜像,帮助命令:docker pull -help 命令:docker pull [选项] [docker R ...

  7. Docker 镜像 容器 仓库

    Docker 包括三个基本概念镜像(Image)容器(Container)仓库(Repository) Docker 镜像 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资 ...

  8. docker基本概念,创建、起动实例,保存自定义镜像等常用操作

    14年docker火了一阵,当时自学整理了一份文档,后来冷落了. 现在发现很多同事还是想学习docker,但无从下手,所以重新整理了这篇分享,10分钟就可以带你彻底理解docker,并能够创建属于自己 ...

  9. Docker之- 使用Docker 镜像和仓库

    目录 使用Docker 镜像和仓库 什么是 Docker 镜像 列出 Docker 镜像 tag 标签 Docker Hub 拉取镜像 查找镜像 构建镜像 创建Docker Hub 账号 使用 Doc ...

  10. docker镜像的仓库

    一.docker镜像的仓库 --- repos-registry的创建: 仓库分为公共仓库和私有仓库 DockerHub的官方仓库 https://hub.docker.com DockerPool社 ...

随机推荐

  1. python获取引用对象的个数

    python获取引用对象的个数 使用sys.getrefcount()来获取当前对象被引用了多少次,返回的结果比实际大1 import sys class A: pass a = A() #创建实例对 ...

  2. 一文带你了解CAP的全部特性,你学会了吗?

    目录 前言 消息发布 携带消息头 设置消息前缀 原生支持的延迟消息 并行发布消息 事务消息 事务消息发送 事务消息消费 事务补偿 消息处理 序列化 过滤器 消息重试 多线程处理 自动恢复/重连 分布式 ...

  3. C#/.NET/.NET Core优秀项目和框架2024年7月简报

    前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍.功能特点.使用方式以及部分功能截图 ...

  4. 6、SpringBoot2之整合Mybatis

    创建名为springboot_mybatis的新module,过程参考3.1节 6.1.引入相关依赖 注意:虽然本文使用的是 spring boot 2.7.18 和 MySQL 5.7 ,但是出于可 ...

  5. 关于“内网穿透”的一些知识(续3)—— NAT类型判断

    前文: 关于"内网穿透"的一些知识(续2)-- 端口预测 ------------------------------------------- 本文是对前面几篇文章的补充.这里要 ...

  6. 循环神经网络 —— LSTM 有状态模型(stateful LSTM)和无状态模型(stateless LSTM)

    相关参考: 训练后的LSTM模型在进行预测时的初始h_n和c_n是什么或应该怎么设置? Keras中对RNN网络的statefull和stateless设置: 链接:https://keras.io/ ...

  7. Ubuntu18.04系统下网络文件系统nfs的安装及简单配置

    硬件环境: 两台Ubuntu18.04服务器使用局域网连接,IP分别为192.168.11.66 和 192.168.11.206. ================================= ...

  8. 对国产AI计算框架要有一定的包容力——记“mindspore”使用过程中的“不良反应”

    看mindspore的官方文档,居然有502错误,恶心到了: 打开Eager模式的链接,报错:

  9. Linux环境下配置vscode的C/C++ 的make编译环境(编写makefile方式)代码Demo版

    以前写过同样话题下的图文版的,这里给出一个代码Demo版本,上一个图文版本参见: Linux环境下配置vscode的C/C++ 的make编译环境(编写makefile方式) ============ ...

  10. vue之事件监听v-on

    1.背景 2.简单使用 2.1.做一个简单的点击计数器 <!DOCTYPE html> <html lang="en" xmlns:v-on="http ...