一、认识Docker

一、认识Docker

1、Docker图标

鲸鱼身处的大海 —— 宿主机系统!
鲸鱼 —— docker
集装箱 —— container ;container 是来自于 image 模板!

2、什么是Docker?

        Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。Docker是一个重新定义了程序开发测试、交付和部署过程的开放平台,Docker则可以称为构建一次,到处运行,这就是Docker提出的"Build once,Run anywhere"。

3、Docker架构和概念

4、Docker 的 核心概念( image、container、repository)

image:
镜像是创建docker容器的基础,docker镜像类似于虚拟机镜像,可以将它理解为一个面向docker引擎的只读模块,包含文件系统。
创建镜像有两种方法:
(1) 基于已有镜像的容器创建。主要是利用docker commit命令。
(2) 基于dockerfile创建。
首先按照dockerfile的格式,编写好dockerfile文件,之后通过docker build命令来创建镜像。docker build会读取制定的dockerfile,由docker服务器来创建镜像.

container:
容器是从镜像创建的应用运行实例,容器之间是相互隔离、互不可见的。可以把容器看做一个简易版的linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在这个环境上的应用打包而成的应用盒子。
镜像自身是自读的,容器从镜像启动的时候,docker会在镜像的最上层创建一个可写文件层,镜像本身保持不变。
可以利用docker create命令创建一个容器,创建后的的容器处于停止状态,可以使用docker start命令来启动它。也可以运行docker run命令来直接从镜像启动运行一个容器。docker run = docker creat + docker start。
     当利用docker run创建并启动一个容器时,docker在后台的标准操作包括:
    (1)检查本地是否存在指定的镜像,不存在就从公有仓库下载。
    (2)利用镜像创建并启动一个容器。
    (3)分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。
    (4)从宿主机配置的网桥接口中桥接一个虚拟的接口到容器中。
    (5)从地址池中配置一个IP地址给容器。
    (6)执行用户指定的应用程序。
    (7)执行完毕后容器终止。
    
repository:
仓库类似于代码仓库,它是docker集中存放镜像文件的场所。
需要注意的是仓库(repository),不要将docker仓库和仓库注册服务器(registry)混淆。
仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库。
每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来区分。

5、Docker应用场景

1、快速部署环境
    在虚拟机之前,引入新的硬件资源需要消耗几天的时间。虚拟化技术(Virtualization)将这个时间缩短到了分钟级别。而Docker通过为进程仅仅创建一个容器而无需启动一个操作系统,再次将这个过程缩短到了秒级,可以快速完成搭建开发和运行所需环境,不再需要繁琐的搭建环境步骤。
2、多租户环境
    使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,当然这一切得益于Docker环境的启动速度和其高效的diff命令。Docker在多租户的应用中,它可以避免关键应用的重写。我们一个特别的关于这个场景的例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。
3、升级回滚
    一次升级,往往不仅仅是应用软件本身的升级,通过还会包含依赖项的升级。
但新旧软件的依赖项很可能是不同的,甚至是有冲突的,所以在传统的环境下做回滚一般比较困难。
如果使用docker,我们只需要每次应用软件升级时制作一个新的docker镜像,升级时先停掉旧的容器,
然后把新的容器启动。 需要回滚时,把新的容器停掉,旧的启动即可完成回滚,整个过程各在秒级完成,非常方便。
4、内部开发环境
    在容器技术出现之前,公司往往是通过为每个开发人员提供一台或者多台虚拟机来充当开发测试环境。
开发测试环境一般负载较低,大量的系统资源都被浪费在虚拟机本身的进程上了。
docker容器没有任何CPU和内存上的额外开销,很适合用来提供公司内部的开发测试环境。
而且由于docker镜像可以很方便的在公司内部分享,这对开发环境的规范性也有极大的帮助。
5、多版本混合部署
    随着产品的不断更新换代,一台服务器上部署多个应用或者同一个应用的多个版本在企业内部非常常见。
