首页 > 其他分享 >简述Docker背后的容器化技术

简述Docker背后的容器化技术

时间:2024-11-24 09:33:43浏览次数:8  
标签:容器 操作系统 虚拟机 程序 简述 启停 Docker docker

目录

一、简介

二、docker到底是解决了什么问题?

1.镜像庞大

2.启停速度过慢

3.性能损耗大

4.docker

三、总结


一、简介

Docker,翻译过来就是码头工人

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。

小知识:沙盒也叫沙箱(sandbox)。在计算机领域指一种虚拟技术,而且多用于计算机安全技术。安全软件可以让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何危害。

Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源码托管在Github上,基于go语言并且遵从Apache2.0协议开源。
GitHub地址:https://github.com/moby/moby

小知识:LXC为Linux Container的简写。Linux Container 容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。
LXC主要通过Kernel的namespace实现每个用户实例之间的项目隔离,通过cgroup实现对资源的配额和调度。

docker官网:https://www.docker.com
docker中文库:https://www.docker.org.cn/

二、docker到底是解决了什么问题?

我们来了解一下再没有docker之前工业界是如何解决程序部署运行问题的。

其实也没有什么花里胡哨的,在容器化技术还没有成熟之前,工业界要想部署一个程序,是直接把程序部署到物理服务器上然后暴露其ip地址的。

然后通过ststemd类的守护类程序把多个业务程序部署并管理起来,手动或自动的管理程序的启动和停止,还可以直观的查看每个业务程序的运行情况。

但是这种情况只管理了业务程序本身,并没有管理到业务程序的依赖。我们的程序不仅仅是只有程序文件本身就可以跑起来的,往往是有很多依赖组合起来才能正常运行,比如控制台组件、消息中间件、缓存中间件、分布式文件管理系统等等。往往一个业务程序就有好多个依赖绑定在一起,而多个业务程序所绑定的依赖版本也有可能不一致导致冲突。如下图所示:

而且这些依赖还是易变的,经常出现以来版本变更,新增或删减依赖的情况也是经常出现的。

因此无数个工程师尝试解决以上这个问题,最简单且直接的一个方案就是:出现上述问题的根本就是程序和依赖相耦合,那我们直接把程序和依赖一体化作为一个不可拆分的单元来管理。

因此当时的解决方案就是把程序和依赖放在一个虚拟机中独立管理,把虚拟机作为程序管理部署的基本单位。

虽然虚拟机为我们解决了依赖问题,但是也给我们带来了一些新的问题,主要在以下三点:

1、镜像庞大

2、启停速度慢

3、性能损耗大

因此我们需要一个终极的方案,在解决程序依赖问题的同时也解决虚拟机带来的三个问题。

因此容器化技术应运而生,那容器化技术是怎么解决以上三个问题的呢?

1.镜像庞大

镜像庞大问题往往是因为虚拟机中存储了运行操作系统所需要的所有系统文件,而对于同一系列的不同版本的操作系统来说,那你就存在大量相同的系统文件,这就是镜像庞大的问题来源。

那我们解决这一问题的方案也很简单,就是把那些相同的系统文件抽取出来就好。

 然后当虚拟机2想要更改系统文件,那就把系统文件复制一份给虚拟机2就好了,这就是典型的copy-on-write的思想。

2.启停速度过慢

启停速度过慢的原因是每一次启动程序的时候都会对操作系统也做一次启停,如果启停大量的程序那就会启停很多次操作系统,所以我们就要把对操作系统的启停去掉就好了。

但是这样就动摇了虚拟机的根基了,虚拟机的核心思想是与操作系统隔离,完成操作系统的启停显然是要独立起来的,所以我们要自己实现一个“轻量化虚拟机”,把操作系统相关的启停开销给去掉。

因此通过namespace和CGroup隔离技术就可以将一个程序隔离起来独立启动,这时候就可以称之为一个“容器”了。

3.性能损耗大

出现上述问题的原因是:我们把多个程序部署在多个虚拟机上,而虚拟机本质也是一个完整的操作系统环境,多个程序运行在多个系统和多个程序运行在同一系统上相比,会出现很多操作系统上行为的重复和冗余,而这些重复和冗余就意味着对各个硬件资源的使用消耗,类似CPU、GPU等硬件。

而我们在第二点问题的解决方案--“容器”就基本解决了这个问题,把多个程序隔离开来而共同使用同一系统内核来减少对硬件资源的使用消耗。

