docker - 为什么会出现?能干什么?

1,484 阅读4分钟

这是我参与8月更文挑战的第21天,活动详情查看:8月更文挑战

Docker 为什么会出现?

一款产品: 从开发到上线,最少有两套环境(开发、生产)

在开发的工程中,我们可能会遇到以下问题:

  1. 在开发的电脑可以运行!在其他环境出现问题了
  2. 版本更新,导致服务不可用
  3. 环境配置是十分的麻烦,每一台机器都要部署环境(集群RedisESHadoop...),配置起来费时费力
  4. 不能够跨平台(比如Windows开发,linux发布)

所以,我们会希望在部署时,项目能不能带上环境打包!比如说:发布一个spring boot项目同时带上数据库、缓存等。

传统:开发将项目打包,剩余交给运维来做 现在:开发打包部署上线,一套流程做完

Docker就是给以上的问题,提出了解决方案!

就好比,开发人员给应用商店发布了一个应用,用户下载安装就可以使用

开发 ---> APK ---> 发布(应用商店)---> 用户下载APK ---> 安装使用

Docker 就是开发人员把项目和环境打包好,发布到仓库,运维人员下载运行即可

开发 ---> jar(打包项目带上环境:镜像)---> 发布到(Docker仓库) ---> 运维下载 ---> 运行使用

Docker 的思想来自于集装箱!

隔离:Docker的核心思想,打包装箱,每个箱子之间是互相隔离的。

没有使用docker之前,一个系统上运行很多应用,多个应用之间可能会出现一些问题,而且这些应用之间是交叉的(比如都在使用数据库,端口错误),而且项目之间不会影响。

Docker通过隔离机制,可以将服务器的利用到极致!

Docker 历史

2010年,法裔美籍开发者和企业家 Solumon Hykes,在美国成立了一家公司dotCloud,做一些PaaS的云计算服务。

底层技术上,dotCloud 平台利用了 Linux 容器技术。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为DockerDocker就是这样诞生的!

2013年,dotCloudPaaS 业务并不景气,公司需要寻求新的突破。于是他们聘请了 Ben Golub 作为新的 CEO,将公司重命名为Docker,放弃dotCloud PaaS 平台,怀揣着“将 Docker 和容器技术推向全世界”的使命,开启了一段新的征程。同时将Docker开源,被越来越多的人发现docker优点。之后Docker每个月都会更新一个版本。

2014年4月,Docker1.0发布!

Docker 为什么这么火?

相对于其他的容器技术,十分的轻巧!

在容器技术之前,都是使用的虚拟机(VM ware)。

虚拟机:需要先装 VM ware,通过这个软件我们可以虚拟出来一台或者多台电脑。虚拟出来的电脑会比较笨重,占用资源很多。

虚拟机属于虚拟化技术,Docker容器技术也是虚拟化技术

vm: linux centos 原生镜像(一个电脑) 隔离:需要开启多个虚拟机,大小几个G,启动几分钟。

docker: 隔离:镜像(最核心的环境:4m,然后我们需要什么安装什么增加什么进去),十分小巧,运行镜像即可。大小几M,秒级启动

Docker 是基于go语言开发的。

官网:www.docker.com/

文档:docs.docker.com/ 文档是非常详细的

仓库地址: registry.hub.docker.com/

Docker能干什么?

虚拟机技术

image.png

缺点:

  • 资源占用十分多
  • 冗余步骤多
  • 启动慢

容器化技术

容器化技术不是模拟一个完整的操作系统,只是操作系统的核心

image.png

比较

  • 传统虚拟机:虚拟出一套硬件,运行一个完成的操作系统,然后再这个系统上安装和运行软件
  • 容器内的应用直接运行在宿主机的内核,容器是没有自己的内核的,也没有虚拟我们的硬件,所以经轻便了
  • 每个容器间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响。

DevOps(开发运维)

  • 更快速的交付和部署

    传统,一堆帮助文档,安装程序

    Docker: 打包镜像发布测试,一件运行

  • 更便捷的升级和扩缩容

    使用Docker之后,我们部署应用集合搭积木一样!

  • 更简单的系统运维

    在容器化之后,我们开发、测试环境都是高度一致的。

  • 更高效的计算资源利用

    Docker是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器示例!服务器的性能被压榨到极致。