-
容器(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
组成
-
pid
:隔离进程 -
net
:隔离网络 -
ipc
:隔离 IPC -
mnt
:隔离文件系统挂载 -
uts
:隔离hostname -
user
: 隔离uid/gid
control groups
也叫 cgroups
,限制资源配额,比如某个容器只能使用 100M
内存
union file systems
UnionFS
是一种分层、轻量级并且高性能的文件系统,支持对文件系统的修改作为一次提交来一层层的叠加。docker
的镜像与容器就是分层存储,可用的存储引擎有 aufs
,overlay
等。
docker
的镜像和容器都使用了 unionFS
做分层存储,镜像作为只读层是共享的,而容器在镜像之上附加了一层可写层,最大程度地减少了空间的浪费。
关于分层存储的详细内容可以查看官方文档 docker: About storage drivers
Docker 引擎
Docker 引擎是一个 Client-Server 应用程序,有以下主要组件:
-
Server 是一个长期运行的程序,成为守护进程(Docker 命令)
-
REST API,可以用来与守护进程进行通信并指示其操作的接口
-
命令行界面(CLI)客户端(Docker 命令)
命令行界面使用 API 通过脚本或直接在命令行界面通过命令与 Docker 守护进程交互。
Docker 架构
docker
的架构图如下
从图中可以看出几个组成部分
-
docker client
:即docker
命令行工具 -
docker host
:宿主机,docker daemon
的运行环境服务器 -
docker daemon
:docker
的守护进程,docker client
通过命令行与docker daemon
交互 -
container
:最小型的一个操作系统环境,可以对各种服务以及应用容器化 -
image
:镜像,可以理解为一个容器的模板配置,通过一个镜像可以启动多个容器 -
registry
:镜像仓库,存储大量镜像,可以从镜像仓库拉取和推送镜像
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**
最后
现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**
[外链图片转存中…(img-t6ZcjNmm-1710961395033)]