4.docker

那么docker是什么?docker就是上面三个问题的解决方案的打包整合。

三、总结

 这也是典型的封装思想,将复杂的程序和依赖关系封装在一个docker镜像当中,外界不需要在意其内在的实现方式,只需要使用暴露出来的接口即可。

关于docker的使用步骤,可以参考以下博客:docker入门,这一篇就够了。-CSDN博客

标签:容器,操作系统,虚拟机,程序,简述,启停,Docker,docker
From: https://blog.csdn.net/csdn3043663729/article/details/143994473

相关文章

  • Docker:Docker部署Jenkins并共用宿主机Docker部署微服务多模块(一)Jenkins部署及插件环境
    前言公司项目多忙着开发,所有项目服务都是博主一个个部署的,时间久了也是心累,所以抽时间把Jenkins部署上,之后让其他开发人员自己部署(让我解脱吧!!)。部署Jenkins容器Docker安装就不在赘述了,可以看我之前的文章(懒了);直接开始拉取jenkins镜像。拉取镜像dockerpulljenkins/jenki......
  • 【Docker】数据卷(容器数据管理)
    文章目录一、前言二、数据卷三、数据卷(volume)操作命令四、案例:创建和查看数据卷一、前言在之前的nginx案例中,修改nginx的html页面时,需要进入nginx内部。并且因为没有编辑器,修改文件也很麻烦。这就是因为容器与数据(容器内文件)耦合带来的后果。要解决这个问题,必须......
  • Docker 理论与实操指南
    1.简介Docker是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。Docker的官方地址是https://docs.docker.com/。无论是应用开发者、运维人员、还是其他信息技术从业人员,都有必要......
  • docker 存储卷实验
    需求:创建1个myvolume1的空卷,将其挂载给web1的容器,挂载目录/usr/local/apache2/htdocs运行两个web2web3的容器,更新web2中容器内容为Thisisatest!通过宿主机访问web3查看输出内容。dockervolumecreatemyvolume1dockerrun-d--nameweb2-p82:80-vmyvolume1:/usr/l......
  • 『玩转Streamlit』--布局与容器组件
    在Streamlit中,布局类组件扮演着至关重要的角色。它们不仅决定了应用程序的视觉呈现和用户体验,也极大地增强了页面内容的组织性和可读性。通过这些组件,开发者可以灵活地划分页面空间,创建出清晰、有条理的布局结构。本篇主要介绍3种构建StreamlitApp时常用的3种布局类组件:st.c......
  • docker搭建私有的仓库
    docker搭建私有仓库一、为什么要搭建私有的仓库?因为在国内,访问:https://hub.docker.com/会出现无法访问页面。。。。(已经使用了魔法)当然现在也有一些国内的镜像管理网站,比如网易云镜像服务、DaoCloud镜像服务、阿里云镜像服务等。但是有些收费的。戛然而止了。我们可以自......
  • 本地Docker部署开源可视化实时监控工具Netdata并实现远程监测系统性能数据
    文章目录前言1.关于Netdata2.本地部署Netdata3.使用Netdata4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定Netdata公网地址前言本文主要介绍如何在LinuxUbuntu系统使用Docker本地部署Netdata,并结合cpolar内网穿透工具实现远程访问本地服务器上的Netdata,轻......
  • docker命令
    文章目录docker操作命令1.帮助命令2.操作镜像相关3.操作容器命令4.查看容器日志相关5.查看镜像的元信息6.进入正在运行的容器7.拷贝文件相关docker操作命令1.帮助命令dockerversion#显示docker的版本信息。dockerinfo#显示docker的系统信息,包......
  • CentOS Docker 安装
    参考地址:https://www.runoob.com/docker/centos-docker-install.html CentOSDocker安装Docker支持以下的64位CentOS版本:CentOS7CentOS8更高版本...使用官方安装脚本自动安装安装命令如下:curl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyu......
  • 【Python各类容器】
    目录1.列表(可变类型)1.1列表的定义1.2 列表的下标索引1.3 列表的增删改查1.4 列表的遍历2元组(不可变类型)2.1元组的定义2.2 元组的下标索引2.3元组的查2.4元组的遍历3 字符串(不可变类型)3.1 字符串的定义3.2字符串的下标索引3.3 字符串的查3.4字符串......