barriers / 阅读 / 详情

docker 入门(二):docker 和 沙盒、虚拟机以及 Kubernetes 的关系

2023-06-11 08:15:51
TAG: bern berne
共1条回复
西柚不是西游
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!

做开发的基本都听说过沙盒 (Sandbox) 和虚拟机 (Virtual Machine,简称 VM) ,如今容器技术很火,其中以 docker 最受大家欢迎。作为一种集群管理工具,K8s 最近也是火的不要不要的。 我们经常会讲 docker 和 K8s 联系起来,那么两者之间又存在什么关联呢?

首先 Sandbox 和 VM 都是属于 虚拟技术 ,用来虚拟软件运行环境并具有资源隔离的功能。Sandbox 比较“轻”(只需要虚拟出一个小的环境)且一旦退出就释放之前占用的资源;VM 则比较重(虚拟出整个操作系统,相当于子电脑)。关于 Sandbox 和 VM 的区别可以参考博客: https://www.j*****.com/p/6acdfd60b014 。

容器是属于 Sandbox 的一种。 顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去。 容器技术的核心功能 ,就是通过 约束和修改进程的动态表现 ,从而为其 创造出一个“边界” 。正是因为这个边界才会让容器里面的程序看不到宿主机上其他的程序从而给程序一种它就是在一个独立的操作系统上的假象。容器具有如下几个优点:

Docker 是一种 轻量级的虚拟化 技术,即容器技术。随着 Docker 的开源,docker 凭借其“轻”的特点得到迅速的普及。

这三个优点恰是 VM 的缺点。

Docker 原意是指处理码头集装箱的工人。 首先需要注意的是, Docker 本身不是容器 ,而是一个 开源的应用容器引擎 。Docker 让开发者可以以统一的方式 打包 他们的 应用以及依赖包 到一个 可移植的容器 中,然后 发布 到任何 安装了docker引擎的服务器上 (包括流行的Linux机器、windows机器),也可以实现虚拟化。从这个描述可以看出 Docker 的几种常用任务:

Docker 的两句口号很准确地描述了其功能:

1. Build, ship and run

顾名思义,创建、运输和运行。

举个例子来理解:比如说我在 A 地建好了一个厂区,该厂区主要的是车间,其次还有一些配套的生活设施(比如食堂、超市、宿舍、水电等)。现在我要将厂迁到 B 地,按照常规思路就是把 A 地的车间拆了运到 B 地重新组装、并在 B 地建好配套的生活设施,工程量明显很大。假设现在有一种魔法能够在A地将车间及其配套的生活设施 复制一份并打包成一个镜像 image(文件) ,然后将该镜像迁移到 B 地,这样在B地马上就能够投入使用,省去了拆机、重装以及搭建配套生活设施的工作,非常方便快捷。

现在我们将 车间类比成一个application ,将 配套的生活设施类比成依赖 ,那么 docker 就是这种魔法 。

2. Build once, run anywhere

顾名思义,一次创建、随地运行。

我们知道 车间是用于工业生产的 ,即一个application。在这个世界,还存在很多其他的application,比如学校、医院、写字楼、商场、体育场等,它们各自负责不同的用途。假设这些 application 都是能够共享的,那么这个效率将会很高,比如国家A需要用到体育馆,可以从国家B复制一个过来;国家B需要用到学校,可以从国家A复制一个过来。Docker 使用的就是这种理念,Docker 中包含三个核心部分:

镜像仓库(Repository)可以是私有的(比如本地机器的 Docker repository),也可以是公有的(比如 Docker 官方提供的Docker Hub、第三方的 Hub)。 负责管理镜像仓库(Repository)的是 Docker Registry 服务 (就像是图书馆管理员)。Docker 官方提供的 Docker Hub 对于镜像来源有着严格的把控,有很多高质量的 application 镜像,也是开发人员用的最多的public registry 服务。

那么为什么需要 Kubernetes 呢?就在 Docker 容器技术被炒得热火朝天之时,大家发现,如果想要将 Docker 应用于具体的业务实现(当 容器和服务器的数量达到一定规模 的时候,就会碰到管理的

问题,即 如何有效管理大量的服务器和容器 ,保证 应用的稳定运行、方便升级和故障的快速解决 ),是存在困难的—— 编排、管理和调度等各个方面都不容易 。于是就迫切 需要一套容器编排工具 ,能够对 Docker 和容器进行 更高级、灵活的管理 。容器编排工具提供图形化界面或者命令行来管理容器和服务器集群,提供容器配置、任务发布、服务发现、负载均衡、系统监控和故障恢复、声明式系统配置以及有关容器部署和性能的规则和约束定义机制等。

就在这个时候, Google开发的 Kubernetes 从众多编排工具中脱颖而出 ,赢下了容器编排工具大战。Kubernetes 是一种 基于容器的集群管理平台 。Kubernetes 是希腊语,意为“舵手、领航员”,大家都习惯将 Kubernetes 简称为K8s(ubernete 包含8个字母)。K8s 最初由 Google 创建而后加入 openstack 基金会并发布了 K8s V1.0。

Docker 公司自己有一款名为 Docker Swarm的产品,它是一个容器集群和调度工具,功能类似于Kubernetes。相比 Kubernetes,Swarm在集群搭建和使用上要相对简单一些,学习和部署成本相对低一些。较新版本的Docker已经集成了Swarm。Swarm支持跨多个主机进行编排,管理较小规模的容器集群也绰绰有余,对于初学者也可以很快的部署和运行。

笔者水平有限,如有错误,敬请指正!

参考:

https://w*.cnb***.com/misswangxing/p/10669444.html

https://blog.c**.net/fly910905/article/details/98962455

相关推荐

Docker是什么?

是国家开发投资公司的简称,国家开发投资公司成立于1995年5月5日,是我国目前最大的国有投资控股公司和53家骨干中央企业之一,员工总数6万多人,注册资本金 184亿元人民币,总资产1758亿元人民币,所有者权益564亿元人民币。 国投集团是国家大型试点企业集团,1997年10月经国家计委、国家经贸委、国家体改委批准成立。截至2011年底,集团资产总计2800亿元。 国投集团以资本为纽带,由母公司、全资子公司、控股子公司和经集团管理委员会批准确认的投资控股企业组成。集团母公司是国家开发投资公司,集团成员为国投电力控股股份有限公司、国投煤炭公司、国投交通公司、国投高科技投资有限公司、国投物流投资有限公司、国投(福建)开发有限公司、国投资本控股有限公司、国投信托有限公司、国投财务有限公司、国投创新(北京)投资基金管理有限公司、国投资产管理公司、中国投资担保有限公司、中国国投国际贸易有限公司、中国电子工程设计院、中国成套设备进出口(集团)总公司、中国高新投资集团公司、国投物业有限责任公司、中投咨询有限公司、二滩水电开发有限责任公司、北京三吉利能源股份有限公司、天津国投津能发电有限公司、国投云南大朝山水电有限公司、靖远第二发电有限公司、厦门华夏国际电力发展有限公司、国投曲靖发电有限公司、国投钦州发电有限公司、国投甘肃小三峡发电有限公司、国投北部湾发电有限公司、国投宣城发电有限责任公司、国投白银风电有限公司、国投张家口风电有限公司、国投伊犁能源有限公司、国投盘江发电有限公司、国投酒泉第一风电公司、国投酒泉第二风电公司、国投新集能源股份有限公司、阳泉市南庄煤炭集团有限责任公司、国投大同能源有限责任公司、国投煤炭郑州能源开发有限公司、国投河南新能开发有限公司、国投新登郑州煤业有限公司、山东省滕州曹庄煤炭有限责任公司、国投昔阳能源有限责任公司、国投晋城能源投资有限公司、国投哈密能源开发有限责任公司、国投曲靖煤炭开发有限公司、国投内蒙古能源有限公司、河南新兴煤炭实业有限公司、新疆国投宝地能源开发有限责任公司、国投新登郑州水泥有限公司、安徽楚源工贸有限责任公司、国投河南煤炭运销有限公司、国投新疆伊犁煤化工有限公司、国投洋浦港有限公司、国投中煤同煤京唐港口有限公司、国投曹妃甸港口有限公司、镇江港务集团有限公司、国投山东临沂路桥发展有限责任公司、国投湄洲湾港口有限公司、国投孚宝洋浦罐区码头有限公司、国投钦州港口有限公司、国投新疆罗布泊钾盐有限责任公司、国投中鲁果汁股份有限公司、亚普汽车部件有限公司、国投远东航运有限公司、国投煤炭运销有限公司、国投京闽(福建)工贸有限公司、厦门京闽能源实业有限公司、国投山西煤炭运销有限公司、国投海运发展有限公司、海峡汇富产业投资基金管理有限公司、国投中谷期货有限责任公司、北京汽车玻璃钢有限公司等70多家大型企业。 国投集团充分发挥国有资本的带动力、控制力和影响力,将全面落实科学发展观,大力发展关系国计民生的基础性、资源性产业和高新技术产业,增强国有经济实力;加快以金融业为龙头的服务业的发展,巩固和发展实业与服务业相互支撑,协同发展的良好格局,同时,积极探索国有资产经营业务的发展模式,在国民经济发展和国有经济布局结构调整中发挥更大的作用。
2023-06-10 09:37:197

什么是Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
2023-06-10 09:37:352

什么是Docker

电脑术语,Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
2023-06-10 09:37:432

Docker的主要作用是什么?

目前来看,Docker至少有以下应用场景: 1)测试:Docker 很适合用于测试发布,将 Docker 封装后可以直接提供给测试人员进行运行,不再需要测试人员与运维、开发进行配合,进行环境搭建与部署。 2)测试数据分离:在测试中,经常由于测试场景变换Docker的主要作用是什么?
2023-06-10 09:37:532

Docker是什么?它比虚拟机强在哪里?

Docker是一个开源的应用容器引擎,可以让开发者将自身的应用或者软件移植到镜像中,然后发布到任何一个Windows机器或者Linux机器上,当然Docker也可以实现虚拟化。
2023-06-10 09:38:014

docker是什么

docker是应用容器引擎。Docker是一个开源的应用容器引擎,可以将应用及其依赖打包到一个可移植的镜像中,并发布到任何流行的操作系统的机器上。Docker容器是一种打包格式,其中包含应用运行所需的一切要素,包括库、系统工具、代码和运行时。Docker还是一个软件平台,支持开发人员快速构建、测试和部署容器化应用。Docker的思想来自于集装箱,类似于在一艘大船上把货物规整的摆放起来,各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。容器与镜像的关系类似于面向对象编程中的对象与类。Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。docker起源Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。
2023-06-10 09:38:091

如何通俗解释Docker是什么?

Docker是基于Go语言进行开发实现,一个开源的应用容器引擎。采用Linux内核的cgroup,namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,也可以实现虚拟化。隔离的进程独立于宿主和其他的隔离进程,因此也称其为容器。可以将Docker容器理解为一种轻量级的沙盒,每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。容器的创建和停止十分快速,几乎跟创建和终止原生应用一致;另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。很多时候,直接将容器当作应用本身也没有任何问题。为什么使用docker对于开发和运维人员来说,最希望的效果就是一次创建或者配置后,可以在任意地方、任意时间让应用正常运行。对于算法研究人员来说,可能不同的算法需要不同版本的软件,那么在同一个环境中就会存在冲突。而docker 的环境隔离就可以很方便用于不同环境的配置。具体来说,docker优势主要有以下几个方面:1、快速交付和部署使用docker,开发人员可以使用镜像快速构建一套标准的开发环境;开发完成后,测试和运维人员可以使用完全相同的环境部署代码,只要是开发测试过的代码就可以确保在生产环境无缝运行。docker可以快速创建和删除容器,实现快速迭代。2、高效的资源利用运行docker容器不需要额外的虚拟化管理程序的支持。docker是内核级的虚拟化,可以实现更高的性能,同时对资源的额外需求很低。3、轻松的迁移和扩展docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、服务器等。同时支持主流的操作系统发行版本,这种兼容性让用户可以在不同平台间轻松的迁移应用。4、简单的更新管理使用Dockerfile生成镜像的方式,只需要小小的配置修改,就可以替代以往大量的更新工作,所有的修改都以增量的方式进行分发和更新,从而实现自动化且高效的容器管理。
2023-06-10 09:38:362

Docker 特点

Docker 的设计思想是: 集装箱,标准化和隔离 。而 Docker 的设计特点包括如下:
2023-06-10 09:38:512

docker什么意思

