Docker使用及原理

Docker 使用及原理

  • created: 2024-08-19T16:54+08:00
  • modified: 2024-11-27T11:21+08:00
  • published: 2024-11-27T11:41+08:00
  • categories: devops

在了解什么是 docker 之前,先思考操作系统给进程提供了什么:

  1. 通过文件系统为进程提供文件操作
  2. 为进程提供了网络访问,如端口监听等
  3. 进程可以得知其他进程的信息,如执行 ps 可以看到其他进程

docker 对进程做了什么

docker 通过配置文件 dockerfile 将进程放进了一个沙盒之中,
沙盒里,进程认为自己独占了一个操作系统,有独立的文件系统,网络端口,ps 以后以为只有自己。

一个容器进程本质上是一个运行在沙盒中的隔离进程,由 Linux 系统本身负责隔离,Docker 只是提供了一系列工具,帮助我们设置好隔离环境后,启动这个进程。

最基本的隔离就是进程之间看不到彼此,这是由 Linux 的 Namespace 机制实现的。进程隔离的结果就是以隔离方式启动的进程看到的自身进程 ID 总是 1,且看不到系统的其他进程。

第二种隔离就是隔离系统真实的文件系统。
Docker 利用 Linux 的 mount 机制,给每个隔离进程挂载了一个虚拟的文件系统,使得一个隔离进程只能访问这个虚拟的文件系统,无法看到系统真实的文件系统。
至于这个虚拟的文件系统应该长什么样,这就是制作 Docker 镜像要考虑的问题。
比如我们的 Python 程序要正常运行,需要一个 Python3 解释器,需要把用到的第三方库如 psutil 引入进来,这些复杂的工作被简化为一个 Dockerfile,再由 Docker 把这些运行时的依赖打包,就形成了 Docker 镜像。
我们可以把一个 Docker 镜像看作一个 zip 包,每启动一个进程,Docker 都会自动解压 zip 包,把它变成一个虚拟的文件系统。

第三种隔离就是网络协议栈的隔离,这个最不容易理解。
...

—— 一文读懂 Docker 原理 - 廖雪峰的官方网站

docker 原理

  1. 通过 namespace 遮挡进程的视线,看不到其他进程、网卡等资源,通过 Mount 为自己挂载 image
  2. 通过 cgroups 限制资源的使用,比如 CPU 使用率等
  3. 通过 引入 layer,使用 UFS 实现对 rootfs 的复用
    比如在 root 下 del test 文件夹,不会真的把 test 删掉,只是利用 UFS 的功能,限制进程无法再看到 test 文件夹

Docker 教程(三)---深入理解 Docker 核心原理:Namespace、Cgroups 和 Rootfs -

c 语言实现 docker 相关功能

如何通俗解释 Docker 是什么? - 光度的回答 - 知乎

docker 使用

前言 | Docker — 从入门到实践

posted @ 2024-11-27 11:42  dutrmp19  阅读(6)  评论(0编辑  收藏  举报