Docker是什么?
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口.
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与虚拟机的区别
虚拟机技术

虚拟机是携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重
虚拟机技术缺点:
- 资源占用十分多
- 冗余部分多
- 启动很慢
容器化技术

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的基本组成
镜像(image)
镜像就是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建很多容器
容器(container)
Docker利用容器独立运行的一个或一组应用。容器是用镜像创建的运行实例。
它可以被启用,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。
可以把容器看作是一个简易版的Linux环境(包括root用户权限,进程空间,用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一摸一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的
仓库(repository)
仓库是集中存放镜像文件的场所。
仓库和仓库注册服务器(Registry)是有区别的,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签
仓库分为公开仓库(public)和私有仓库(private)两种形式
最大的开放仓库是Docker Hub: https://hub.docker.com/ 存放了数量庞大的镜像供用户下载。
国内的公开仓库包括阿里云,网易云等