Docker是一种开源的容器化技术,通过将应用程序及其依赖项打包在容器中,使应用程序能够在各种不同的环境中运行,提供了一种快速、便捷、高效的应用程序部署方式和管理方式。Docker将应用程序和其依赖项打包在容器中,其中包括运行时环境、库和配置,使得应用程序能够在任何地方以相同的方式运行。这种容器化技术也提供了更高的安全性,因为容器可以被隔离在一个独立的虚拟环境中,使得应用程序与主机系统隔离开来,减少了攻击者进行攻击的机会。Docker的优势在于可以在不同的环境中运行应用程序,使得应用程序部署和管理更加简单和高效。例如,在开发环境中,开发人员可以在本地构建和测试容器,然后将其部署到测试环境和生产环境中。这种部署方式能够大大加快应用程序的部署和更新速度,并减少由于环境不一致导致的问题。目前,Docker已成为云计算和容器化技术领域的重要技术之一,广泛应用于各种场景,如web应用程序、数据库、消息队列、缓存服务器等。它大大简化了应用程序的部署和管理,提高了开发人员的生产效率和运维效率。
2023-06-10 09:39:001

docker是干什么的

docker是一个开源的应用容器引擎。让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。众所周知,一个Java应用war包或者jar包启动成功,有能够对外提供服务的能力,能正常访问页面,做操作,需要部署到一台有tomcat的linux环境中,没有容器技术前的上线流程通常出现这样的或那样的问题。docker的架构Docker使用客户端服务器架构模式,使用远程API来管理和创建Docker容器,Docker容器通过Docker镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类,Docker daemon一般在宿主主机后台运行,等待接收来自客户端的消息。Docker客户端则为用户提供一系列可执行命令,用户用这些命令实现跟Docker daemon交互。Docker daemon作为服务端接受来自客户的请求,并处理这些请求创建、运行、分发容器。 客户端和服务端既可以运行在一个机器上,也可通过socket或者RESTfulAPI来进行通信。
2023-06-10 09:39:341

详解Docker——你需要知道的Docker进阶知识三

我们可以将数据保存在容器中,但是这样存在一些缺点: 针对上述的缺点,有些数据,例如数据库文件,我们不应该将其保存在镜像或者容器的可写层中。Docker 提供三种不同的方式将数据从 Docker 主机挂载到容器中,分别为卷( volumes ),绑定挂载( bind mounts ),临时文件系统( tmpfs )。很多时候, volumes 总是正确的选择。 无论使用上述的哪一种方式,数据在容器内看上去都是一样的。它被认为是容器文件系统的目录或文件。 对于三种不同的存储数据的方式来说,卷是唯一完全由 Docker 管理的。它更容易备份或迁移,并且我们可以使用 DockerCLI 命令来管理卷。 列出本地可用的卷列表: 这种由系统随机生成名称的卷称为 匿名卷 ,匿名卷名称不具备可读性,使用起来不太方便,所以创建卷时一般会指定其 name 。例如我们创建一个名为 volume1 的卷。 创建好卷之后,我们可以用卷来启动一个容器,这里首先需要学习 docker container run 命令的两个参数: 对于前面创建的卷 volume1 ,可使用如下命令来在容器中使用: 使用 --mount 的命令如下: 上述操作,我们运行了两个容器,并分别挂载了一个卷。对于这两个容器来说,由于挂载的是同一个卷,所以它们将共享该数据卷。多个容器共享数据卷时,需要注意并发读写问题。可以分别连接到两个容器中,操作数据来验证数据是同步的。 绑定挂载( bind-mounts )通过将主机上的目录挂载到容器中,使得容器可以操作和修改主机上的文件。 例如,我们将 /home/hellodocker 目录挂载到容器中的 /home/hellodocker 目录下,使用的命令如下: 而如果使用 --mount ,相应的语句如下: 上述两个操作针对的是目录,而对于挂载文件来说,可能会出现一些特殊情况,涉及到绑定挂载和使用卷的区别。下面我们重现这一操作: 首先在当前目录,即 /home/hellodocker 目录下,创建一个 test.txt 文件。并向其中写入文本内容 "test1": 接着创建一个容器 hellodocker6 ,将 test.txt 文件挂载到容器中的 /test.txt 路径,并查看容器中 /test.txt 文件的内容: 这时新打开一个终端,通过 echo 命令向 /home/hellodocker/test.txt 文件追加内容 "test2",并在容器中查看 /test.txt 文件的内容: 这时无论是在容器中还是主机上都能查看到该文件的最新内容。接下来在主机上查看 test.txt 的 inode 号,并使用 vim 编辑该文件,添加 "test3",并查看该文件的内容: 在主机上使用 vim 编辑后,通过 vim 做出的修改并不能在容器中查看到 这是因为 vim 编辑文件的时候,会将文件内容暂存到一个临时文件中,退出保存后会删除原来的文件,并将临时文件重命名为原文件。但是我们标识文件是通过 inode ,因此 Docker 绑定的依然是旧的主机文件,所以容器中看到的依然是旧的内容。 对于数据卷来说,由 docker 完全管理,而绑定挂载需要我们自己去维护。我们需要自己手动去处理这些问题,这些问题并不仅仅是上面演示的这些,还有用户权限, SELINUX 等。 tmpfs 只存储在主机的内存中。当容器停止时,相应的数据就会被移除。
2023-06-10 09:39:491

详解Docker——你需要知道的Docker进阶知识五

Dockerfile 是一个文本文件,其中包含了构建 Docker 镜像需要执行的命令序列。使用 docker build 命令从 Dockerfile 中读取指令来构建镜像。 构建镜像时,该过程的第一件事是将 Dockerfile 文件所在目录下的所有内容发送给 Docker 守护进程。所以大多数情况下,最好创建一个新的目录,在其中保存 Dockerfile ,以及构建镜像所需的其它文件。Dockerfile 文件所在目录也被称为构建上下文(context)。 使用 FROM 指令指定一个基础镜像,后续指令将在此镜像基础上运行: 在 Dockerfile 中可以指定一个用户,后续的 RUN , CMD 以及 ENTRYPOINT 指令都会使用该用户身份去执行,该用户必须已存在。 除了指定用户之外,还可以使用 WORKDIR 指定当前工作目录(CWD), RUN , CMD , COPY , ADD 指令将在指定的工作目录中执行。 RUN 指令用于执行命令,该指令有两种形式: 例如我们执行更新命令: CMD 的使用方式跟 RUN 类似,不过在一个 Dockerfile 文件中只能有一个 CMD 指令,如果有多个,则只有最后一个会生效。该指令指定了启动容器时要执行的命令,例如: 可以在 docker run 时指定命令来覆盖默认的 CMD 命令,比如 docker run image echo"hello shiyanlou" 。 CMD 指令还有一种特殊用法。在 Dockerfile 中,如果使用 ENTRYPOINT 指令指定了入口命令,则 CMD 指令的内容会作为 ENTRYPOINT 指令的参数: ENTRYPOINT 指令会覆盖 CMD 指令作为容器运行时的默认指令,并且该指令不会被 docker run 时指定的指令覆盖,如下示例: 上述文件构建出来的镜像,使用 docker run image 等同于 docker run image ls-a-l 。使用 docker run image-i-s 等同于 docker run image ls-a-i-s 。即 CMD 指令的值会被当作 ENTRYPOINT 指令的参数附加到 ENTRYPOINT 指令的后面,只有 CMD 指令可以被覆盖。 COPY 和 ADD 都用于将构建上下文中的文件,目录等复制到镜像中。使用方式如下: `` 可以指定多个,但是其路径不能超出构建上下文范围,即必须在 Dockerfile 同级或子目录中。 不需要预先存在,不存在时会自动创建,如果使用相对路径,则 为相对于工作目录的路径。 COPY 和 ADD 的不同之处在于,ADD 可以添加远程文件,并且 `` 可以是 gzip 或 tar 等格式的压缩文件,添加时会自动进行解压。 ENV 指令用于设置环境变量: VOLUME 指令指定要创建的挂载路径,在容器运行时,将为每个挂载路径创建一个匿名卷并挂载上去: 上述指令将会在容器运行时,创建两个匿名卷,并分别挂载到容器中的 /data1 和 /data2 路径。 学习了上面这些常见的 Dockerfile 指令之后,可以使用这些指令来构建一个镜像。如下所示,构建一个提供 ssh 服务的镜像: 构建镜像 查看镜像 启动容器 查看已经启动的容器 测试远程登录 Compose 是运行由多个容器组成的 Docker 应用的工具,使用 Compose 可以一次启动一组有关联的服务,每个服务由来自同一镜像的单个或多个容器组成。 在复杂应用中,应用一般由多个服务(service)组成,例如一个网站后台通常包含 Web 服务、数据库服务、缓存服务、消息队列服务等。 使用 Compose 的步骤如下: 目前有三种版本的 Compose 文件格式: 下载 docker-compose-Linux-x86_64 下载成功后,为了方便使用,可以将其添加到 PATH 路径下 执行完成后,就能够在终端下直接使用 docker-compose 命令了: 接下来我们将创建一个 Web 应用,该应用包含两个容器: 项目目录结构如下: 首先编辑 app/web/web.py 文件,写入下面的内容: 上述代码创建了一个简单的 Web 应用。该应用会连接 redis 服务,在访问 / 页面时,自动将变量 number 加 1。 编辑 app/web/requirements.txt 文件,输入如下内容: requirements.txt 文件存放了 Web 应用依赖的第三方库包的名称和版本信息。 编辑 app/web/Dockerfile 文件,添加如下内容 上述 Dockerfile 定义了 Web 应用镜像,该镜像基于 python:2.7 基础镜像,在其基础上安装了应用依赖的库包,并通过 CMD 指令指定了应用的启动命令。 编辑 app/docker-compose.yml 文件: 该 docker-compose.yml 文件定义了两个服务,分别为 web 和 redis 服务,并且配置了 web 服务的端口映射和挂载目录。 depends_on 定义了依赖关系,被依赖的服会先启动。 进入 app 目录,执行 docker-compose up 命令来启动应用: 启动成功后,就可以打开网址 127.0.0.1:8001 来访问 Web 应用了。 另外一些命令:
2023-06-10 09:39:561

docker容器的基本概念?