但一台服务器上部署同一个软件的多个版本,文件路径、端口等资源往往会发生冲突,造成多个版本无法共存的问题。
如果用docker,这个问题将非常简单。由于每个容器都有自己独立的文件系统,所以根本不存在文件路径冲突的问题;
对于端口冲突问题,只需要在启动容器时指定不同的端口映射即可解决问题。

6、Docker 优缺点

Docker 的优点

1、简化程序:
    Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的部署任务,在Docker容器的处理下,只需要数秒就能完成。
2、比传统虚拟机技术更高效的利用系统资源
      由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利Docker对系统资源的利用率比传统虚拟机技术更高,也因此Docker有着比虚拟机更少的抽象层,所以Docker无论是应用程序执行速度,文件存储速度或者内存损耗,都要比传统虚拟机技术更高效。因此,Docker可以在同样的主机上运行更多应用和更少的消耗。
3、更快速启动时间
       Docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。我们知道,引导、加载操作系统内核是一个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个过程,因此新建一个docker容器只需要几秒钟。因此可以做到Docker秒级,甚至毫秒级的启动,大大的节约了开发测试,部署的时间。
3.一致性运行环境
        由于Docker的镜像提供了除内核外完整的运行时环境,因此,可以通过在开发环境,测试环境,生产环境使用相同的Docker镜像,确保开发环境,测试环境,生产环境是一致的,不会造成由于环境的不同导致程序运行报错或者异常的情况。
4.持续支付和部署
    对开发和运维人员来说,最希望就是一次创建和部署,可以在任意的地方运行。(定制应用镜像来实现集成、持续支付、部署。开发人员可以通过dockerfile来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署)。而且使用dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
5.更轻松的迁移
    由于Docker可以确保了执行环境的一致性,使得应用的迁移更加的容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、私有云、公有云、甚至是笔记本、其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
6.更轻松的维护和拓展
    Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得十分简单。此外,docker团队同各个开源项目团队一起维护了一大批高质量的官网镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
7、节省开支
    一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

Docker缺点:

1、隔离性
    基于hypervisor的虚机技术,在隔离性上比容器技术要更好,它们的系统硬件资源完全是虚拟化的,当一台虚机出现系统级别的问题,往往不会蔓延到同一宿主机上的其他虚机。但是容器就不一样了,容器之间共享同一个操作系统内核以及其他组件,所以在收到攻击之类的情况发生时,更容易通过底层操作系统影响到其他容器。当然,这个问题可以通过在虚机中部署容器来解决,可是这样又会引出新的问题,比如成本的增加以及下面要提到的问题:性能。
2、性能
    不管是虚机还是容器,都是运用不同的技术,对应用本身进行了一定程度的封装和隔离,在降低应用和应用之间以及应用和环境之间的耦合性上做了很多努力,但是随机而来的,就会产生更多的网络连接转发以及数据交互,这在低并发系统上表现不会太明显,而且往往不会成为一个应用的瓶颈(可能会分散于不同的虚机或者服务器上),但是当同一虚机或者服务器下面的容器需要更高并发量支撑的时候,也就是并发问题成为应用瓶颈的时候,容器会将这个问题放大,所以,并不是所有的应用场景都是适用于容器技术的。
3、存储方案
    容器的诞生并不是为OS抽象服务的,这是它和虚机最大的区别,这样的基因意味着容器天生是为应用环境做更多的努力,容器的伸缩也是基于容器的这一disposable特性,而与之相对的,需要持久化存储方案恰恰相反。这一点docker容器提供的解决方案是利用volume接口形成数据的映射和转移,以实现数据持久化的目的。但是这样同样也会造成一部分资源的浪费和更多交互的发生,不管是映射到宿主机上还是到网络磁盘,都是退而求其次的解决方案。

7、Docker其它

从 2017 年 3 月开始 docker 在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。
Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
Docker 官方建议要 CentOS7.0 及以上系统版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序之大道至简

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值