一文让你彻底搞懂什么时候用docker

简介: 从由来到应用的介绍。

一、Docker介绍

image.png

问题

问题1:
某IT部门要上线一个项目。常规操作,直接去线上服务器,拷贝一个tomcat,然后改端口号,然后部署应用到webapps文件夹
下,重启就好。
一个服务器上可能会部署多个应用服务。如果某个应用出现问题,CPU100%,可能这个服务器上的其他应用也会出现问题。
对于一个大型应用拆分为几十个微服务,分别交由不同的团队开发,不同团队之间水平参差不齐。如果还采用这种部署方式,你
的应用可能会因为另一个团队的应用发生意外。因部署在了同一台服务器上,导致全部出现问题。
问题2:
开发和线上代码(同一套代码)问题。开发阶段部署一套软件环境,测试人员在开发中测试没有问题,运维进行部署。但是正式
部署到服务器时,发生了问题(启动参数、环境问题、漏配了参数)等意外。
问题3:
随着微服务技术的兴起,一个大的应用需要拆分成多个微服务。多个微服务的生成,就会面临庞大系统的部署效率,开发协同效
率问题。然后通过服务的拆分,数据的读写分离、分库分表等方式重新架构,而且这种方式如果要做的彻底,需要花费大量人力物
力。可能需要部署很多个服务器。
问题4:
持续的软件版本发布/测试项目。到线上环境的集成

什么是docker

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机
器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

为什么用docker

1 、 简化程序
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可
以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经
是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

2 、 避免选择恐惧症
如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;
Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数
据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

3 、 节省开支
一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然
高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟
化的方式。

4 、 持续交付和部署

对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。使用 Docker 可以通
过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成
(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部
署(Continuous Delivery/Deployment) 系统进行自动部署。而且使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可
以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像

5 、 更轻松的迁移

由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、
虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应
用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况

Docker的应用场景

Web 应用的自动化打包和发布。

自动化测试和持续集成、发布。

在服务型环境中部署和调整数据库或其他的后台应用。

从头编译或者扩展现有的 OpenShi 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

IaaS:(Infrastructure-as-a-Service)(基础设施即服务)
PaaS:(Platform as a Service)(平台即服务)
SaaS:(Software-as-a-Service)(软件即服务)

Docker和虚拟机总结

image.png

名词解释:
infrastructure (基础服务)硬件 Host OS 主机操作系统
VM 虚拟机 Hypervisor 虚拟层程序
  1. 实现原理技术不同 虚拟机是用来进行硬件资源划分的完美解决方案,利用的是硬件虚拟化技术,如此VT-x 、

AMD-V会通 过一个 hypervisor 层来实现对资源的彻底隔离。 而容器则是操作系统级别的虚拟化,利用的是内核
的 Cgroup 和 Namespace 特性,此功能通过软件 来实现,仅仅是进程本身就可以实现互相隔离,不需要任何辅
助。

  1. 使用资源方面不同 Docker 容器与主机共享操作系统内核,不同的容器之间可以共享部分系统资源,因此更加

轻量级, 消耗的资源更少。 虚拟机会独占分配给自己的资源,不存在资源共享,各个虚拟机之间近乎完全隔
离,更加重量级,也 会消耗更多的资源。

  1. 应用场景不同 若需要资源的完全隔离并且不考虑资源的消耗,可以使用虚拟机。 若是想隔离进程并且需要运

行大量进程实例,应该选择 Docker 容器。

特性 容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为MB 一般为GB
系统支持量 单机支持上千个容器 一般几十个

Docker总结

image.png

  • Docker是世界领先的软件容器平台。
  • Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的

UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的
隔离的进程,因此也称其为容器。Docke最初实现是基于LXC。

  • Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的

事情上:构建杰出的软件。

  • 用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就

像管理普通的代码一样。

  • Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“这段代码在我

机器上没问题啊”这类问题;——一致的运行环境

  • 可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。——更快速的启动时间

避免公用的服务器,资源会容易受到其他用户的影响。——隔离性

  • 善于处理集中爆发的服务器使用压力;——弹性伸缩,快速扩展
  • 可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正

常运行的情况。——迁移方便

  • 使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。——持续交付和部署
目录
相关文章
|
6月前
|
Java Go 虚拟化
【Docker 系列】docker 学习十一,docker 总结和面试题整理
【Docker 系列】docker 学习十一,docker 总结和面试题整理
|
4天前
|
Kubernetes API Docker
Docker+K8s基础(重要知识点总结)
Docker+K8s基础(重要知识点总结)
87 0
|
4天前
|
Linux 网络安全 Docker
docker相关面试题
docker相关面试题
37 0
|
10月前
|
存储 开发者 Docker
Docker学习路线4:Docker基础知识
Docker是一个平台,简化了在轻量、可移植的容器中构建、打包和部署应用程序的过程。在本节中,我们将介绍Docker的基础知识、其组件以及您需要开始使用的关键命令。
106 0
|
Docker 容器
docker必备知识(一)
docker必备知识
204 0
|
Shell 应用服务中间件 Linux
|
Linux 测试技术 Go
docker对小白来说有什么用?如何才能学好docker?底层原理是什么?
docker对小白来说有什么用?如何才能学好docker?底层原理是什么?
|
存储 JSON 运维
Docker(二)入门:Docker底层原理和常用命令
该docker images命令采用一个可选[REPOSITORY[:TAG]]参数,将列表限制为与参数匹配的镜像。如果您指定 REPOSITORY但 no TAG,该docker images命令会列出给定存储库中的所有镜像。
291 0
Docker(二)入门:Docker底层原理和常用命令
|
运维 Docker 容器
docker学习日记(一):Docker基本介绍
1.比较Docker和虚拟技术的不同: 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核,也没有虚拟我们的硬件,所以就轻便了 每个容器是相互隔离,每个容器内部都有一个属于自己的文件系统,互不影响。
67 0
|
存储 Ubuntu Java
Docker基础知识
Docker基础知识
119 0
Docker基础知识