镜像(Image)容器(Container)仓库(Reposito
2023-06-10 09:40:052

docker是什么意思

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 原理: Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。同VM的方式不同, LXC 其并不是一套硬件虚拟化方法 - 无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,而是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观。所以我们从虚拟化到docker要解决的问题出发,看看他是怎么满足用户虚拟化需求的。
2023-06-10 09:40:191

容器docker的作用是什么

  1、作用:提到容器技术,我们就不可避免的会想到docker。Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中。在用Docker的情况下,大家可以直接把项目发布在DocKer容器上面进行测试,当项目需要正式上线的时候,直接可以把做好的DocKer镜像部署上去就行了,如果测试的好,就不必担心项目上正式版本的时候再出现什么问题。   2、好处:   (1)轻量、消耗少:使用Docker能合并多个服务以降低费用,不多的操作系统内存占用,跨实例共享多个空闲的内存,这些技术让Docker能以更加紧密的资源提供更有效的服务合并。基于LXC轻量级特点,启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,在单机环境下与KVM之类的虚拟化方案相比,能够更加快速和占用更少资源。   (2)高利用率与隔离:容器服务没有管理程序的额外开销,与底层共享操作系统,性能更加优良,系统负载更低,在同等条件下可以运行更多的实例,充分利用系统资源。同时,容器拥有不错的资源隔离与限制能力,可以精确地对应用分配CPU、内存等资源,保证了应用间不会相互影响。   (3)快速部署与微服务:Docker通过创建流程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁资源,不用担心额外消耗。Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用。   (4)标准化环境和控制:基于容器提供的环境一致性和标准化,你可以使用Gt等工具对容器镜像进行版本控制。相比基于代码的版本控制来说,还能够对整个应用运行环境实现版本控制,一旦出现故障可以快速回滚。相比虚拟机镜像,容器压缩和备份速度更快,镜像启动也像启动一个普通进程一样快速。
2023-06-10 09:40:321

什么是 docker 容器技术

Docker 是 PaaS 提供商 DotCloud 开源的一个高级容器引擎,源代码托管在 Github 上,基于Go语言并遵从Apache2.0协议开源。Docker相当于物理行业的集装箱对物流的影响一样,成为Container上运行镜象的统一打包和交换的标准。Docker使用了容器的环境隔离和资源限制技术,把镜像和运行环境打包到Image中。Register支持容器上传和下载功能。Docker同时提供了Build,Ship和Run,运维只需要在环境重配置好Docker,剩下的工作就是部署容器,实现Build Once Run Anywhere和Configure Once Run Anything;从而促进了容器技术的爆发。在架构上,Docker采用Client Server模式和插件式架构设计,Docker的后端采用非常松耦合的架构,模块之间相互独立,用户通过Docker Client与Docker Daemon建立通信,并发送请求给Docker Daemon。Docker Daemon提供Server功能接受Docker Client的请求;随后通过Engine执行Docker内部的一系列工作,每项工作都是以一个Job的形式的存在。Docker讲底层容器运行时剥离出来,实现更好的平台无关性。LibContainer是对各种容器的抽象,发展为RunC,并贡献给OCP组织作为定义容器环境的标准。Docker容器的三大编排工具,Compose、Swarm和Machine。Compose是服务编排工具,是定义和运行Docker主机上多容器应用的工具,通过单独文件,定义多容器应用并运行容器。 Docker的网络技术和能力一直是容器技术中最难、也是最不看好的技术之一,Libnetwork是Docker公司正在开发的新的网络底层架构,由libcontainer和Docker Engine中的网络相关的代码合并而成。Libnetwork的目标是引入了容器网络模型(CNM),并为应用程序提供一致的编程API接口以及网络抽象。 Libnetwork的容器网络模型包含了三个重要概念,Network Sandbox,Endpoint和Network。Weave创建了Networking Plugin技术,目前成熟的有Networking Plugin和Volume Plugin。Weave方案包含两大组件,用户态Shell脚本和Weave虚拟路由容器。Weave虚拟路由容器需要在每个宿主机上布置第三方插件,把不同宿主机的Route容器连接起来,使得Docker工具生态无缝集成到Docker。Weave创建一个虚拟网络,链接多个主机的Docker容器,并使他们可以被自动发现,对使用该网络的应用来说,所以容器就像是链接在同一个网络交换机上,无需配置端口映射、链路等参数。
2023-06-10 09:40:413

Docker 概述

本文翻译自docker官网: https://docs.docker.com/get-started/overview/#docker-architecture Docker is an open platform for developing, shipping, and running applications. Docker enables you to separate your applications from your infrastructure so you can deliver software quickly. With Docker, you can manage your infrastructure in the same ways you manage your applications. By taking advantage of Docker"s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production. Docker provides the ability to package and run an application in a loosely isolated environment called a container. The isolation and security allow you to run many containers simultaneously on a given host. Containers are lightweight and contain everything needed to run the application, so you do not need to rely on what is currently installed on the host. You can easily share containers while you work, and be sure that everyone you share with gets the same container that works in the same way. Docker provides tooling and a platform to manage the lifecycle of your containers: Fast, consistent delivery of your applications Docker streamlines the development lifecycle by allowing developers to work in standardized environments using local containers which provide your applications and services. Containers are great for continuous integration and continuous delivery (CI/CD) workflows. Consider the following example scenario: Responsive deployment and scaling Docker"s container-based platform allows for highly portable workloads. Docker containers can run on a developer"s local laptop, on physical or virtual machines in a data center, on cloud providers, or in a mixture of environments. Docker"s portability and lightweight nature also make it easy to dynamically manage workloads, scaling up or tearing down applications and services as business needs dictate, in near real time. Running more workloads on the same hardware Docker is lightweight and fast. It provides a viable, cost-effective alternative to hypervisor-based virtual machines, so you can use more of your compute capacity to achieve your business goals. Docker is perfect for high density environments and for small and medium deployments where you need to do more with fewer resources. Docker uses a client-server architecture. The Docker client talks to the Docker daemon , which does the heavy lifting of building, running, and distributing your Docker containers. The Docker client and daemon can run on the same system, or you can connect a Docker client to a remote Docker daemon. The Docker client and daemon communicate using a REST API, over UNIX sockets or a network interface. Another Docker client is Docker Compose, that lets you work with applications consisting of a set of containers. [图片上传失败...(image-17b2f-1618407573391)] The Docker daemon ( dockerd ) listens for Docker API requests and manages Docker objects such as images, containers, networks, and volumes. A daemon can also communicate with other daemons to manage Docker services. The Docker client ( docker ) is the primary way that many Docker users interact with Docker. When you use commands such as docker run , the client sends these commands to dockerd , which carries them out. The docker command uses the Docker API. The Docker client can communicate with more than one daemon. A Docker registry stores Docker images. Docker Hub is a public registry that anyone can use, and Docker is configured to look for images on Docker Hub by default. You can even run your own private registry. When you use the docker pull or docker run commands, the required images are pulled from your configured registry. When you use the docker push command, your image is pushed to your configured registry. When you use Docker, you are creating and using images, containers, networks, volumes, plugins, and other objects. This section is a brief overview of some of those objects. An image is a read-only template with instructions for creating a Docker container. Often, an image is based on another image, with some additional customization. For example, you may build an image which is based on the ubuntu image, but installs the Apache web server and your application, as well as the configuration details needed to make your application run. You might create your own images or you might only use those created by others and published in a registry. To build your own image, you create a Dockerfile with a simple syntax for defining the steps needed to create the image and run it. Each instruction in a Dockerfile creates a layer in the image. When you change the Dockerfile and rebuild the image, only those layers which have changed are rebuilt. This is part of what makes images so lightweight, small, and fast, when compared to other virtualization technologies. A container is a runnable instance of an image. You can create, start, stop, move, or delete a container using the Docker API or CLI. You can connect a container to one or more networks, attach storage to it, or even create a new image based on its current state. By default, a container is relatively well isolated from other containers and its host machine. You can control how isolated a container"s network, storage, or other underlying subsystems are from other containers or from the host machine. A container is defined by its image as well as any configuration options you provide to it when you create or start it. When a container is removed, any changes to its state that are not stored in persistent storage disappear. The following command runs an ubuntu container, attaches interactively to your local command-line session, and runs /bin/bash . When you run this command, the following happens (assuming you are using the default registry configuration): Docker is written in the Go programming language and takes advantage of several features of the Linux kernel to deliver its functionality. Docker uses a technology called namespaces to provide the isolated workspace called the container . When you run a container, Docker creates a set of namespaces for that container. These namespaces provide a layer of isolation. Each aspect of a container runs in a separate namespace and its access is limited to that namespace.
2023-06-10 09:40:561

docker有哪些有趣的用途?

docker有趣的用途:Docker 很适合用于测试发布,将 Docker 封装后可以直接提供给测试人员进行运行,不再需要测试人员与运维、开发进行配合,进行环境搭建与部署。开发人员共同使用同一个 Docker 镜像,同时修改的源代码都被挂载到本地磁盘。不再因为环境的不同而造成的不同程序行为而伤透脑筋,同时新人到岗时也能迅速建立开发、编译环境。docker的特点:Docker能够对多种OS资源进行隔离,但是它本质上依托于内核,因此所有的内核漏洞都是Docker的致命伤。单机可以轻松支持上百Container,让各种个位数虚拟化的方案相形见绌。一秒以内启动,即使是以资源快速就绪著称的青云IAAS也无法相比。
2023-06-10 09:41:151

Docker基本概念

由于不同的机器有不同的操作系统,以及不同的库和组件,在将一个应用部署到多台机器上需要进行大量的环境配置操作。 Docker 主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程。使用 Docker 可以不修改应用程序代码,不需要开发人员学习特定环境下的技术,就能够将现有的应用程序部署在其它机器上。 虚拟机也是一种虚拟化技术,它与 Docker 最大的区别在于它是通过模拟硬件,并在硬件上安装操作系统来实现。 1.启动速度 启动虚拟机需要先启动虚拟机的操作系统,再启动应用,这个过程非常慢; 而启动 Docker 相当于启动宿主操作系统上的一个进程。 2.占用资源 虚拟机是一个完整的操作系统,需要占用大量的磁盘、内存和 CPU 资源,一台机器只能开启几十个的虚拟机。 而 Docker 只是一个进程,只需要将应用以及相关的组件打包,在运行时占用很少的资源,一台机器可以开启成千上万个 Docker。 除了启动速度快以及占用资源少之外,Docker 具有以下优势: 1.更容易迁移 提供一致性的运行环境。已经打包好的应用可以在不同的机器上进行迁移,而不用担心环境变化导致无法运行。 2.更容易维护 使用分层技术和镜像,使得应用可以更容易复用重复的部分。复用程度越高,维护工作也越容易。 3.更容易扩展 可以使用基础镜像进一步扩展得到新的镜像,并且官方和开源社区提供了大量的镜像,通过扩展这些镜像可以非常容易得到我们想要的镜像。 持续集成 持续集成指的是频繁地将代码集成到主干上,这样能够更快地发现错误。 Docker 具有轻量级以及隔离性的特点,在将代码集成到一个 Docker 中不会对其它 Docker 产生影响。 提供可伸缩的云服务 根据应用的负载情况,可以很容易地增加或者减少 Docker。 搭建微服务架构 Docker 轻量级的特点使得它很适合用于部署、维护、组合微服务。 镜像是一种静态的结构,可以看成面向对象里面的类,而容器是镜像的一个实例。 镜像包含着容器运行时所需要的代码以及其它组件,它是一种分层结构,每一层都是只读的(read-only layers)。构建镜像时,会一层一层构建,前一层是后一层的基础。镜像的这种分层存储结构很适合镜像的复用以及定制。 构建容器时,通过在镜像的基础上添加一个可写层(writable layer),用来保存着容器运行过程中的修改。
2023-06-10 09:41:511

Docker基础

Docker 是一个开源的应用容器引擎,基于Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Docker最早是在Ubuntu 12.04上开发实现的; Red Hat则从RHEL6.5开始对Docker进行支持。 而后Windows和Mac上也相应有了Docker版本支持。 在Docker容器技术出现之前,Linux上是已经有一个docker的工具的,但此docker非彼Docker。 这个docker是一个窗口停靠栏程序,就像苹果的Mac系统中的dock那个程序一样的一个工具。 为了区分开来,我们以Docker和docker来进行区分。 Docker:指容器技术。 docker:指窗口停靠栏程序。 Docker技术出来后,因为Linux系统上已经有了docker这个工具,所以Docker软件名也不能跟人家重名啊,要不然没办法安装。 由于那个时候Docker的官网是docker.io,所以就在软件名称上加了io的后缀,在Ubuntu中就是docker.io,在CentOS中就是docker-io。 但是虽然软件名跟docker程序不一样了,但软件安装后的操作命令还是一样的,都是docker的这个命令,所以要安装Docker软件,要先看看有没有安装了那个停靠栏程序docker,有的话要先卸载才行,要不然执行的命令是不对的。 这个时期要安装Docker,就要用docker加io后缀的方式来安装。 Docker容器使用docker.io和docker-io为软件名,主要是前期的一段时间。 后来随着Docker的发展,软件包名改成了docker-engine,不同系统中名称达到了统一。 再后来,随着Docker技术的火爆,在征得docker停靠栏程序作者同意下,原先的停靠栏程序docker名称改掉了,改成了wmdocker,Docker容器技术的软件包名才正式成了docker这个名称,Docker软件包的名称又得到了一次完全的统一。 到Docker1.13.1版本之前,Docker软件包的名称有两次变化,从docker-io(docker.io)到docker-engine,再到docker。 Docker发展到1.13.1版本号后,Docker公司把Docker分成了社区版(免费)Docker CE和商业版(付费)Docker EE两种形式,并且版本号命名方式也改了,以前是那种常用的版本号命令方式,比如0.1、0.2、1.0之类的,现在分社区和商业版后,版本号是“年.月”的形式命名的,比如2019年10月发布的,版本号就是19.10。 所以在Docker1.13.1之后,直接是Docker-ce 17.03.0版本了,也就是2017年03月发布的。 现在要安装最新版的Docker软件包,就是使用docker-ce这个名称了,如果是商业版的就是docker-ee了。 目前docker的默认存储引擎为overlay2,不同的存储引擎需要相应的文件系统支持,如需要磁盘分区的时候传递d-type稳健分层功能,即需要传递内核参数并开启格式化磁盘的时候指定的功能。 存储引擎的选择文档 AUFS AUFSAnotherUnionFileSystem是一种UnionFS。V2版本后更名为 advanced multi‐layered unification fileystem,即高级多层统一文件系统。所谓UnionFS就是把不同物理位置的目录合并mount到同一个目录中。简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统。这种系统可以一层一层的叠加修改文件。无论底下有多少层都是只读,只有最上层的文件系统是可读写。当需要修改一个文件时,AUFS创建该文件的一个副本。使用CoWCopy-on-Write将文件从只读层复制到可写层进行修改,结果也保留在可写层、在Docker中。底下的制度层就是image,可写层就是Container。 Overlay 一种Union FS文件系统,Linux内核3.18后支持 Overlay2 overlay的升级版,到目前为止,所有Linux发行版推荐使用的存储类型 devicemapper 是CentOS和RHEL的推荐存储驱动程序,但是依赖于direct-lvm,存在空间受限的问题,虽然可以通过后期配置解决;因为之前的内核版本不支持overlay2(集中在Centos/RHEL7.2之前版本);但当前较新版本Centos和RHEL现已经支持overlay2。 https://www.cnblogs.com/youruncloud/p/5736718.html zfs/btrfs(Oracle-2007) 目前没有广泛应用;这些文件系统允许使用高级选项,例如创建“快照”,但需要更多的维护和设置。并且每一个都依赖于正确配置的后备文件系统。 vfs 用于测试环境,适用于无法适用Cow文件系统的情况。此存储驱动程序的性能很差,通常不建议在生产中使用。 1)overlay存储驱动程序已在Docker Engine-Enterprise 18.09中弃用,并将在以后的版本中删除。建议将overlay存储驱动程序的用户迁移到overlay2。 2)devicemapper存储驱动程序已在Docker Engine 18.09中弃用,并将在以后的版本中删除。建议将devicemapper存储驱动程序的用户迁移到overlay2。 建议使用overlay2存储驱动程序。首次安装Docker时,默认情况下使用overlay2。早期版本,默认情况下会使用aufs。如果要在新版本中使用aufs,则需要对其配置,并且可能需要安装其他软件包,例如linux-image-extra。 对于Docker,支持文件系统是所在的文件系统 /var/lib/docker/。一些存储驱动程序仅适用于特定的后备文件系统。 配置 Docker 存储驱动非常简单,只需要修改配置文件即可。
2023-06-10 09:41:591

DOCKER 总结

Docker 是一个开源的 应用容器引擎 ,让 开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化 。容器是完全使用沙箱机制,相互之间不会有任何接口。 由于本地开发好的程序往往都需要部署到服务器上进行运行,这就导致了程序需要运行在不同的环境上,这通常是一个令人头痛的事情。在过去,开发团队需要清楚的告诉运维部署团队,其所使用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。 于是乎, 虚拟化 技术应运而生。开发团队将开发好的程序在虚拟机上运行,这样就能解决运维的问题。但是由于虚拟机技术过重的特性导致了其 资源占用多、冗余步骤多以及启动慢的缺陷 。而这个时候 一种新的虚拟化技术搭配上容器化的思想 的产品便出现了,而它就是Docker。 下图是虚拟机技术和容器化技术架构的对比。我们可以得出以下总结: [图片上传失败...(image-efadd2-1643314980201)] ]( https://upload-images.jianshu.io/upload_images/646931-4b1431b77887632f.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 ) 于是乎相比于虚拟机技术,容器化技术具有以下 优势: 相关网站 如下图所示,Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。服务器端分为Docker daemon, Image和Container三个部分。此外还有Docker Registry。 下面首先来介绍一下Docker中的主要概念 Docker的运行原理如下:客户端可以将docker命令发送到服务器端的Docker daemon上,再由Docker damon根据指令创建、选择或者从Docker仓库中拉取(pull)镜像。接着客户端可以通过镜像创建容器。当我们需要使用程序时,运行相应的容器即可。 小结 需要正确的理解仓储/镜像/容器这几个概念 : 在外面使用容器的时候,我们不希望容器中的数据在容器被删除后也一并删除了,这时候我们就可以 通过使用容器数据卷,将数据储存在本地并用Docker将其挂载到容器中,这样我们即使删除了容器,数据也依旧存在服务器中,也就实现了数据持久化。 特点 容器数据卷挂载命令(-v) Dockerfile 挂载容器数据卷 我们除了可以从仓库中拉取镜像以外,我们也可以 自己创建镜像 ,这就要用到Docerfile。 dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本 。 构建步骤: 基础知识: 流程: 说明: 在实际场景中,我们会遇到 多个Container之间通讯 的问题。而Docker网络就是用于解决此问题的技术。docker会给每个容器都分配一个ip,且容器和容器之间是可以互相访问的。 Docker网络原理 每一个安装了Docker的linux主机都有一个docker0的虚拟网卡。这是个桥接网卡,使用了 veth-pair 技术 。Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据 Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网 关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。 Docker容器网络就很好的利用了Linux虚拟网络技术,在本地主机和容器内分别创建一个虚拟接口,并 让他们彼此联通(这样一对接口叫veth pair); Docker中的网络接口默认都是虚拟的接口。虚拟接口的优势就是转发效率极高(因为Linux是在内核中 进行数据的复制来实现虚拟接口之间的数据转发,无需通过外部的网络设备交换),对于本地系统和容 器系统来说,虚拟接口跟一个正常的以太网卡相比并没有区别,只是他的速度快很多。 [图片上传中...(image-41d42a-1642627027452-2)] Docker Compose是一个用于定义并运行多容器应用的工具 。 Docker Compose的 步骤如下 : NOTE: Compose :重要的概念。 docker-compose.yml编写 Note: docker-compose会自动为多容器之间创建网络,保证通讯。 Docker Swarm 是Docker 的集群管理工具。 它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。 Docker 是一个开源的 应用容器引擎 ,它的出现大大简化了运维的难度,提高了运维效率。过去我们需要在服务器上安装程序所需要的所有依赖,而如今我们只需要编写好docker-compose和Dockefile的脚本,就可以使程序一键跑通。在企业级的应用中,我们必然会惊颤使用到Docker和容器化技术。 狂神说
2023-06-10 09:42:061

如何在 CentOS 7 上安装 Docker

1、使yum的CentOS-Extras配置生效文件CentOS-Base.repo中enabled的値从0变成1vim /etc/yum.repos.d/CentOS-Base.repo [extras] name=CentOS-$releasever - Extras mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 enabled=1 ★ 値从0变成1※Docker is included by default in the CentOS-Extras repository 2、执行yum 安装# yum install docker 3、Docker启动# systemctl start docker
2023-06-10 09:42:153

如何在 CentOS 7 上安装 Docker

Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单。容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止。Docker 帮助系统管理员和程序员在容器中开发应用程序,并且可以扩展到成千上万的节点。容器和 VM(虚拟机)的主要区别是,容器提供了基于进程的隔离,而虚拟机提供了资源的完全隔离。虚拟机可能需要一分钟来启动,而容器只需要一秒钟或更短。容器使用宿主操作系统的内核,而虚拟机使用独立的内核。
2023-06-10 09:42:323

Docker 常用名词解释

一个集群指容器运行所需要的云资源组合,关联了若干服务器节点、负载均衡、专有网络等云资源。 一台服务器(可以是虚拟机实例或者物理服务器)已经安装了 Docker Engine,可以用于部署和管理容器;容器服务的 Agent 程序会安装到节点上并注册到一个集群上。集群中的节点数量可以伸缩。 一个通过 Docker 镜像创建的运行时实例,一个节点可运行多个容器。 Docker 镜像是容器应用打包的标准格式,在部署容器化应用时可以指定镜像,镜像可以来自于 Docker Hub,阿里云容器 Hub,或者用户的私有 Registry。镜像 ID 可以由镜像所在仓库 URI 和镜像 Tag(缺省为 latest)唯一确认。 编排模板包含了一组容器服务的定义和其相互关联,可以用于多容器应用的部署和管理。容器服务支持 Docker Compose 模板规范并有所扩展。 一个应用可通过单个镜像或一个编排模板创建,每个应用可包含1个或多个服务。 一组基于相同镜像和配置定义的容器,作为一个可伸缩的微服务。
2023-06-10 09:42:391

如何用Docker 管理 Linux Container 容器与网络设置

  当前Ubuntu 系统下的 Docker 的安装包只提供64位。如果你想运行32位的 Docker,你需要。  安装 Docker  通过 apt-get 安装 Docker 简直是小菜一碟。  $ sudo apt-get install docker.io  如果你不是 root 组的用户,你可以把自己加入到 docker 用户组。下面的命令可以让没有 root 权限的用户使用 Docker:  $ sudo usermod -a -G docker $USER  重新登录,以便让你的用户组权限生效。  下一步是编辑 Docker 配置文件,确定 Docker 可执行文件的路径:  $ sudo vi /etc/default/docker.io  DOCKER= /usr/bin/docker.io  重启 Docker 服务:  $ sudo service docker.io restart  管理 Docker Container 容器  如果你想在新的 Docker 容器下创建一个新的 Ubuntu 操作系统,你首先需要 pull 一个 的 Docker 镜像。下面的命令可以通过网络下载 Docker 镜像:  $ docker pull ubuntu  你可以使用下面的命令启动 Docker 里面的 Ubuntu 系统。最后的参数 /bin/bash 表示一旦容器启动,首先会执行简单的 bash。  $ docker run -i -t ubuntu /bin/bash  上面的命令会立即启动 Ubuntu container 容器(这是一个完美的容器!),然后它会提供一个 shell 提示符运行环境给你。现在开始你可以通过这个沙箱环境访问一个完整的 Ubuntu 系统了。    输入 exit 命令退出 Docker 容器。  你也可以用下面的命令进入不同的系统。比如 Fedora:  $ docker.io run -i -t fedora /bin/bash  如果系统中还不存在 Fedora Docker 镜像,这个命令会自动下载它,然后启动这个 Fedora 的 Docker 容器。    如果你想要开启指定版本的系统,比如 Ubuntu 13.04,你可以使用下面的命令:  $ docker.io run -i -t ubuntu:13.04 /bin/bash  Container 容器网络设置  Docker 使用 Linux 桥接技术与其他容器通信,以及连通外网。安装完 Docker 后你应该可以看到 docker0 这个网桥,这是 Docker 默认创建的。你创建的每个容器都会通过这个网桥连接到网络。    自定义 Linux 网桥  如果你想自定义网桥,你可以执行以下步骤。你可以在这个网桥后面分配一个子网,并为这个子网分配地址。下面的命令会为 Docker 子网分配 10.0.0.0/24 地址段:  $ sudo apt-get install bridge-utils  $ sudo brctl addbr br0  $ sudo ifconfig br0 10.0.0.1 netmask 255.255.255.0  然后在 /etc/default/docker.io 文件的 DOCKER_OPTS 变量里添加 -b=br0 选项,并重启 Docker 服务:  $ sudo service docker.io restart  到目前为止,任何创建的容器都会连上 br0 网桥,它们的 IP 地址会从 10.0.0.0/24 中自动分配(译注:在10.0.0.2到10.0.0.254之间随机分配)。  其他自定义设置  你可以通过 /etc/default/docker.io 文件的 DOCKER_OPTS 变量设置其他一些属性:  -dns 8.8.8.8 -dns 8.8.4.4 : 为容器指定 DNS 服务器。  -icc=false : 将容器与其他容器隔离出来  疑难解答  1、当你运行 docker.io 命令时,你可能会遇到以下问题:  dial unix /var/run/docker.sock: no such file or directory  这个错误可能是由于 Docker 后台进程没有启动。检查下 Docker 后台进程的状态,确认它已经处于启动状态:  $ sudo service docker.io status$ sudo service docker.io start
2023-06-10 09:43:121

如何在Ubuntu系统下安装docker

ubuntu下安装DockerDocker 是 dotCloud 最近几个月刚宣布的开源引擎,旨在提供一种应用程序的自动化部署解决方案,简单的说就是,在 Linux 系统上迅速创建一个容器(类似虚拟机)并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的自动化安装、部署和升级,非常方便。因为使用了容器,所以可以很方便的把生产环境和开发环境分开,互不影响,这是 docker 最普遍的一个玩法。更多的玩法还有大规模 web 应用、数据库部署、持续部署、集群、测试环境、面向服务的云计算、虚拟桌面 VDI 等等。注意:由于Docker需要在Linux Kernel 3.8及以上才可以很好的工作【本人在ubuntu12.04 lts 内核3.2也正常安装】,官方更是推荐Ubuntu系统,这里有两种选择:Ubuntu 12.04 LTS或最新的Ubuntu 13.10 而本文比较喜欢倾向LTS,幸好有办法解决Kernel版本问题。1、更新Ubuntu内核使用如下命令行更新内核至3.8.0-25sudo apt-get install linux-image-3.8.0-25-genericsudo apt-get install linux-headers-3.8.0-25-generic完成后重启电脑,通过命令 “uname -r” 来查看内核是否成功更新。2、安装lxc-dockerroot@ubuntu: sudo apt-get install software-properties-common #增加 add-apt-repository 命令root@ubuntu: sudo apt-get install python-software-properties root@ubuntu: sudo add-apt-repository ppa:dotcloud/lxc-docker #增加一个ppa源,如:ppa:user/ppa-nameroot@ubuntu: sudo apt-get update #更新系统root@ubuntu: sudo apt-get install lxc-docker3、测试doctor是否安装成功root@ubuntu:~# docker #出现如下信息表示docker安装成功Usage: docker [OPTIONS] COMMAND [arg...]-H=[tcp://127.0.0.1:4243]: tcp://host:port to bind/connect to or unix://path/to/socket touseA self-sufficient runtime for linux containers....4、Hello World4.1、下载官方ubuntu imagelinjiqin@ubuntu:~$ sudo docker pull ubuntu #pull命令需要到国外的镜像仓库,拉取镜像,因为GFW的关系,拉取失败的可能性很大4.2、运行hello worldlinjiqin@ubuntu:~$ sudo docker run ubuntu /bin/echo hello world5、docker常用命令5.1、docker三种命令运行模式docker有三种命令运行的方式:短暂方式、交互方式、daemon方式。a、短暂方式:就是刚刚的那个”hello world”,命令执行完后,container就终止了,不过并没有消失,可以用 sudo docker ps -a 看一下所有的container,第一个就是刚刚执行过的container,可以再次执行一遍:linjiqin@ubuntu:~$ sudo docker start container_id不过这次看不到”hello world”了,只能看到ID,用logs命令才能看得到:linjiqin@ubuntu:~$ sudo docker logs container_id可以看到两个”hello world”,因为这个container运行了两次。b、交互方式linjiqin@ubuntu:~$ sudo docker run -i -t image_name /bin/bash #image_name为docker镜像名称c、daemon方式即让软件作为长时间服务运行,这就是SAAS啊!例如,一个无限循环打印的脚本(替换为memcached、apache等,操作方法仍然不变!):linjiqin@ubuntu:~$ CONTAINER_ID=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done")在container外面查看它的输出linjiqin@ubuntu:~$ sudo docker logs $CONTAINER_ID或者连接上容器实时查看linjiqin@ubuntu:~$ sudo docker attach $CONTAINER_ID终止容器linjiqin@ubuntu:~$ sudo docker stop $CONTAINER_IDlinjiqin@ubuntu:~$ sudo docker ps #看一下,已经没了5.2、docker ps命令linjiqin@ubuntu:~$ sudo docker ps #列出当前所有正在运行的containerlinjiqin@ubuntu:~$ sudo docker ps -l #列出最近一次启动的,且正在运行的containerlinjiqin@ubuntu:~$ sudo docker ps -a #列出所有的container注意:a、其他用法请参考 sudo docker ps -hb、还有一种方式可以让程序在daemon模式下运行,就是在Dockerfile里设置USER为daemon5.3、docker export命令linjiqin@ubuntu:~$ container_id=`docker run -d <image_name> ls`linjiqin@ubuntu:~$ docker export $container_id > image.tgz5.4、docker import命令 linjiqin@ubuntu:~$ cat image.tgz | sudo docker import - simple_dev #simple_dev为自定义的镜像名称5.5、docker port命令linjiqin@ubuntu:~$ docker run -p 80:8080 <image> <cmd> #映射容器的8080端口到宿主机的80端口5.6、删除容器5.6.1、删除所有容器linjiqin@ubuntu:~$ sudo docker rm `sudo docker ps -a -q`5.6.1、删除具体某个容器linjiqin@ubuntu:~$ sudo docker rm $CONTAINER_ID5.7、docker命令快速参考linjiqin@ubuntu:~$ sudo docker images #查看本地镜像linjiqin@ubuntu:~$ sudo docker attach $CONTAINER_ID #启动一个已存在的docker实例linjiqin@ubuntu:~$ sudo docker stop $CONTAINER_ID #停止docker实例linjiqin@ubuntu:~$ sudo docker logs $CONTAINER_ID #查看docker实例运行日志,确保正常运行linjiqin@ubuntu:~$ sudo docker inspect $CONTAINER_ID #查看container的实例属性,比如ip等等sudo docker run -t -i -v /home/linjiqin/dev/docker:/home/mycontainer:rw -p 8000:8000 mydocker /bin/bash写在前面,运行我们的镜像的命令使用上面的为参考,这样会挂载本地文件夹,并且会映射container的8000端口到宿主机的8000端口/home/linjiqin/dev/docker为要挂载的本地文件夹,需提前创建/home/mycontainer为docker映射路径,执行上面命令会帮我们创建
2023-06-10 09:43:191

如何部署 Docker Registry 服务

官方镜像下的简单示例 本节中,将创建一个 Container 来运行 Docker 的官方 Registry 镜像。你将推送(Push)一个镜像到这个 Registry 服务器,然后再从该 Registry 中拉取(Pull)同一个镜像。 这是个很好的练习,有助于理解客户端与本地 Regis
2023-06-10 09:43:272

微服务基础服务之docker篇

什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推动 开放容器联盟(OCI)。 Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。 Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。 下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。 传统虚拟化 Docker 为什么要用docker 对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。 使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。 而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。 特性容器虚拟机 启动秒级分钟级 硬盘使用一般为MB一般为GB 性能接近原生弱于 系统支持量单机支持上千个容器一般几十个 基本概念 我们都知道,操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系统的 root 文件系统。 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。 镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。 按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。 数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。 镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。 通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。 Centos安装docker18 常用的docker命令 常用的docker镜像 redis mysql
2023-06-10 09:43:331

Docker入门

docker概念 docker意为码头工人(Dock Worker),即从船上装卸货物的人。这与它的性质非常贴切。 docker 官网是这样解释自己的, 目前阿里,京东,腾讯早已将docker应用到生产环境。 docker 历史 Docker 公司起初是一家名为 dotCloud 的平台即服务(Platform-as-a-Service, PaaS)提供商。 底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为“Docker”。Docker就是这样诞生的! 2013年,dotCloud 的 PaaS 业务并不景气,公司需要寻求新的突破。于是他们聘请了 Ben Golub 作为新的 CEO,将公司重命名为“Docker”,放弃dotCloud PaaS 平台,怀揣着“将 Docker 和容器技术推向全世界”的使命,开启了一段新的征程。 如今 Docker 公司被普遍认为是一家创新型科技公司,据说其市场价值约为 10 亿美元。Docker 公司已经通过多轮融资,吸纳了来自硅谷的几家风投公司的累计超过 2.4 亿美元的投资。 docker 特征 docker 核心概念 docker镜像是一系列文件,它起源于linux联合文件系统,通过分层实现镜像文件的存储。 容器本质上是一个进程,你可以把它想象成虚拟机但是它跟虚拟机完全不同。 docker仓库在hub.docker.com ,当然国内有163,网易蜂巢镜像。如果是private的就需要自己搭建镜像中心了。 docker工作流程 如上图,docker的工作流程大致是, docker的网络 docker的关键在于容器内部与宿主机的通信,我们知道的有三种类型,Bridge 独立网络,Host与宿主机使用同一网络,None无网络。 参照: Docker四种网络模式 - (jianshu.com) Docker pull[OPTIONS] NAME{:TAG} 镜像名称:版本 Docker images[OPTIONS] [REPOSITORY[:TAG]] Docker run [OPTIONS] IMAGE [:TAG] [COMMAND][ARG…] Docker rm NAME docler exec -it backend-tomcat bash 以定制一个 nginx 镜像(构建好的镜像内会有一个 /usr/share/nginx/html/index.html 文件) 注意:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。 所以可以以 && 符号连接命令,这样执行后,只会创建 1 层镜像。 具体的指令参考: Docker Dockerfile | 菜鸟教程 (runoob.com)
2023-06-10 09:43:411

docker属于C++语言吗?

docker不属于C++语言。Docker采用的是Go语言编写的,该语言一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,常用于Web程序开发,并且具有成熟的Web开发框架,如Beego、Gin、Iris等等。Go的语法接近C语言,但对于变量的声明有所不同。Go支持垃圾回收功能。Go的并行模型是以东尼·霍尔的通信顺序进程(CSP)为基础。
2023-06-10 09:43:491

Docker 有什么优势

你好,我是Ghostcloud的高级架构师,简单跟你说下为什么Docker会出现,你就知道它的优势有多明显了。早在十多年前国内外的一些大厂就开始投入研发和使用容器技术,比如Google,对他们来说,使用容器能够充分利用计算资源节省硬件成本。而这几年,真正把容器技术发扬光大的是Docker。Docker的slogan“Build,Ship & Run anywhere”定位非常清晰,Docker的出现打破了传统运维模式里从打包到部署的过程中环境、语言、平台不一致的乱象,将这一整套开发运维模式标准化了,从而真正帮助企业实践了DevOps和微服务化。往细了说,优势太多了,百度知乎一大堆,还是要结合具体的场景和剧情分情况说明,题主自己多查下吧。by:Ghostcloud
2023-06-10 09:43:562

docker容器网络

利用Net Namespace可以为Docker容器创建隔离的网络环境,容器具有完全独立的网络栈,与宿主机隔离。也可以使Docker容器共享主机或者其他容器的网络命名空间,基本可以满足开发者在各种场景下的需要。Docker支持 4种网络模式 :1)host模式,--net=host指定,不支持多主机。 2)container模式,--net = container : name_or_id指定,不支持多主机。 3)none模式,--net=none指定,不支持多主机。 4)bridge模式,--net=bridge指定,默认设置,不支持多主机。 启动容器的时候使用Host模式,那么该容器与宿主机共用一个Network Namespace,因此容器将不会虚拟自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口。 采用Host模式的容器,可以直接使用宿主机的IP地址与外界进行通信,无需额外进行NAT转换。由于容器通信时,不再需要通过Linux Bridge等方式转发或者数据包的拆封,性能上有很大优势。当然, Host模式有利也有弊 ,主要包括以下缺点: 1)容器没有隔离、独立的网络栈。容器因与宿主机共用网络栈而争抢网络资源,并且容器崩溃也可能导致宿主机崩溃,这在生产环境中是不允许发生的。 2)容器不再拥有所有的端口资源,因为一些端口已经被宿主机服务、Bridge模式的容器端口绑定等其他服务占用了。 需要补充说明的是,Host模式下的容器仅仅是网络命名空间与主机相同,但容器的文件系统、进程列表等还是和与宿主机隔离的。Container模式是一种特殊的网络模式。该模式下的容器使用其他容器的网络命名空间,网络隔离性会处于Bridge模式与Host模式之间。当容器与其他容器共享网络命名空间时,这两个容器间不存在网络隔离,但它们与宿主机及其他容器又存在网络隔离。 在Kubernetes体系架构下引入Pod概念,Kubernetes为Pod创建一个基础设施容器, 同一Pod下的其他容器都以Container模式 共享这个基础设施容器的网络命名空间,相互之间以localhost访问,构成一个统一的整体。与前两种不同,None模式的Docker容器拥有自己的Network Namespace,但并不为Docker容器进行网络配置。该Docker容器没有网卡、IP、路由等信息。需要用户为Docker容器添加网卡、配置IP等。 Bridge模式是Docker默认的网络模式,也是开发者最常使用的网络模式。在这种模式下,Docker为容器创建独立的网络栈,保证容器内的进程使用独立的网络环境,实现容器之间、容器与宿主机之间的网络栈隔离。同时,通过宿主机上的Docker0网桥,容器可以与宿主机乃至外界进行网络通信。 同一宿主机上,容器之间都是连接在Docker0这个网桥上,Docker0作为虚拟交换机使容器间相互通信 。但是, 由于宿主机的IP地址与容器veth pair的IP地址均不在同一个网段 ,故仅仅依靠 veth pair和NameSpace的技术 并不足以使宿主机以外的网络主动发现容器的存在。Docker采用了 端口绑定的方式(通过iptables的NAT) ,将宿主机上的端口流量转发到容器内的端口上,这样一来,外界就可以与容器中的进程进行通信。 iptables的介绍,请点我点我 。创建容器,并将宿主机的3306端口绑定到容器的3306端口:docker run -tid --name db -p 3306:3306 mysql 在宿主机上,可以通过“iptables -t nat -L -n”,查到一条DNAT规则:DNAT tcp --0.0.0.0/0 0.0.0.0/0 tcp dpt:3306 to:172.17.0.5:3306 Bridge模式的容器与外界通信时,必定会占用宿主机上的端口,从而与宿主机竞争端口资源,这会造成对宿主机端口管理很复杂。同时,由于容器与外界通信是基于三层上iptables NAT,性能和效率损耗是显而易见的。NAT将地址空间分段的做法引入了额外的复杂度。比如容器中应用所见的IP并不是对外暴露的IP, 因为网络隔离,容器中的应用实际上只能检测到容器的IP,但是需要对外宣称的则是宿主机的IP,这种信息的不对称将带来诸如破坏自注册机制等问题 。摘抄自陆平的《基于Kubernetes的容器云平台实战》一书的第10章Kubernetes网络
2023-06-10 09:44:051

