当前位置:首页 > 技术之家 > docker > 正文内容

Docker简介

1、是什么

问题:为什么会有docker出现

假定你在开发一个网络商城,您使用的是一台笔记本电脑而且您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。此外,您的企业还拥有标准化的测试和生产环境境,且具有自身的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销。请问?您要如何确保应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复?

答案:就是使用容器。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案-----系统平滑移植,容器虚拟化技术。

传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等(java为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让维运团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。Docker的出现使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

2、docker理念

Docker是基于Go语言实现的云开源项目。

Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。

Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

  • 一句话

    • 解决了运行环境和配置问题的软件容器, 方便做持续集成并有助于整体发布的容器虚拟化技术。

  • 容器与虚拟机比较

    • 容器发展简史

  • 传统虚拟机技术

虚拟机(virtual machine)就是带环境安装的一种解决方案。

它可以在一种操作系统里面运行另一种操作系统,比如在Windows10系统里面运行Linux系统CentOS7。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。  

Win10

VMWare

Centos7

各种cpu、内存网络额配置+各种软件

虚拟机实例

虚拟机的缺点:资源占用多、冗余步骤多、启动慢

  • 容器虚拟化技术

由于前面虚拟机存在某些缺点,Linux发展出了另一种虚拟化技术:

Linux容器(Linux Containers,缩写为 LXC)

Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。

Linux 容器不是模拟一个完整的操作系统而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

区别:Docker 容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统虚拟机则是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker 优势体现为启动速度快、占用体积小。

  • 对比

关系

对比 - 指向 底层原理

比较了 Docker 和传统虚拟化方式的不同之处:

*传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;

*容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

* 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

 

  • 开发/运维(DevOps)新一代开发工程师

    • 一次构建、随处运行

    • 更快速的应用交付和部署

传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

  • 更便捷的升级和扩缩容

随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

  • 更简单的系统运维

应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。

  • 更高效的计算资源利用

Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。

  • Docker应用场景

  • 下载地址

    • Docker Hub官网: https://hub.docker.com

    • docker官网:http://www.docker.com

    • 官网

    • 仓库


    扫描二维码推送至手机访问。

    版权声明:本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:luxd@aliyun.com,感谢支持理解。


    本文链接:https://luxd.cc/post/232.html

    “Docker简介” 的相关文章

    linux docker离线安装部署_下载安装包

    linux docker离线安装部署_下载安装包

    1、目的在可以连接互联网的情况下,可以在线安装Docker《Linux下Docker安装部署》,如果遇到内网服务器就没有办法进行在线安装,那么需要使用离线安装的方法。2、下载安装包创建工作文件夹:mkdir /opt/docker复制docker安装包下载地址:https://downlo...

    docker错误:Error response from daemon No command specified

    docker错误:Error response from daemon No command specified

    docker错误:Error response from daemon: No command specified记录一次docker 加载镜像启动后,出错的问题。操作记录:在执行docker save -o xxx.tar  xxx1时,没有使用镜像的名字加版本号的方式,而是采用了镜像i...

    docker compose是个什么东东,它和docker到底有什么区别

    docker compose是个什么东东,它和docker到底有什么区别

    Docker Compose是一个使用Compose文件格式定义的Docker上运行多容器应用程序的工具(Docker Compose is a tool for running multi-container applications on Docker defined using the Com...

    docker从入门到精通,看这一篇就够了

    docker从入门到精通,看这一篇就够了

    一、Docker简介1、背景物理机时代一个物理机上安装操作系统,然后直接运行我们的软件。也就是说你电脑上直接跑了一个软件,并没有开虚拟机什么的,资源极其浪费。缺点  ·  部署慢  ·  成本高虚拟机都不开,直接上物理机部署应用,那成本能不...

    DOCKER 第一步

    DOCKER 第一步

    基本概念Docker 包括三个基本概念镜像( Image )容器( Container )仓库( Repository )容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序...

    DOCKER 第二步 现有 CentOS8 系统打包 Docker 镜像

    DOCKER 第二步 现有 CentOS8 系统打包 Docker 镜像

    一、现有系统 Centos8.5 操作:系统里最好不安装 Docker,否则会报错卸载不必要软件包ndf remove -y iwl* *firmware* --exclude=kernel-firmware清理yum缓存ndf clean allrm -rf /var/cache/dnf ...