-
docker 容器(container)
-
docker 仓库(resoisitory)
-
底层原理
-
- 底层原理
-
- namespace
-
control groups
-
union file systems
-
Docker 引擎
-
Docker 架构
-
Docker 为什么快
虚拟机和容器都属于虚拟化技术。
虚拟机是在一套硬件上,虚拟出一个完整的操作系统,在该系统上再运行所需的应用进程。
容器不是虚拟出一个完整的操作系统,而是对进程的隔离。
下面的图片比较了 Docker 和虚拟机的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而虚拟机则是在硬件层面实现。
虚拟机和容器的区别
| 特性 | 虚拟机 | 容器 |
| — | — | — |
| 量级 | 重量级 | 轻量级 |
| 性能 | 接近原生 | 弱于原生 |
| 操作系统 | 每个VM都在自己的OS中运行 | 所有容器共享主机操作系统 |
| 启动时间 | 以分钟为单位 | 以毫秒为单位 |
| 硬盘使用 | 一般为 GB | 一般为 MB |
| 占用资源 | 占用更多的内存和CPU资源 | 占用较少的内存和CPU资源 |
| 隔离性 | 完全隔离,因此更安全 | 进程级隔离,可能不太安全 |
| 系统支持量 | 一般几十个 | 支持上千个容器 |
Docker 是开源应用容器引擎,轻量级容器技术。Docker 诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
作为一种新兴的虚拟化技术,Docker 跟传统的虚拟机相比具有众多的优势。
-
一致的运行环境:Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境的一致性,从而不会再出现“这段代码在我机器上没问题啊”这类问题。
-
更快速的启动时间:可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。
-
隔离性:避免公用的服务器,资源会容易受到其他用户的影响。
-
弹性伸缩,快速扩展:善于处理集中爆发的服务器使用压力。
-
更轻松的迁移:Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
-
持续交付和部署:使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。
不同公司的应用场景不同,常见的应用场景有
-
Web 应用的自动化打包,自动化测试和持续集成、快速部署。
-
弹性的云服务:因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
-
提供一致性的环境:同步开发环境和生产环境等
其他的应用场景可以参考:8 个 Docker 真实应用场景
Docker 包括三个基本概念
-
镜像(Image)
-
容器(Container)
-
仓库(Repository)
理解了这三个概念,就理解了 Docker 的整个生命周期。
Docker 三个关键动作:Build、Ship、 Run。
-
Build(构建镜像):镜像就像是集装箱包括文件以及运行环境等资源
-
Ship(运输镜像):主机和仓库间运输,这里的仓库就像是超级码头一样
-
Run (运行镜像):正在运行的镜像就是一个容器,容器就是运行程序的地方
以上内容部分引自:《Docker 技术入门与实战》
docker 镜像(image)
-
一个只读模板,可以用来创建容器,一个镜像可以创建多个容器
-
Docker 提供了一个很简单的机制来创建和更新现有的镜像,甚至可以直接从其他人那里获取做好的镜像直接使用
docker 容器(container)
-
容器是从镜像创建的运行实例,也就是镜像启动后的一个实例称为容器,是独立运行的一个或一组应用。
-
docker 利用容器来运行应用,他可以被启动、开始、停止、删除,每个容器都是相互隔离的、保证安全的平台。
-
可以把容器看做是一个简易版的 Linux(包括 root 用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
docker 仓库(resoisitory)
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool 等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用 push
命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull
下来就可以了。
注:Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
底层原理
docker
底层使用了一些 linux
内核的特性,大概有 namespace
,cgroups
和 ufs
namespace
docker
使用 linux namespace
构建隔离的环境,它由以下 namespace
组成
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!