docker有个啥用啊_docker是啥?是干什么的?

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。Docker是PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎,源代码托管在Github上,基于go语言并遵从Apache2.0协议开源。Docker自2013年以来非常火热,无论是从github上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持,就连Google的ComputeEngine也支持docker在其之上运行。一款开源软件能否在商业上成功,很大程度上依赖三件事-成功的usercase(用例),活跃的社区和一个好故事。dotCloud自家的PaaS产品建立在docker之上,长期维护且有大量的用户,社区也十分活跃,接下来我们看看docker的故事。环境管理复杂-从各种OS到各种中间件到各种app,一款产品能够成功作为开发者需要关心的东西太多,且难于管理,这个问题几乎在所有现代IT相关行业都需要面对。云计算时代的到来-AWS的成功,引导开发者将应用转移到cloud上,解决了硬件管理的问题,然而中间件相关的问题依然存在(所以openstackHEAT和AWS都着力解决这个问题)。开发者思路变化提供了可能性。虚拟化手段的变化-cloud时代采用标配硬件来降低成本,采用虚拟化手段来满足用户按需使用的需求以及保证可用性和隔离性。然而无论是KVM还是Xen在docker看来,都在浪费资源,因为用户需要的是高效运行环境而非OS,GuestOS既浪费资源又难于管理,更加轻量级的LXC更加灵活和快速LXC的移动性-LXC在linux2.6的kernel里就已经存在了,但是其设计之初并非为云计算考虑的,缺少标准化的描述手段和容器的可迁移性,决定其构建出的环境难于迁移和标准化管理(相对于KVM之类image和snapshot的概念)。docker就在这个问题上做出实质性的革新。这是docker最独特的地方。
2023-06-10 09:44:111

