docker是干什么的

admin 轻心小站 关注 LV.19 运营
发表于docker交流版块

1、Docker是什么Docker 是一个开源的应用容器引擎 Docker是一个基于轻量级虚拟化技术的容器,整个项目基于Go语言开发,并采用了Apache 2.0协议。Docker可以将我们的应用程序

1、Docker是什么
Docker 是一个开源的应用容器引擎

    Docker是一个基于轻量级虚拟化技术的容器,整个项目基于Go语言开发,并采用了Apache 2.0协议。Docker可以将我们的应用程序打包封装到一个容器中,该容器包含了应用程序的代码、运行环境、依赖库、配置文件等必需的资源,通过容器就可以实现方便快速并且与平台解耦的自动化部署方式,无论你部署时的环境如何,容器中的应用程序都会运行在同一种环境下。

    Docker 其中包括 镜像、容器、仓库,很简单,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品(可以是 web 应用或者数据库应用)及其环境能够做到“一次封装,到处运行”。

1.1 镜像-(概念:复制的程序)
定义:Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

    类似于虚拟机中使用到的镜像,由于任何应用程序都需要有它自己的运行环境,Image就是用来提供所需运行环境的一个模板。可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)

作用 : Docker镜像是用来启动容器的,也用来创建新的容器,类似于虚拟机的快照。
特点 : 镜像不包含任何动态数据,其内容在构建之后也不会被改变,在Docker里可以创建镜像,也可以从第三方的网站上下载别人已经做好的镜像来使用

Image

1.2 Container容器-(概念:集装箱)
定义 : 一个Docker镜像可以实例化出来多个容器,而每一个容器之间是独立运行的,没有任何依赖

    Container是Docker提供的一个抽象层,它就像一个轻量级的沙盒,其中包含了一个极简的Linux系统环境与运行在其中的应用程序。Container是Image的运行实例(Image本身是只读的,Container启动时,Docker会在Image的上层创建一个可写层,任何在Container中的修改都不会影响到Image,如果想要在Image保存Container中的修改,Docker采用了基于Container生成新的Image层的策略),Docker引擎利用Container来操作并隔离每个应用(也就是说,每个容器中的应用都是互相独立的)。

作用 : 运行程序员开发的应用程序的
特点 : Docker镜像是不能运行的,是静态的,而Docker容器是运行的,是动态的,可以将Docker容器想像成一个简化版的操作系统和一些核心基础的应用。每个容器运行一个独立的应用程序。

1.3 仓库-(概念:存放镜像的地方)
定义 : Docker仓库提供一个注册服务器,用于存储多个仓库,而仓库是用来存储镜像位置的
作用: 我们自已创建了一个镜像之后,可以使用push命令将镜像文件上传到仓库中,后期如果在其它服务器上需要使用镜像,就可以从仓库上下载过来并使用
总结: 说白了镜像就等于一个centos系统的安装程序,一个镜像只是一个只读环境而已,这个镜像提供的是基础的运行环境,而你在Centos7系统中安装的应用,比如Redis,Mysql这些应用就相当于一个容器,这些容器都是单独可运行的,仓库的概念就更好理解了,在Centos7系统中下载的所有应用都被收集到同一个仓库里了,比如Maven仓库

2、Docker有什么用
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

2.1.简化配置
这是Docker初始目的,虚拟机VM最大的好处是基于你的应用配置能够无缝运行在任何平台上。Docker提供同样类似VM的能力,但是没有任何副作用,它能让你将环境和配置放入代码然后部署,同样的Docker配置能够在各种环境中使用,这实际是将应用环境和底层环境实现了解耦。

2.2.代码管道化管理
能够对代码以流式pipeline管道化进行管理,从开发者的机器到生产环境机器这个流程中都能有效管理。因为在这个流程中会有各种不同的环境,每个都可能有微小的区别,Docker提供了跨越这些异构环境以一致性的微环境,从开发到部署实现流畅发布。

2.3.开发人员的生产化
在一个开发环境,我们希望我们的开发环境能更加接近于生产环境,我们会让每个服务运行在自己的VM中,这样能模拟生产环境,比如有时我们并不总是需要跨越网络连接,这样我们可以将多个Docker装载一系列服务运行在单机上最大程度模拟生产分布式部署的环境。

2.4.应用隔离
有很多理由你需要在一台机器上运行多个应用,这就需要将原来铁板一块monolithic的应用切分为很多微服务。实现应用之间的解耦,将多个应用服务部署在多个Docker中能轻松达到这个目的。

2.5.服务合并
使用Docker也能合并多个服务以降低费用,不多的操作系统内存占用,跨实例共享多个空闲的内存,这些技术Docker能以更加紧密资源提供更有效的服务合并。

2.6.多租户
Docker能够作为云计算的多租户容器,使用Docker能容易为每个租户创建运行应该多个实例,这得益其灵活的快速环境以及有效diff命令。

2.7.快速部署
Docker通过创建进程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁资源,不用担心额外消耗。典型的数据中心利用率是30%,通过更积极的资源分配,以低成本方式对一个新的实例实现一个更聚合的资源分配,我们很容易超过这个利用率,大大提高数据中心的利用效率。

3、为什么使用Docker?
当我们在工作中,一款产品从开发设计到上线运行,其中需要开发人员和运维工程师,开发人员负责代码编写,开发产品,运维工程师需要测试环境,产品部署。这之间就会有分歧。

    好比一个正常的java项目,其中包括 Java 环境/Tomcat/ MySQL / JDBC 驱动包/相应 jar 包,还有SSM框架等技术,在windows系统上配置环境,保证项目正常运行,就需要大量时间来调试,技术人员往往在windows系统上开发及调试,那么上线的时候需要部署到linux系统中,这就会导致由于环境不同的产品部署问题。

    往往就算不跨系统,而是换一台同样操作系统的服务器,要移植部署依然很麻烦,那么为了解决这个问题,Docker就体现出了他的用处!

4 结论
绝大部分应用,开发者都可以通过docker build创建镜像,通过docker push上传镜像,用户通过docker pull下载镜像,用docker run运行应用。用户不需要再去关心如何搭建环境,如何安装,如何解决不同发行版的库冲突,而且通常不会需要消耗更多的硬件资源,不会明显降低性能。这就是所说的标准化、集装箱的原因所在。

    解决运行环境不一致所导致的问题。这样就不会产生“本地运行没问题,可一到服务器上就不行了”的情况,限定最大的cpu使用内存硬盘,这样就起到了隔离的作用,避免产生“一块代码产生死循环,把磁盘占满了,其它程序也挂了”的情况。
    docker的标准化让快速扩展,弹性伸缩变得简单

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

文章说明:

本文原创发布于探乎站长论坛,未经许可,禁止转载。

题图来自Unsplash,基于CC0协议

该文观点仅代表作者本人,探乎站长论坛平台仅提供信息存储空间服务。

评论列表 评论
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
社区管理员:
发布评论

评论: docker是干什么的

粉丝

0

关注

0

收藏

0

已有0次打赏