docker的底层原理,带你上天

34 阅读3分钟

1、docker的层级怎么看

先查看当前机器上有哪些镜像

docker images

这里选看mysql的层级

docker image inspect mysql:5.7.29 命令。其中RootFS部分则是表示了分层信息。

image.png

2、查看docker的系统信息

因为这台机器的docker不是我安装的,所以不知道具体的根目录在哪里,可以使用下面的命令

docker info

上面可以看到docker的信息

image.png

3、Docker 的默认工作目录 各文件夹的意义

Docker 的默认工作目录是 /var/lib/docker/,该目录包含了 Docker 的所有数据,包括镜像、容器、卷、网络等等。下面是 /var/lib/docker/ 目录下的一些常见子目录及其意义:

  1. /var/lib/docker/containers/: 包含所有 Docker 容器的数据,每个容器会在该目录下创建一个子目录,存储该容器的相关数据,例如容器的元数据、日志和文件系统等。

  2. /var/lib/docker/image/: 包含所有 Docker 镜像的数据,每个镜像会在该目录下创建一个子目录,存储该镜像的相关数据,例如镜像的元数据、层信息等。

  3. /var/lib/docker/volumes/: 包含所有 Docker 卷的数据,每个卷会在该目录下创建一个子目录,存储该卷的相关数据,例如卷的元数据和卷中的文件。

  4. /var/lib/docker/network/: 包含所有 Docker 网络的数据,每个网络会在该目录下创建一个子目录,存储该网络的相关数据,例如网络的元数据和配置等。

  5. /var/lib/docker/plugins/: 包含所有 Docker 插件的数据,每个插件会在该目录下创建一个子目录,存储该插件的相关数据,例如插件的元数据和配置等。

  6. /var/lib/docker/swarm/: 包含 Docker Swarm 的相关数据,例如节点的元数据、服务的配置、证书和密钥等。

7./var/lib/docker/overlay2:镜像和容器的层文件的实际存储目录

4、docker守护程序的日志在哪

Docker 守护进程的日志记录在系统日志中,具体位置和命名方式可能因操作系统而异。下面是一些常见的操作系统和对应的 Docker 日志文件位置:

  • Ubuntu 16.04及更早版本: /var/log/upstart/docker.log
  • Ubuntu 18.04及更高版本: /var/log/syslog
  • CentOS 7: /var/log/messages
  • Debian/Ubuntu: /var/log/daemon.log

5、docker Overlay2 文件系统原理

拉取一个nginx镜像,观察拉取过程:可以看到镜像一共被分为6层拉取。

image.png

/var/lib/docker/overlay2/ 目录下也多了6个文件夹

image.png

可以通过上面的docker image inspect nginx查看层级

在下载镜像时,Docker Daemon会检查镜像中的镜像层与宿主机文件系统中的镜像层进行对比,如果存在则不下载,只下载不存在的镜像层。

分层的原因:

  • 分层最大的一个好处就是共享资源
  • 有多个镜像都从相同的base镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像;
  • 同时内存中也只需加载一份base镜像,就可以为所有容器服务了,而且镜像的每一层都可以被共享。