Docker的主要作用是什么_docker属于什么

目前来看,Docker至少有以下应用场景:1)测试:Docker很适合用于测试发布,将Docker封装后可以直接提供给测试人员进行运行,不再需要测试人员与运维、开发进行配合,进行环境搭建与部署。2)测试数据分离:在测试中,经常由于测试场景变换,需要修改依赖的数据库数据或者清空变动memcache、Redis中的缓存数据。Docker相较于传统的虚拟机,更轻量与方便。可以很容易的将这些数据分离到不同的镜像中,根据不同需要随时进行切换。3)开发:开发人员共同使用同一个Docker镜像,同时修改的源代码都被挂载到本地磁盘。不再因为环境的不同而造成的不同程序行为而伤透脑筋,同时新人到岗时也能迅速建立开发、编译环境。4)PaaS云服务:Docker可以支持命令行封装与编程,通过自动加载与服务自发现,可以很方便的将封装于Docker镜像中的服务扩展成云服务。类似像Doc转换预览这样的服务封装于镜像中,根据业务请求的情况随时增加和减少容器的运行数量,随需应变。具体到Docker技术在测试领域的应用,可以体现在:1)快速搭建兼容性测试环境从Docker的镜像与容器技术特点可以预见,当被测应用要求在各类Web服务器、中间件、数据库的组合环境中得到充分验证时,可以快速地利用基础Docker镜像创建各类容器,装载相应的技术组件并快速启动运行,测试人员省去了大量花在测试环境搭建上的时间。2)快速搭建复杂分布式测试环境Docker的轻量虚拟化特点决定了它可以在一台机器上(甚至是测试人员的一台笔记本电脑上)轻松搭建出成百上千个分布式节点的容器环境,从而模拟以前需要耗费大量时间和机器资源才能搭建出来的分布式复杂测试环境。3)持续集成Docker可以快速创建和撤销容器,在持续集成的环境中,可以频繁和快速地进行部署和验证工作。
2023-06-10 09:44:351

