Docker学习(一):容器介绍

article/2025/11/9 13:16:09

一、什么是容器

  1、容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己的笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、或物理服务器、或公有云主机上运行。

  2、容器与虚拟机的异同:

    容器与虚拟机都是为应用提供封装和隔离。

    容器由两部分组成:

    1)应用程序本身;

    2)依赖部分,如应用程序需要的组件库或其他软件;

    容器在宿主操作系统的用户空间中运行,与操作系统的其他进程隔离,这一点显著区别于虚拟机。

    传统的虚拟化技术,比如VMWare、KVM,目标均是创建完整的虚拟机。为了运行应用程序,除了部署应用自身及其依赖,还需要安装整个操作系统。

    两者区别如下图所示:

    

    由图中对比可知,由于所有的容器共享一个宿主操作系统,这使得容器在体积上要比虚拟机小很多。另外,启动容器不需要启动整个操作系统,所以容器部署和启动速度更快,开销也更小,也更容易迁移。

 二、为什么使用容器

  在谈论为什么使用容器之前,先看一下之前为什么用不着容器。之前的系统,几乎所有的系统均采用三层架构就可以很好的解决使用需求。而当今的系统,需要使用更多的服务,比如MQ、缓存、数据库来构建和组装应用。而且应用程序很可能被部署到不同的环境,比如虚拟服务器、私有云、公有云上。

  所以,对于当今系统一方面应用中包含了多种服务,这些服务有自己所依赖的组件库或软件包;另一方面存在多种部署环境,应用在运行时可能需要动态迁移到不同的环境中,如何保证各个服务能够在各种环境中正常运行就是一个很难解决的问题。

  借助于运输行业集装箱的启发,Docker将集装箱思想运用到软件打包上,为代码提供了一个基于容器的标准化运输系统。Docker可以将任何应用及其依赖打包成一个轻量级、可移植、自包含的容器,容器可以运行在任何操作系统上。

  由此可知,使用容器的原因就是:容器使软件具备了超强的可移植能力。从Docker的标志性图片中,也很形象的表达Docker的思想,像集装箱一样可以方便的运送货物。

   

三、容器的特性 

 

  对于开发人员而言,容器意味着环境隔离和可重复性,开发人员只需为应用创建一次运行环境,然后打包成容器便可以在其他机器上运行。另外,容器环境与所在的宿主系统环境是隔离的,就像虚拟机一样,但是比虚拟机更快更简单。真正实现了Build Once,Run Anywhere(一次运行,到处运行)

  对于运维人员而言,只需要配置好标准的运行环境,服务器就可以运行任何容器。这使得运维人员的工作效率更高,同时也使工作也变得一致和可重复。由此可见,容器消除了开发、测试、生产环境的不一致性。

