Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上。
Docker将应用程序与其运行的环境相隔离,轻松发布和更新应用程序。Docker利用Linux容器来实现轻量级的虚拟化,通过行业标准化的方式帮助开发者快速搭建隔离的开发环境。
Docker的基本概念:
• 镜像(Image):Docker 镜像是用于创建 Docker 容器的模板。
• 容器(Container):Docker 利用容器(Container)独立运行一个或一组应用。
• 仓库(Registry): Docker 仓库用来存储镜像。
• Docker Daemon:Docker Daemon用于监听 Docker API 的REST请求,并管理 Docker 的对象如镜像、容器和网络。
• Docker Client:Docker客户端(CLI)用于请求Docker Daemon。
常用Docker命令:
• docker search ubuntu: 搜索ubuntu镜像
• docker pull ubuntu: 拉取最新ubuntu镜像
• docker images: 列出本地镜像
• docker run ubuntu echo “Hello world”: 使用ubuntu镜像启动容器,执行echo命令
• docker ps: 列出运行中的容器
• docker rm : 删除指定容器
• docker rmi : 删除指定镜像
• docker commit: 将容器提交为新镜像
• docker login: 登陆Docker Hub
• docker push: 将本地镜像推送到Docker Hub
Docker和Containerd都是容器技术,但其角色和定位不同。这里对Docker和Containerd进行比较:
Docker:
- Docker是一个容器平台,包含了容器的生命周期管理,提供了CLI工具和REST API。
- Docker定义了一套标准的开放接口,可以方便地在不同平台之间迁移容器。
- Docker使用不同的后端技术来实现容器,默认是libcontainer,现在是containerd。
- Docker主要面向开发者和DevOps,简化容器应用的构建和管理。
Containerd: - Containerd是一个容器运行时,可以管理整个容器生命周期,但 workload 的生命周期管理需要上层的容器平台完成。
- Containerd只负责管理容器运行时,不提供接口供最终用户直接调用,需要容器平台在用户与 containerd 之间做转换。
- Containerd使用runc来启动和管理容器,实现了 OCI(开放容器倡议)规范。
- Containerd主要面向云服务商和系统集成厂商,提供稳定高效的容器运行环境。
总结如下: - Docker是一个容器平台,提供全功能的容器技术栈,包含仓库、网络、容器等功能,面向开发者和DevOps使用。
- Containerd是一个容器运行时,只负责容器生命周期的管理,需要容器平台调用,面向云计算厂商和系统集成商。
- Docker使用libcontainer(早期)和containerd(现在)作为后端技术来运行容器。
- Containerd使用runc来启动OCI兼容的容器。
- Docker提供CLI和REST API,而Containerd不直接对外提供接口。
从技术定位和重点来看,Docker更上层,为用户提供完整的容器平台功能;Containerd作为底层技术,专注于容器运行时,为Docker等容器平台提供基础设施,二者配合完成了完整的容器管理功能。