Docker的主要作用是什么?

docker入门专题 docker入门专题 docker https://www.myforever.cn/blog/538872310925361152/550244603433844736 docker入门专题
2023-06-10 09:44:583

Docker是什么?它比虚拟机强在哪里

Docker是一个开源的应用容器引擎,可以让开发者将自身的应用或者软件移植到镜像中,然后发布到任何一个Windows机器或者Linux机器上,当然Docker也可以实现虚拟化。而一个完整的Docker是由:Docker Client客户端,Docker Daemon 守护进程,Docker Image 镜像和Docker Container 容器来组成的。容器是完全采用沙箱机制,相互之间不会有任何接口。而Docker比虚拟机强大的地方在于:第一:启动时间:Docker容器是秒级启动的,而虚拟机时分钟级启动,在启动速度方面,Docker就能够完美地碾压了虚拟机。第二:占用空间和性能:在占用空间和性能方面,Docker容器镜像比虚拟机要小得多且性能要比虚拟机更强。第三:使用要求:虚拟机是基于硬件的虚拟化,其CPU也要有支持虚拟化的支持,Docker共享宿主机内核,可运行在主流的Linux,不用考虑CPU是否支持虚拟化技术。
2023-06-10 09:45:051

什么是docker容器技术?

 Docker是什么?  简单得来说,Docker是一个由GO语言写的程序运行的“容器”(Linuxcontainers,LXCs);目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的隔离;它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来。  Docker是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台。由两部分组成:  DockerEngine:一个便携式、轻量级的运行环境和包管理器。(注*单OSvs单线程,是不是跟NodeJS特别像?)  DockerHub:为创建自动化工作流和分享应用创建的云服务组成。(注*云端镜像/包管理vsnpm包管理,是不是跟npm特别像?)  从2013年3月20日,第一个版本的Docker正式发布到2014年6月Docker1.0正式发布,经历了15个月。虽然发展历程很短,但Docker正在有越来越流行的趋势。  其实Container技术并非Docker的创新,HeroKu,NodeJitsu等云服务商都采用了类似这种轻量级的虚拟化技术,但Docker是第一个将这这种Container技术大规模开源并被社区广泛接受的。  好的部分  Docker相对于VM虚拟机的优势十分明显,那就是轻量和高性能和便捷性,以下部分摘自:KVMandDockerLXCBenchmarkingwithOpenStack  快  运行时的性能可以获取极大提升(经典的案例是提升97%)  管理操作(启动,停止,开始,重启等等)都是以秒或毫秒为单位的。  敏捷  像虚拟机一样敏捷,而且会更便宜,在baremetal(裸机)上布署像点个按钮一样简单。  灵活  将应用和系统“容器化”,不添加额外的操作系统,  轻量  你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。  便宜  开源的,免费的,低成本的。由现代Linux内核支持并驱动。注*轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。  生态系统  正在越来越受欢迎,只需要看一看Google的趋势就知道了,dockerorLXC.  还有不计其数的社区和第三方应用。  云支持  不计其数的云服务提供创建和管理Linux容器框架。
2023-06-10 09:45:152

Docker 有什么优势?

1.统一的管理服务;2.持续交付上的应用;3.弹性计算;想要了解更多,我推荐你去看看时速云,他们是一家全栈云原生技术服务提供商,提供云原生应用及数据平台产品,其中涵盖容器云PaaS、DevOps、微服务治理、服务网格、API网关等。大家可以去体验一下。 如果我的回答能够对您有帮助的话,求给大大的赞。
2023-06-10 09:45:222

容器docker的作用是什么 这四个好处你知道几个

1、作用:提到容器技术,我们就不可避免的会想到docker。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中。在用Docker的情况下,大家可以直接把项目发布在DocKer容器上面进行测试,当项目需要正式上线的时候,直接可以把做好的DocKer 镜像部署上去就行了,如果测试的好,就不必担心项目上正式版本的时候再出现什么问题。 2、好处: (1)轻量、消耗少:使用Docker能合并多个服务以降低费用,不多的操作系统内存占用,跨实例共享多个空闲的内存,这些技术让Docker能以更加紧密的资源提供更有效的服务合并。基于LXC轻量级特点,启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,在单机环境下与KVM之类的虚拟化方案相比,能够更加快速和占用更少资源。 (2)高利用率与隔离:容器服务没有管理程序的额外开销,与底层共享操作系统,性能更加优良,系统负载更低,在同等条件下可以运行更多的实例,充分利用系统资源。同时,容器拥有不错的资源隔离与限制能力,可以精确地对应用分配CPU、内存等资源,保证了应用间不会相互影响。 (3)快速部署与微服务:Docker通过创建流程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁资源,不用担心额外消耗。Docker 提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用。 (4)标准化环境和控制:基于容器提供的环境一致性和标准化,你可以使用Gt等工具对容器镜像进行版本控制。相比基于代码的版本控制来说,还能够对整个应用运行环境实现版本控制,一旦出现故障可以快速回滚。相比虚拟机镜像,容器压缩和备份速度更快,镜像启动也像启动一个普通进程一样快速。
2023-06-10 09:45:291

容器docker的作用是什么 这四个好处你知道几个

1、作用:提到容器技术,我们就不可避免的会想到docker。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中。在用Docker的情况下,大家可以直接把项目发布在DocKer容器上面进行测试,当项目需要正式上线的时候,直接可以把做好的DocKer 镜像部署上去就行了,如果测试的好,就不必担心项目上正式版本的时候再出现什么问题。 2、好处: (1)轻量、消耗少:使用Docker能合并多个服务以降低费用,不多的操作系统内存占用,跨实例共享多个空闲的内存,这些技术让Docker能以更加紧密的资源提供更有效的服务合并。基于LXC轻量级特点,启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,在单机环境下与KVM之类的虚拟化方案相比,能够更加快速和占用更少资源。 (2)高利用率与隔离:容器服务没有管理程序的额外开销,与底层共享操作系统,性能更加优良,系统负载更低,在同等条件下可以运行更多的实例,充分利用系统资源。同时,容器拥有不错的资源隔离与限制能力,可以精确地对应用分配CPU、内存等资源,保证了应用间不会相互影响。 (3)快速部署与微服务:Docker通过创建流程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁资源,不用担心额外消耗。Docker 提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用。 (4)标准化环境和控制:基于容器提供的环境一致性和标准化,你可以使用Gt等工具对容器镜像进行版本控制。相比基于代码的版本控制来说,还能够对整个应用运行环境实现版本控制,一旦出现故障可以快速回滚。相比虚拟机镜像,容器压缩和备份速度更快,镜像启动也像启动一个普通进程一样快速。
2023-06-10 09:45:361

容器docker的作用是什么 这四个好处你知道几个

1、作用:提到容器技术,我们就不可避免的会想到docker。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中。在用Docker的情况下,大家可以直接把项目发布在DocKer容器上面进行测试,当项目需要正式上线的时候,直接可以把做好的DocKer 镜像部署上去就行了,如果测试的好,就不必担心项目上正式版本的时候再出现什么问题。 2、好处: (1)轻量、消耗少:使用Docker能合并多个服务以降低费用,不多的操作系统内存占用,跨实例共享多个空闲的内存,这些技术让Docker能以更加紧密的资源提供更有效的服务合并。基于LXC轻量级特点,启动快,而且docker能够只加载每个container变化的部分,这样资源占用小,在单机环境下与KVM之类的虚拟化方案相比,能够更加快速和占用更少资源。 (2)高利用率与隔离:容器服务没有管理程序的额外开销,与底层共享操作系统,性能更加优良,系统负载更低,在同等条件下可以运行更多的实例,充分利用系统资源。同时,容器拥有不错的资源隔离与限制能力,可以精确地对应用分配CPU、内存等资源,保证了应用间不会相互影响。 (3)快速部署与微服务:Docker通过创建流程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁资源,不用担心额外消耗。Docker 提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用。 (4)标准化环境和控制:基于容器提供的环境一致性和标准化,你可以使用Gt等工具对容器镜像进行版本控制。相比基于代码的版本控制来说,还能够对整个应用运行环境实现版本控制,一旦出现故障可以快速回滚。相比虚拟机镜像,容器压缩和备份速度更快,镜像启动也像启动一个普通进程一样快速。
2023-06-10 09:46:061

如何在 CentOS 7 上安装 Docker

