Docker是什么?

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

Docker 是一种运行于 Linux 和 Windows 上的软件,用于创建、管理和编排容器。

Docker 是在 GitHub 上开发的 Moby 开源项目的一部分。

Docker 公司,位于旧金山,是整个 Moby 开源项目的维护者。Docker 公司还提供包含支持服务的商业版本的 Docker。

官网地址 : https://www.docker.com
文档地址: https://docs.docker.com/
仓库地址: https://hub.docker.com/


Docker为什么出现?

  • 在开发的时候,在本机测试环境可以跑,生产环境跑不起来

比如 java Web应用程序举例, 我们一个 java Web应用程序涉及很多东西,比如jdk、 tomcat、mysq等软件环境。
当这些其中某一项版本不一致的时候,可能就会导致应用程序跑不起来这种情况。 Docker则将程序以及使用软件环境直接打包在一起,无论在那个机器上保了环境一致。
优势1:一致的运行环境,更轻松的迁移

  • 服务器自己的程序挂了,结果发现是别人程序出了问题把內存吃完了,自己程序因为内存不够就挂了

这种也是一种比较常见的情况,如果你的程序重要性不是特别高的话,公司基本上不可能让你的程序独享一台服务器的,
这时候你的服务器就会跟公司其他人的程序共亨一台服务器,所以不可避免地就会受到其他程序的干扰,导致自己的程序出现问题。 Docker就很好解决了环境隔离的问题,别人程序不会影响到自己的程序
优势2:对进程进行封装隔离,容器与容器之间互不影响,更高效的利用系统资源

  • 公司要弄一个活动,可能会有大量的流量进来,公司需要再多部署几十台服务器

在没有Docker的情况下, 要在几天内部署几十台服务器,这对运维来说是一件非常折磨人的事,而且每台服务器的环境还不一定一样,就会出现各种问题,最后部署地头皮发麻。
用 Docker的话,我只需要将程序打包到镜像,你要多少台服务,我就给力跑多少容器,极大地提高了部署效率。
优势3:通过镜像复制N多个环境一致容器


Docker的历史

2010年,几个搞的年轻人,就在美国成立了一家公司 dotcloud
做一些pass的云计算服务! LXC有关的容器技术
他们将自己的技术(容器化技术命名就是 Docker!
Docker刚刚诞生的时候,没有引起行业的注意! dotcloud,就活不下去
开发源代码
2013年, Docker开源
Docker越来越多的人发现了 docker的优点
Docker每个月都会更新一个版本
4年4月9日, Docker1.0发布
Docker为什么这么火? 十分的轻巧

在容器技术出来之前,我们都是使用虚拟机技术!
虚拟机:在 window中装一个 Vmware,通过这个软件我们可以虚拟出来一台或者多台电脑!笨重
虚拟机也是属于虚拟化技术, Docker容器技术,也是一种虚拟化技术!

:::info vm: linux centos原生镜像,(一个电脑) 隔离, 需要开启多个虚拟机 几个G 几分钟
docker: 隔离, 镜像(最核心的环境 4m + jdk + mysql) 十分的小巧, 运行镜像就可以了. 几个M, 秒级启动! :::


Docker与虚拟机的区别

虚拟机技术

image.png
虚拟机是携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重

虚拟机技术缺点:

  1. 资源占用十分多
  2. 冗余部分多
  3. 启动很慢

容器化技术

image.png
docker是不携带操作系统的, 所以docker应用就非常的轻巧。

Docker优势:
1.体量轻巧
2.docker分配资源直接是 虚拟内存 —> 真正物理内存过程

比较 Docker和虚拟机技术的不同:

传统虚拟机 Docker容器
磁盘占用 几个GB — 几十个GB左右 几十MB - 几百MB
CPU内存占用 占用高 占用低
启动速度 (从开机到运行项目)几分钟 (从开启容器到运行项目)几秒钟
安装管理 需要专门的运维技术 安装、管理方便
应用部署 每次部署都费时费力 从第二次部署开始轻松简洁
耦合性 多个应用服务安装到一起,容易互相影响 每个应用服务一个容器, 达成隔离
系统依赖 需求相同或相似的内核,目前推荐是Linux

Devops(开发、运维)

应用更快速的交付和部署 :::info 传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一键运行 :::

更便捷的升级和扩编容 :::success 使用了 Docker之后,我们部罟应用就和搭积木一样!
项目打包为一个镜像,扩展服务器A!服务器B :::

更简单的系统运维 :::tips 在容器化之后,我们的开发,测试环境都是高度一致的 :::

更高效的计算资源利用 :::info Docker是内核级别的虚拟化,可以再一个物理机上可以运行很多的容实例!服务器的性能可以被压榨到极致 :::


Dockerde的基本组成

1865616-20200420232419387-1082587992.jpg

镜像(image)

镜像就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器

容器(container)

Docker利用容器独立运行的一个或一组应用。容器是用镜像创建的运行实例。
它可以被启用,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。
可以把容器看作是一个简易版的Linux环境(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一摸一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的

仓库(repository)

仓库是集中存放镜像文件的场所。
仓库和仓库注册服务器(Registry)是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签
仓库分为公开仓库(public)和私有仓库(private)两种形式
最大的开放仓库是Docker Hub: https://hub.docker.com/ 存放了数量庞大的镜像供用户下载。
国内的公开仓库包括阿里云,网易云等