四、容器生态系统

  一谈到容器,大家都会想到Docker,Docker几乎是容器的代名词。确实,是Docker将容器技术发扬光大,同时围绕Docker还有一个生态系统。

  容器生态系统包括如下几部分:

  1、容器核心技术,就是能够让Container(容器)在宿主系统上运行起来的技术,包括:

    1)容器规范

      除了Docker之外,还有其他容器,如HeroKu、NodeJitsu。为了保障容器之间可以兼容,Docker、CoreOS、Google等公司成立了OCI组织(Open Container Initiative),制定开放的容器规范。

      目前有两种规范:a)Runtime Spec(运行时规范);b)Image Format Spec(镜像规范);这两种规范让不同组织和厂商开发的容器能够在不同的容器Runtime上运行,保证了容器的可移植性和互操作性。

    2)容器Runtime

      容器Runtime是容器真正可以运行的地方,Runtime需要和操作系统kernel紧密协作,为容器提供运行环境。

      目前主流的容器Runtime有:

      a)lxc:运行于Linux上的容器Runtime,可以运行Docker;

      b)runc:是Docker开发的容器Runtime,是现在Docker默认的Runtime;

      c)rkt:是CoreOS开发的容器Runtime,可以运行Docker;

    3)容器管理工具

      容器管理工具对内与Runtime交互,对外为用户提供Interface,比如CLI,可以使用户有工具来管理容器,相关工具有:

      a)lxd是lxc对应的管理工具;

      b)docker engine是对runc的管理工具,该工具包括Deamon和Cli两个部分。对于通常说的Docker,一般指docker engine。

      c)rkt cli是rkt的管理工具;

    4)容器定义工具

      容器定义工具的作用是允许用户定义容器的内容和属性,这样容器就能够被保存,共享和重建。相关工具有:

      a)docker image是docker容器的模板,容器runtime依据docker image创建容器;

      b)docker file是包含若干命令的文本文件,用于创建出docker image;

      c)ACI(App Container Image)与docker image类似,它是由CoreOS开发的rkt容器的image格式;

    5)Registry

      容器是通过image(镜像)创建的,需要有一个仓库来统一存放image,这些仓库就是Registry。

      a)Docker Registry,可以利用Docker Registry构建私有的Registry;

      b)Docker Hub:https://hub.docker.com/ 是Docker为公众提供的托管Registry,上面有许多现成的Image;

      c)Quay.io:https://quay.io 提供与Docker Hub类似的服务;

    6)容器OS

      容器OS是专门运行容器的操作系统,与常规OS相比,容器OS通常体积更小,启动更快。因为是为容器定制的OS,通常它们运行容器的效率会更高。

      a)CoreOS;

      b)atomic;

      c)ubuntu core;

  2、容器平台技术,能够让容器作为集群在分布式环境中运行

    1)容器编排引擎,基于容器的应用一般会采用微服务架构,在这种架构下,不同应用被划分成不同的服务容器集群,集群中的容器会根据业务需要被动态的创建、迁移和销毁。

      所谓容器编排,通常包括容器管理、高度、集群定义和服务发现等。通过容器编排引擎,容器被有机的组合成微服务应用,实现业务需求。编排引擎分为:

      a)swarm:是Docker开发的容器编排引擎;

      b)k8s:google开发的开源容器编排引擎,支持Docker和CoreOS;

      c)mesos+marathon:mesos是一个通用的集群资源调度平台;两者一起提供容器编排引擎功能;

    2)容器管理平台,是在容器编排引擎之上的一个更为通用的平台,通常容器管理平台支持多种编排引擎,抽象了编排引擎的底层实现细节,为用户提供更方便的功能。

      a)Rancher

      b)ContainerShip;

    3)基于容器的Paas,它为微服务应用开发人员提供了开发、部署和管理应用的平台,用户不必关心底层基础设施而专注于应用的开发。

      a)Deis;

      b)Flynn;

      c)Dokku;     

  3、容器支持技术 

    1)容器网络

      容器的出现使网络拓扑变得更加动态和复杂,用户需要专门的解决方案来管理容器与容器、容器与其他实体之间的连通性和隔离性。

      a)Docker Network;

      b)Flannel;

      c)Weave;

      d)Calico;

    2)服务发现

      在微服务应用中,集群会根据负载的强弱对容器进行动态增减,或者根据宿主资源的不同进行动态迁移,容器的IP和端口也会发生变化。服务发现就是提供一种让客户端能够知道如何访问容器提供的服务的机制。服务发现会保存容器集群中所有微服务最新的信息,如IP和端口,以向外提供API。

      a)etcd;

      b)consul;

      c)zookeeper;

    3)监控

      a)docker ps/top/stats;

      b)docker stats API;

      c)sysdig;

      d)cAdvisor/Heapster;

      e)Weave Scope;

    4)数据管理

      容器经常在不同的宿主之间迁移,需要保证持久化数据也能够动态迁移。

      a)Flocker;

    5)日志管理

      日志为问题排查和事件管理提供了重要依据。

      a)docker logs:Docker原生的日志工具;

      b)logspout:对日志提供了路由功能,它可以收集不同容器的日志并转发给其他工具后进行处理;

    6)安全性

      a)OpenSCAP:它能够对容器镜像进行扫描,发现潜在的漏洞;

 

  大家可关注我的公众号  

    

   知识学习来源:CloudMan:《每天5分钟玩转Docker容器技术》  


http://chatgpt.dhexx.cn/article/55jGTJGt.shtml

相关文章

容器基本概念

本节课程要点 什么是容器与镜像?如何构建容器与镜像容器的生命周期容器项目的架构容器 VS.VM 容器与镜像 什么是容器? 在介绍容器的具体概念之前,先简单回顾一下操作系统是如何管理进程的。 首先,当我们登录到操作系统之后&a…

走进波分 -- 15.Optix OSN1800产品介绍

用于城域接入/汇聚层。 盘纤盒,可容纳40根光纤,内部容纳光纤总长度50米 透过内置盘纤盒,构成一体化模块 一个DCM插框可以按照2个DCM模块 直流配电盒,用于安装在机柜上方,给设备供电。AB两部分,互为备份 O…

【PyTorch】Optim 优化器

文章目录 五、Optim 优化器1、SGD 五、Optim 优化器 参考文档:https://pytorch.org/docs/stable/optim.html 1、SGD 参考文档:https://pytorch.org/docs/stable/generated/torch.optim.SGD.html#torch.optim.SGD import torch.optim import torchvisio…

OptioMenu

#OpionMenu.py(可选菜单) from tkinter import *def ok ():print(value is,v.get())root.quit()rootTk() root.geometry(300x300280280)vStringVar(root) v.set(Python)omOptionMenu(root,v,Python,PHP,CPP,C,Java,JavaScript,VBScript) om.pack() buttonButton(root,textOK,co…

Optix7文档阅读(二):基本概念

2. 基本概念和定义 2.1. Program In NVIDIA OptiX 7, a program is a block of executable code on the GPU that represents a particular shading operation. This is called a shader in DXR and Vulkan. For consistency with prior versions of NVIDIA OptiX 7, the ter…