1. 为centos配置yum源, 可以使用网易、aliyun或sohu的2. 配置epel源/etc/yum.repos.d/epel.repo [epel]name=Extra Packages for Enterprise Linux 6 - $basearchbaseurl=""failovermethod=priorityenabled=1gpgcheck=0注: 选择其他的epel源也可以 3. 使配置生效yum clean allyum makecache三 安装docker并启动 A)安装Yum install docker-ioB)启动Service dokcer startC)检查Ps aux |grep docker ,查看是否有 "/usr/bin/docker -d"进程存在执行Docker images 没有报错D) 把dokcer的数据目录转移到大的磁盘分区上, 不是必须的,视自己的机器分区而定Service docker stopMkdir /data/dockerData/Mv /var/lib/docker /data/dockerData/ln -s /data/dockerData/docker /var/lib/dockerService docker startService docker start四 搭建docker私有仓库并制作centos镜像 1. 搭建docker私有仓库安装并启动Yum install docker-registry修改配置把/var/lib/docker-registry 软连接到大的磁盘分区, 不是必须的,视自己的机器分区而定修改配置/etc/sysconfig/docker-registry, 只监听内网的5000端口修改配置/etc/docker-registry.yml 中search_backend和 sqlalchemy_index_database,修改目的是可以通过 curl "x.x.x.x:5000/v1/search?q=xxx" 查询仓库镜像。 #search_backend: _env:SEARCH_BACKENDsearch_backend: sqlalchemy#sqlalchemy_index_database: _env:SQLALCHEMY_INDEX_DATABASE:sqlite:////tmp/docker-registry.db sqlalchemy_index_database: sqlite:////tmp/docker-registry.db启动Service docker-registry restart检查下端口5000是否启动起来 netstat -ntlp 2. 制作centos镜像这一步不是必须的,可用如下方案替换:1)从docker的官方镜像库拉取contos的镜像,然后再import到自己搭建的私有仓库。但docker的官方镜像库被墙了,需要自备梯子。2)Docker官方镜像的临时解决方案使用 index.dockboard.org 下载 Docker 官方镜像的临时解决方案除了上述两种方案, 这里讲如何定制自己centos镜像,仅供测试docker使用。A) 安装软件yum -y install febootstrapB)下载镜像febootstrap -i bash -i wget -i yum -i iputils -i iproute -i man -i vim-minimal -i openssh-server -i openssh-clients centos6 centos6-image C) 生成镜像 cd centos6-image && tar -c . |docker import - xxx/centos-base查看镜像是否已经有xxx/centos-basedocker imagesD) 运行测试测试镜像是否正常docker run -i -t xx/centos-base /bin/bashE) 把制作的镜像添加到私有的docker仓库Docker image 获取IMAGE ID 使用私有的docker仓库的ip:端口给该镜像打tag docker tag 1920ceab1c8b xx.xx.xx.xx:5000/xxx/centos-base推送该镜像到仓库 docker push xx.xx.xx.xx:5000/xxx/centos-baseF) 在另一台机器上可以拉取该镜像并运行 docker pullxx.xx.xx.xx:5000/xxx/centos-basedocker imagesdocker run -t -i xx.xx.xx.xx:5000/xxx/centos-base /bin/bash五 简单测试 1. 从私有仓库拉取镜像Docker pull xx.xx.xx.xx:5000/xxx/centos-base查看镜像IDdocker images根据ID给该镜像起一个简短名字Docker tag 1920ceab1c8b xxx/centos-base运行一个简单的container, 并把container ID传给变量JOB, 后续操作都依赖于该container ID JOB=$(docker run -d xxx/centos-base /bin/bash -c "while true; do /bin/echo Hello world; /bin/sleep 1; done")查看container 是否正常启动Docker ps查看运行日志Docker logs $JOB停止进程Docker stop $JOB查看container 是否已停止Docker ps
2023-06-10 09:46:231

docker容器运维命令有哪些

docker run -d --name alias-Name imageName //在后台启动一个容器docker start Name/ID //启动容器docker stop Name/ID //停止容器docker restart Name/ID //重启容器docker kill -s KILL Name/ID //杀死一个运行的容器docker rm /rm -f Name/ID //删除容器docker pause Name/ID //停止容器docker unpause Name/ID //恢复容器docker create --name CONTAINER_Name imageName //只创建容器但不启动docker ps / docker ps -a //查看运行的容器docker exec -it CONTAINER_ID /bin/bash //进行一个运行中的容器,开启一个新的终端docker attach CONTAINER_ID //进行一个运行中的容器,不开启一个新的终端docker inspect CONTAINER_Name //查看容器的相关信息docker top CONTAINER_Name //查看容器里面的进程docker events -f "image"="imageName" --since="1467302400" //时间戳=2016年7月1日后的相关事件docker logs CONTAINER_Name //查看容器的日志输出docker wait CONTAINER_Name //阻塞运行直到容器停止,然后打印出它的退出代码docker export -o test.tar CONTAINER_ID //将容器进行打包保存到本地,文件类型为tarcat test.tar |docker import - image_name:tag //将上面保存的文件导入到镜像库中docker port CONTAINER_ID //查看容器的端口映射情况commit 从容器中创建一个新的镜像docker commit -a "tony test" -m "my mysql" CONTAINER_ID mymysql:v1docker images mymysql:v1cp 在使用的过程中会进行多个主机与容器之间的数据交换docker cp /ruiqi/content CONTAINER_ID:/ruiqi/diff 用来检查容器里面文件结构的更改docker diff CONTAINER_IDdocker images /docker images -a //查看本地的镜像,-a 表示是所有的镜像docker rmi -f image_name //删除镜像docker tag mysql:v5.6 mysql:v5.7 //给镜像做一个有别名的复本docker build -t runoob/ubuntu:v1 . //构建一个镜像docker history image_name //查看当前这个镜像的 历史 信息docker save -o TestFlask.tar TestFlask:v3 //将当前的镜像保存到本地的一个tar 类型的文件docker login //登录镜像仓库docker pull //从镜像仓库中拉镜像docker push //向镜像仓库推本地的镜像文件docker search //检索镜像内容
2023-06-10 09:46:311

docker是干什么的

docker是开源的应用容器引擎,能更好地在容器内运行任何应用。Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是 PaaS提供商dotCloud开源的一个基于LXC的高级容器引擎,源代码托管在Github上,基于go语言并遵从Apache2.0协议开源。Docker自2013年以来非常火热,无论是从github上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持,就连Google的 Compute Engine也支持docker在其之上运行。Docker的局限1、Docker是基于Linux64bit的,无法在32bit的linux/Windows/unix环境下使用。2、LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的。3、隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库。4、网络管理相对简单,主要是基于namespace隔离。5、cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)。6、Docker对disk的管理比较有限。7、container随着用户进程的停止而销毁,container中的log等用户数据不便收集。
2023-06-10 09:46:391

docker命令整理

不启动docker服务,会报错: 查看docker容器hash值: 查看docker ps完整命令: 然后可以根据contnainer id打开docker命令行 容器文件复制,和cp类似 查看所有: 查看digest: 查看简写hash: 忽略简写hash: 过滤: docker images -f xxxx 过滤标签格式 "key=value",如果有多个条件,则使用这种 --filter "key1=value" --filter "key2=value" 过滤没有打标签的镜像: 查正则: 格式化展示: docker images --format 查看日志最后20行: 显示实时log,和tail -f 一个效果: grep 过滤 log: 根据时间过滤查看 log: 注意,docker logs 不支持 --until docker logs日志文件存储路径 docker 镜像信息: cd var/lib/docker/containers/容器ID 在docker目录下,进入image文件夹,找到repositories.json文件 repositories.json文件详细记录了镜像一些信息 mac下docker镜像保存位置:
2023-06-10 09:46:551

Docker网络

Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理。然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分。因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求。 安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host 首先,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)来收发数据包;此外,如果不同子网之间要进行通信,需要路由机制。 Docker 中的网络接口默认都是虚拟的接口。虚拟接口的优势之一是转发效率较高。 Linux 通过在内核中进行数据复制来实现虚拟接口之间的数据转发,发送接口的发送缓存中的数据包被直接复制到接收接口的接收缓存中。对于本地系统和容器内系统看来就像是一个正常的以太网卡,只是它不需要真正同外部网络设备通信,速度要快很多。 Docker 容器网络就利用了这项技术。它在本地主机和容器内分别创建一个虚拟接口,并让它们彼此连通(这样的一对接口叫做 veth pair)。 创建网络参数 Docker 创建一个容器的时候,会执行如下操作: 完成这些之后,容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络。 可以在 docker run 的时候通过 --net 参数来指定容器的网络配置,有4个可选值: 当你安装Docker时,它会自动创建三个网络。你可以使用以下docker network ls命令列出这些网络: Docker内置这三个网络,运行容器时,你可以使用该–network标志来指定容器应连接到哪些网络。 bridge网络代表docker0所有Docker安装中存在的网络。除非你使用该docker run --network=选项指定,否则Docker守护程序默认将容器连接到此网络。 我们在使用docker run创建Docker容器时,可以用 --net 选项指定容器的网络模式,Docker可以有以下4种网络模式: Docker 容器默认使用 bridge 模式的网络。其特点如下: Host 模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace,故 Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的 IP 地址即为宿主机 eth0 的 IP 地址。其特点包括: Container 网络模式是 Docker 中一种较为特别的网络的模式。处于这个模式下的 Docker 容器会共享其他容器的网络环境,因此,至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。 网络模式为 none,即不为 Docker 容器构造任何网络环境。一旦Docker 容器采用了none 网络模式,那么容器内部就只能使用loopback网络设备,不会再有其他的网络资源。Docker Container的none网络模式意味着不给该容器创建任何网络环境,容器只能使用127.0.0.1的本机网络。 自定义网络模式,docker提供了三种自定义网络驱动: bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是用于创建跨主机网络。 建议使用自定义网桥来控制容器之间的相互通讯,还可以自动DNS解析容器名称到ip地址。Docker提供了创建这些网络的默认网络驱动程序,你可以创建一个新的Bridge网络,Overlay或Macvlan网络,你可以创建一个网络插件或远程网络进行完善的自定义和控制。 你可以根据需要创建任意数量的网络,并且可以在任何给定的时间将容器连接到这些网络中的零个或多个网络。此外,您可以连接并断开网络中的容器,而无需重新启动容器,当容器连接到多个网络时,其外部连接通过第一个非内部网络以词法顺序提供。 接下来介绍Docker的内置网络驱动程序。 使用自定义网络启动容器 自定义网络好处: 参考: https://blog.51cto.com/u_13362895/2130375 https://blog.csdn.net/meltsnow/article/details/94490994 https://blog.csdn.net/weixin_41842682/article/details/90417959
2023-06-10 09:47:041

Docker 的崛起、殒落

