Docker是什么?能干什么?(看这篇就够了)

Docker是什么?能干什么?(看这篇就够了)-mikechen

什么是Docker

Docker是一种开源的平台和工具,用于在轻量级容器中构建、打包、运输和运行应用程序。

Docker容器是轻量级、可移植的软件单元,包含应用程序及其依赖项,以及在任何环境中运行应用程序所需的所有运行时和系统工具。

Docker是什么?能干什么?(看这篇就够了)-mikechen

容器技术本质上是:对计算机资源的隔离与控制,可以理解为一种沙盒技术,沙盒就像集装箱一样。

一句话概括Docker容器就是将软件打包成:标准化单元,以用于开发、交付、可重复使用、部署的。

 

Docker核心设计

以下是Docker的一些关键设计和特点:

1.容器

Docker容器是轻量级、可移植的软件单元,包含应用程序及其依赖项,以及在任何环境中运行应用程序所需的所有运行时和系统工具。

2.镜像

Docker镜像是一种轻量级可执行的独立软件包,是一个只读的模板,包含用于构建容器的文件系统、应用程序代码、运行时、系统工具和库等。

Docker是什么?能干什么?(看这篇就够了)-mikechen

3.Docker Hub

Docker Hub是一个公共的、云端的注册表,用于存储和分享Docker镜像。

Docker官方提供了 Docker Hub的镜像服务,如下图所示:

Docker是什么?能干什么?(看这篇就够了)-mikechen

用户可以从Docker Hub上拉取现有的镜像,也可以将自己构建的镜像推送到Docker Hub上。

4.Docker引擎

Docker引擎是一个用于构建和运行Docker容器的客户端-服务器应用程序。

它包括一个守护进程、REST API和一个命令行界面(CLI),使用户能够与Docker进行交互。

 

5.Docker Compose

Docker Compose是一个工具,允许用户通过一个简单的YAML文件定义和管理多个容器的应用程序。

 

6.Docker Swarm

Docker Swarm是Docker的集群管理工具,它允许用户将多个Docker主机组合成一个虚拟的Docker主机,从而实现容器的分布式部署和管理。

 

Docker工作原理

Docker 的工作原理涉及到:分别是:Docker镜像Docker容器Docker仓库

掌握这三个组件的概念有助于我们进一步了解Docker的工作原理,下图是三者之间的关系:

Docker是什么?能干什么?(看这篇就够了)-mikechen

1.容器镜像

容器镜像是容器的基础,它由多个只读层组成。

每个层都包含文件系统的快照,构建时的每个步骤都会生成一个只读层。

Docker 使用联合文件系统将这些层叠加在一起,形成一个完整的容器镜像。

简单的理解为:Docker镜像是Docker 容器的静态视角,Docker镜像是启动Docker容器的基础。

Docker是什么?能干什么?(看这篇就够了)-mikechen

我们可以使用 docker images 来列出本地主机上的Docker镜像

docker images

构建完成后的 Docker 镜像可以存储在本地或远程的 Docker 仓库(如 Docker Hub)中。

 

2.Docker仓库

Docker仓库,英文名Repository,就是集中存放Docker镜像的地方。

Docker 仓库提供了一个集中的位置,让开发者和运维人员能够共享、获取和管理 Docker 镜像。

有两种主要类型的 Docker 仓库:公共仓库和私有仓库。

1. 公共仓库:

Docker Hub

Docker Hub 是 Docker 公共仓库,是最广泛使用的 Docker 镜像存储和分享平台。

Docker Hub 提供了大量的官方镜像,包括常见的操作系统、开发环境和应用程序。

如下图所示:

Docker是什么?能干什么?(看这篇就够了)-mikechen

用户可以创建个人或组织的账户,并将自己构建的镜像推送到 Docker Hub 上,使得其他人可以访问和使用。

2. 私有仓库:

Docker Trusted Registry 是 Docker 公司提供的企业级私有仓库解决方案。

DTR 允许组织在本地部署一个私有 Docker 仓库,以存储敏感或专有的镜像。

它与 Docker Universal Control Plane(UCP)集成,提供了更强大的安全性和控制选项。

DTR 支持团队协作、镜像签名、审计日志等功能,适用于企业级容器化部署场景。

 

3.基本操作

拉取镜像: 使用 docker pull 命令从仓库拉取镜像,例如:docker pull ubuntu

推送镜像: 使用 docker push 命令将本地构建的镜像推送到仓库,例如:docker push your-registry/your-image:tag

搜索镜像: 使用 docker search 命令在仓库中搜索镜像,例如:docker search nginx

 

3.Docker容器

Docker 容器是一个轻量级、可移植的软件单元,包含应用程序及其所有依赖项,以及在任何环境中运行应用程序所需的所有运行时和系统工具。

容器技术本质上是:对计算机资源的隔离与控制,可以理解为一种沙盒技术,沙盒就像集装箱一样。

如下图所示:

Docker是什么?能干什么?(看这篇就够了)-mikechen

Docker 容器技术基于 Linux 内核的一些特性,如命名空间、控制组(cgroups)等,以实现容器的隔离和资源管理。

1)命名空间(Namespace)

命名空间是 Linux 内核提供的一种隔离机制,用于隔离进程间的资源。

Docker 使用了多个命名空间,包括 PID(进程)、UTS(主机名和域名)、Mount(文件系统挂载点)、Network(网络)、IPC(进程间通信)等,以保障容器之间的隔离。

2)控制组(cgroups)

控制组是 Linux 内核的功能之一,用于限制和隔离进程组的资源。

Docker 使用 cgroups 控制容器的资源,例如: CPU、内存、磁盘 I/O 等,以确保容器在宿主机上的有限资源中运行。

3)联合文件系统(Union File System)

Docker 使用联合文件系统(UnionFS)技术,将多个文件系统挂载到同一个目录下,形成一个统一的文件系统。

这使得容器可以共享基础镜像的文件系统层,以及在其之上添加自己的可写层。

4)Linux 内核功能

Docker 利用了 Linux 内核的一些特性,例如: Cgroups、命名空间、Seccomp(安全计算)、Capabilities(权限管理)等。

这些功能为容器提供了隔离、安全性和资源管理。

 

Docker的应用场景

Docker 的应用场景非常广泛,以下是 Docker 在各个领域的主要应用场景:

1.微服务架构

微服务架构将应用程序拆分成小型、自治的服务,每个服务都有自己的数据存储和业务逻辑。

Docker 容器可以用于封装每个微服务及其依赖项,实现独立的部署、扩展和管理。

2.持续集成和持续部署(CI/CD)

Docker 提供了一致的运行环境,使得开发团队可以在开发、测试和生产环境中使用相同的容器。

CI/CD 工具可以在 Docker 容器中运行构建和测试,并通过容器实现简化的部署流程。

3.开发环境隔离

Docker 可以创建包含应用程序及其依赖项的容器,确保在不同开发者的机器上具有相同的运行环境,从而减少由于环境差异导致的问题。

4.多云环境部署:

Docker 提供了跨云平台的可移植性,容器可以在不同云上以相同的方式运行。这有助于实现多云环境中的应用程序部署和迁移。

5.大规模容器编排

使用容器编排工具如 Kubernetes、Docker Swarm 等,可以自动化容器的部署、扩展和管理,这对于大规模的容器化应用程序是至关重要的。

6.快速测试和部署

容器的轻量级特性使得容器的启动、停止和销毁变得非常迅速,从而加速了开发周期和快速部署的需求。

作者简介

陈睿|mikechen,10年+大厂架构经验,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

评论交流
    说说你的看法