初次尝试OpitX +CMake

** 初次尝试OptiX CMake ** 首先安装好cuda、vs、OptiX和CMake 在OptiX的SDK文件(C:\ProgramData\NVIDIA Corporation\OptiX SDK 7.1.0\SDK)中找到CMakeLists.txt ,将其拖入CMake中,在CMake点击Configure ,完成后点…

Instant-ngp Windows11安装、使用记录

Instant NeRF - Study&Debug 本机配置 Y9000P RTX3060 Win11 Instant NeRF - Study&Debug1. Git2. Cmake3. instant-ngp示例数据自定义数据注意事项问题疑惑 1. Git 正常下载安装,启动Git Bash 设置用户名 $ git config --global user.name "**&q…

Houdini17 OptiX Denoise使用

Houdini17 OptiX Denoise使用 NVIDIA Optx Denoiser第一步 下载安装第二步 启用第三步 打开面板中的按钮一句卧槽走天下! NVIDIA Optx Denoiser NVIDIA Optx Denoiser是一个后处理的算法,在Houdini17中可以被开启使用 第一步 下载安装 点击 Render/ D…

HTML中option和input的区别,option

手机评站网今天精心准备的是《option》,下面是详解! option键是哪一个? 我的键盘上没有option字样的键,请问它指的是哪一个??... 我的键盘上没有option字样的键,请问它指的是哪一个?…

十四、OPTIM

一、torch.optim torch.optim.Optimizer(params, defaults)优化器官网说明 由官网给的使用说明打开看出来优化器实验步骤: ①构造选择优化器 例如采用随机梯度下降优化器SGD torch.optim.SGD(beyond.parameters(),lr0.01),放入beyond模型的参数param…

GPU开发环境搭建(CUDA和 OptiX)

Optix是英伟达一直推出的闭源光线跟踪(rayTracing)引擎 CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复…

Intel OpenImageDenoise VS Nvidia Optix 降噪结果对比

说明:原始图像(Raytracing的直接输出结果,每一幅的左图)为PPM格式, 一、OIDN 按照官方文档提示,先用ImageMagick转换成pfm格式,再将其作为oidn的输入,输出亦为pfm。 magick conve…

OTN技术及华为OTN设备简介

OTN技术及华为OTN设备简介 城域波分环四环五即将进行建设,本次工程采用华为华为下一代智能光传送平台OTN设备OptiX OSN 8800和OptiX OSN 6800。本文主要对OTN技术涉及的网络结构、复用方式、帧结构、ROADM技术和OptiX OSN 8800和OptiX OSN 6800设备特点及本次工程配…

【OptiX】第0个示例 OptixHello 学习Optix的工程配置以及基本框架

首先需要查看本博客的这篇文章:【Optix】Optix介绍与示例编译 把该安装的工程都安装好。可以按照本文所说的顺序创建和理解代码,也可以在本文末尾下载到已经配置好的代码。建议首先在本文末尾处下载代码,编译通过,这样配合文件看心…

OptiX-7入门教程

OptiX是英伟达专为光线追踪打造的SDK,但是他的官方案例都比较复杂,包含了大量初始化相关的代码,初学容易一头雾水。 本人跟着Github上的optiX7course一步步学习才算入门。这个课程是Siggraph 2019/2020上的OptiX课程,有源码&…

optix入门

射线追踪是embarrassingly parallel/perfectly parallel/pleasingly parallel的问题,就是说基本不用费劲就可以并行化。 射线追踪是指从某点发射射线,判断其与几何结构的交点,根据交点对图像进行渲染,或者计算。 nvidia optix是基…

jwt *

目录 一、jwt出现的原因及工作原理 1. JWT是什么 2. 为什么使用JWT 3. JWT的工作原理 4、jwt解决不需要登录就能直接访问的问题: 解决登录后树形菜单未出现的问题 : 二、jwt工具类介绍,三种场景 1、jwt工具类 2、三种场景 三、jwt…

JWT JWT

JWT(JSON WEB TOKEN) JWT的组成 header(头部):中主要存储了两个字段 alg,typ。 alg表示加密的算法默认(HMAC SHA256),typ表示这个令牌的类型默认为JWT。 payload&#…

JWT__

文章目录 JWT什么是JWT?JWT能做什么?认证流程JWT的结构是什么?使用代码要做一个JWT的例子引入pom依赖生成一个Token令牌验证令牌并从令牌中取出信息 JWT 什么是JWT? 官网地址:https://jwt.io/introduction/ 官方文档 JSON Web T…

JWT 和 JJWT 还傻傻的分不清吗

JWTs是JSON对象的编码表示。JSON对象由零或多个名称/值对组成,其中名称为字符串,值为任意JSON值。 JWT有助于在clear(例如在URL中)发送这样的信息,可以被信任为不可读(即加密的)、不可修改的(即签名)和URL - safe(即Base64编码的)。 JSON W…