在短短不到七年的时间里,Docker先后迎来了五位CEO。这家公司一直竭力围绕其新潮的开创性云软件来开拓业务。 Docker的五位CEO 2019 年,Docker一分为二,将企业业务出售给了云咨询公司Mirantis。 数名前员工表示,对于一家曾引领重大云趋势的初创公司来说,这无异于“失宠”。 本文介绍了Docker如何从一家炙手可热的初创公司变成开源软件界的一则警示故事。 Docker曾经是硅谷最炙手可热的开发者初创公司,而DockerCon大会堪称其皇冠上的宝石。自2014年以来,DockerCon每年吸引成千上万名与会者,是软件容器领域名副其实的盛会。软件容器是一种专门但又颇具影响力的云技术,已成为Docker品牌的代名词。 在早期那几年,谷歌、亚马逊、微软和IBM等公司竞相在大会上策办盛大演示和发布会,热衷于云计算新时代的开发人员蜂拥而来,感受这股热潮。 RedMonk分析师James Governor称容器是“发展最迅猛的技术”之一。 曾经一度,Docker方面的炒作非常猛。Docker从Greylock Partners、Insight Partners和红杉资本等大牌投资者处筹资超过2.7亿美元,2018年估值达到最高峰:13.2亿美元。 快速发展的势头也引得IT巨头们为之侧目; 据说Docker在2016年拒绝了微软斥资40亿美元的收购要约。 但就在容器市场一路狂奔之际,Docker很快重重地摔到了地面。 Kubernetes的横空出世给这家初创公司施加了巨大的压力,它未能顶住这个压力。Kubernetes是谷歌发明的一种免费开源容器管理工具,抢走了Docker自己产品的风头。 Docker在不到七年的时间里先后迎来了五位CEO,试图东山再起。 2019年,Docker拆分公司,将企业业务出售给了Mirantis。 Docker剩余的家底筹集了3500万美元的A轮融资,实际上重组为一家全新的初创公司。 一位前员工告诉《商业内幕》杂志:“从价值10亿美元的独角兽,拒绝微软的收购要约,后来沦落到彻底崩溃,不得不重组整家公司,这是一则让人大跌眼镜的失宠故事。” 如今,Docker致力于为开发人员提供自动化工具,最近宣布年度经常性收入(ARR)已超过5000万美元。 Docker拒绝就本文发表评论,只是特别指出:过去这两年超过80000人参加了该公司主办的虚拟DockerCon活动,新冠疫情导致线下大会被取消。 为了回顾这家公司的影响力以及在那里工作是一种什么感觉,《商业内幕》杂志不仅采访了分析师和技术高管,还采访了10位Docker前员工。 这些前员工不愿透露姓名,以便可以畅所欲言,不过《商业内幕》知道他们的身份。他们称Docker“错失了良机”,并对公司未能将其“坐上火箭的技术”转变为商业成功表示了失望。但作为一家为兼顾盈利和服务开源社区而犯难的开源软件初创公司,它绝不会很简单。 “开源倡导者” Docker的故事始于巴黎一家名为DotCloud的初创公司,这家公司由Solomon Hykes、Kamel Founadi和Sebastien Pahl于2008年共同创办,旨在为软件开发人员提供云托管服务。在随后几年,Hykes带领手下开发了一款基于容器的工具,帮助DotCloud加快和扩展运营。 Docker创始人Solomon Hykes 2013年,Hykes推出了这款名为Docker的工具,将其作为开源产品来发布,那样谁都可以下载、使用和修改。 同年,DotCloud聘请Red Hat负责Gluster存储软件业务的资深人士Ben Golub担任CEO,Hykes转任首席技术官。Golub的首要举措之一是宣布DotCloud更名为Docker Inc。 此举让投资者兴奋不已:AWS或微软Azure等云平台那时还不是巨无霸,但它们显然在迅速增长。 Docker的技术承诺可帮助开发人员充分利用那些平台,这反过来又帮助Docker在2013年完成了新一轮融资,估值达到1亿美元。 员工们表示,很快发现,Docker这个新贵有其自己的责任——具体来说,就是把免费开源软件Docker的成功转化为重新命名的初创公司Docker Inc.的收入。 前员工称赞Hykes是“理想主义者”和“开源倡导者”,这些雅号帮助Docker吸引和留住了顶级技术人才,但后来证明,这多少又是把双刃剑。前员工表示,开源当初让Docker赚足了眼球,并使它在开发人员中流行开来,但这家公司从未有过一项靠谱的计划,凭这款软件大赚一把。 前员工表示,Hykes基本上对优先考虑付费企业客户可能想要的“普通”功能不感兴趣,包括基于角色的访问控制和更好的用户身份验证。相反,他对开源社区对于Docker的意见比较感兴趣。一位前员工回忆起一件事,一群Docker销售人员当面告诉Hykes那些缺失的功能对付费客户有多么重要。 Docker前CEO Ben Golub出席2015年的微软Build大会。Golub现在是Storj Labs 的执行主席兼临时CEO Docker的“原罪”与谷歌的Kubernetes崛起 Docker最重大的挑战来得很早,员工们说它也恰恰错失了最好的机会。 早在Docker崛起之前,谷歌就使用Borg(一种自主开发的软件容器变种技术)来管理自己的庞大数据中心。随着容器在业界的人气越来越高,谷歌在2014年推出了基于Borg的开源软件项目:Kubernetes。 凭借谷歌的支持以及即使在超大规模环境下也表现出色的美誉,Kubernetes一炮走红。这就给Docker出了一道难题,其创收计划在很大程度上依赖一款名为Swarm的企业级收费产品。 Kubernetes和Swarm都承诺可帮助用户管理容器,但谷歌的软件免费又可靠,很快成为了首选工具。 内部人士表示,Docker突然看起来不像是潮流引领者,更像是追随者。 西班牙巴塞罗那KubeCon 2019大会 一位前Docker员工说:“Kubernetes把房间里的空气都吸走了。我们的客户开始打探Kubernetes,它开始成为人人都想捣鼓一下的新玩具。” Kubernetes是主要由志愿者开发的开源项目,不属于任何一家公司。谷歌后来将它捐给了独立组织云原生计算基金会(CNCF)。从小企业到AWS或微软等大巨头,任何公司只要觉得合适,都可以使用它。Kubernetes从未想过盈利。 Docker有机会成为Kubernetes潮流的一部分;Kubernetes的联合创始人Craig McLuckie去年告诉《InfoWorld》杂志,谷歌曾讨论过将整个项目捐给Docker,让这家初创公司管理。但数位前员工表示,Docker的领导层并未拥抱Kubernetes,也没有将它与Docker自己的产品集成起来,而是将Swarm定位其竞争对手,让两者相互争夺用户。 Joe Beda和Craig McLuckie在谷歌帮助创建了Kubernetes 几年后,在新任CEO的领导下,Docker原本要改变策略,并推出Kubernetes集成机制。但一位从事Docker企业产品开发的前员工表示,最初的犹豫不决是公司的“原罪”。 向企业转型 到2017年,Kubernetes变得越来越流行;需求日益旺盛,AWS、微软Azure和谷歌云适时引入了支持该技术的功能。与此同时,由于未能实现销售目标,Docker难以找到小众市场。 那年,Docker请来了一位新的CEO:Steve Singh,这位经验丰富的技术高管在1993年创立Concur,在2014年成功促成该公司被SAP收购,因此在业内家喻户晓。他负责加大开发企业产品的力度,并让公司回到正轨。 一位前员工表示,Singh到来后,公司文化发生了“明显的转变”。另一位前员工表示,这位新CEO从SAP、微软和VMware等公司聘请高管,大力推行他制定的战略,并将备受喜爱的公司标志(一堆集装箱上的一头卡通鲸鱼)变得更具“企业形象”。 内部人士表示,Singh被前员工夸赞为“热情洋溢”和“伟大的领导者”,他大力主张透明度和包容性。在他的领导下,公司采取了诸多措施,招聘时注重多元化,并竭力在其开源软件中剔除“master”或“slave”之类的术语。 2018年旧金山,Steve Singh出席DockerCon。Docker前CEO Singh现在是Madrona Venture Group的董事总经理 前员工表示,在Singh的带领下,Docker获得了一些客户的青睐。2018年10月,Docker完成了9200万美元的E轮融资,估值达到13.2亿美元——这是它拆分前的最近一次私募融资。 不过,Docker仍在竭力实现销售和收入目标。 2018年初,Hykes决定辞职走人。他说:“我们需要Steve身边有一名为世界上最大的公司交付和支持软件方面有数十年经验的CTO。” 2019年,情况到了严重关头。那年2月,Docker解雇了员工,以实现正向现金流的既定目标。几个月后,Singh宣布新的Docker Enterprise 3.0将包括支持Kubernetes的功能,CEO称此举有望吸引那些重要的大客户。 Singh在2019年5月告诉《商业内幕》杂志:“我们创办公司不是为了退出。我们创办公司是为了拥有一家伟大的长期发展的企业,具有可持续性。” 前员工表示,这些举措使许多人质疑公司的战略。不过,仍有一些人相信Singh可以带领Docker跨过这道障碍,尤其是考虑到迄今为止他取得的所有成就。 难怪Docker在2019年6月宣布Singh将在担任CEO仅两年多后离开公司的消息在内部引发了地震。 一位前员工说:“我们认为一切都还OK。我们一直在发展壮大公司,让产品日臻完善。” 虎头蛇尾的收购 Singh出局,Rob Bearden取而代之。作为开源大数据公司Hortonworks的CEO,Bearden负责将公司出售给昔日竞争对手Cloudera的工作。员工们注意到,Bearden将他以前的许多得力干将从Hortonworks带到了Docker,他总是不停地开会。他们很快就相信Bearden是专门为了出售Docker而被请来的。 Docker前CEO Rob Bearden现在是Cloudera CEO 2019年11月,Bearden上任仅几个月后,Docker 宣布将企业业务出售给Mirantis。Docker剩余的部门将改而致力于开发面向软件开发人员的产品,由分拆前担任首席产品官的Scott Johnston统一领导。 Mirantis CEO Adrian Ionel在最近的采访中告诉《商业内幕》杂志,Docker和Mirantis有着长期的合作伙伴关系,并且对Kubernetes的未来有相似的看法,从而使Docker成为了诱人的收购对象。 前员工表示,这则消息反响欠佳:公司上下已认识到了Docker可能会出售的事实,但他们预计买家会是亚马逊或微软之类的大牌公司;许多人获悉Docker将出售给像Mirantis这样一家藉藉无名的小公司后,大为震惊,继而感到失望。大家以为会书写云计算 历史 上的重要篇章,没想到迎来的却是虎头蛇尾的结局。 一位前员工谈到他们在Docker的美好时光时说:“我们起初以为这会是大交易,有人会为此大书特书。Mirantis不是那样的重量级买家。” 收购后几周内,Mirantis解雇了Docker的几名员工。Ionel表示,为了使公司“更长期独立生存和发展”,这“完全不可避免”。这些前员工表示,由于公司人员流动率很高,许多在裁员后留下来的人不久之后自愿离开了。一位前雇员说,许多人拿到留职金后,就“争先恐后地走人”。Bearden本人在Docker出售后不久就离开了,2020年初回到Cloudera担任CEO。 Mirantis表示,通过收购进来的前Docker员工中一半以上仍留在该公司,包括CTO Adam Parco。该公司告诉《商业内幕》,它没有再进行任何裁员,此后扩大了规模。 在新东家的体制下,Docker的文化经历了又一次转变。Docker以深厚的工程文化为豪,还有硅谷的典型福利,比如免费小吃、自助午餐以及偶尔的奢华假日派对。相比之下,Mirantis较为低调、节俭,并引以为豪。免费 美食 很少见,而不是司空见惯,Mirantis的领导层一再强调了Docker需要控制成本。 Ionel告诉《商业内幕》杂志:“我们不是一家非常重视滑雪旅行、大搞派对、开会必选五星级酒店的公司,而是一家以创造价值、构建出色的产品以及非常注重长远目标为豪的公司。” 这次出售也宣告DockerCon从此没落,员工们之前将其视为一项重要投入,也是公司基因的一部分。Ionel表示,Mirantis不认为投入到该大会的时间和费用“符合战略”,决定将来不参与其中。 一名效力Mirantis的前员工说:“他们看到我们在DockerCon上花了大量时间后哄堂大笑,我们羞得跑出去了房间。” 下一步何去何从 有理由对Mirantis和刚重组的Docker的下一篇章持乐观态度。 前员工称Johnston是合适的CEO,能够领导更小巧更低调的Docker度过这段非常时期,称他“为人开放”、“平易近人”、“善于管理下属”。 Docker现任CEO Scott Johnston 前CEO Singh表示,他很推崇现在的 Docker和Johnston的领导力,称其是“超级粉丝”。 Singh说:“并入到Mirantis中的企业版运行良好,Scott在Docker运作的核心开发工具业务也是如此。” Mirantis表示,2021年是有史以来最好的年头,这在很大程度上归功于收购了Docker。发言人表示,仅去年一年,就有近300家“传统”Docker Enterprise客户与该公司的订单比原来增加了逾1000万美元。 虽然Docker的故事并没有像许多人希望的那样收尾,但不可否认的是,它引领了一场持续至今的行业运动。Red Hat CTO办公室负责人Steve Watt表示,Docker的核心技术开创了云计算行业的“全新时代”。虽然Docker没有像员工们预期的那样上市或被 科技 巨头收购,但它帮助HashiCorp和GitLab等其他开源公司打开了通向IPO 的大门。 许多前员工表示,他们仍然怀念在Docker工作的时光,纷纷赞扬这家公司是“紧密的大家庭”、“很友好”、“我工作过的最好地方”、“最开放的公司”和“合作氛围非常好”。 但业内许多人士将Docker视为一则警示故事,凸显了开源初创公司面临的长期挑战。 Forrester研究公司的首席分析师Lee Sustar告诉《商业内幕》杂志:“你希望产品能够成功。与此同时,你希望成为开源社区的一员,并为该生态系统注入活力,但从商业层面上来说又能蓬勃发展。把握好这一点是许多初创公司想要做好的。”
2023-06-10 09:47:121

怎样使用Docker帮助

https://mbd.baidu.com/newspage/data/landingshare?context=%7B%22nid%22%3A%22news_9712805550544478218%22%2C%22sourceFrom%22%3A%22bjh%22%7D 或许对你有帮助
2023-06-10 09:47:191

docker控制台在哪

docker控制台在以下位置:1、在启动菜单中。2、在Windows系统中,可以在命令行窗口中运行"dockerd"命令来启动Docker控制台。
2023-06-10 09:47:431

如何使用docker 进行开发

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。
2023-06-10 09:47:501