Linux 安装 Docker
摘要
-
本文介绍 Linux 下的 Docker 安装方法,本文以 CentOS 8 为例。
-
windows、macos、ubuntu等桌面系统请安装 Docker Desktop。
-
阿里云专有服务器参考:阿里云专有服务器如何安装Docker
-
腾讯云专有服务器参考:腾讯云专有服务器如何安装Docker
-
AWS专有服务器参考:AWS专有服务器如何安装Docker
Docker 简介
-
Docker 是一个开源的容器化平台,用于打包、分发和运行应用程序。它通过将应用程序及其依赖打包到一个“容器”中,确保应用在不同环境中始终能够一致运行。与传统的虚拟机相比,Docker 容器更轻量、启动更快、资源占用更少。
-
Docker 采用
客户端-服务器
架构,核心组件包括Docker Engine
(负责构建和运行容器)、Dockerfile
(定义构建镜像的指令)、镜像
(应用和依赖的只读模板)和容器
(基于镜像运行的实例)。开发者可以通过 Docker Hub 共享或下载镜像,极大简化了部署流程。 -
总结来说,Docker 提高了开发效率,支持持续集成与部署(CI/CD),在微服务架构中尤为常用,是现代 DevOps 流程的重要工具。
名称 | 描述 |
---|---|
Docker 仓库(Registry) | Docker仓库用于存储Docker镜像。Docker Hub是一个任何人都可以使用的公共仓库,默认情况下,Docker在Docker Hub上查找图像。你也可以配置自己的私人仓库。 当您使用docker pull或docker run命令时,Docker会从您配置的仓库中提取所需的镜像。当您使用docker push命令时,Docker会将您的镜像推送到已配置的仓库中。 |
Docker 守护进程(Daemon) | 监听Docker API请求,并管理Docker对象,如镜像、容器、网络和卷。守护程序还可以与其他守护程序通信来管理Docker服务。 |
Docker 客户端(Client) | Docker 客户端(docker)是许多用户与 Docker 交互的主要方式。当你使用如 docker run 这样的命令时,客户端会将这些命令发送给 dockerd(Docker 守护进程),由它来执行这些操作。 docker 命令是通过 Docker API 进行通信的。Docker 客户端可以与多个守护进程进行通信。 |
Docker 主机(Host) | 运行 Docker 守护进程和容器的物理或虚拟机器。 |
Docker 镜像(Images) | 创建容器的只读模板,包含运行应用所需的所有文件和配置。 |
Docker 容器(Container) | 基于镜像运行的实例,是一个或多个应用的独立运行环境。 |
Docker 安装
-
全新安装前需要先卸载旧版本,卸载
docker
也可以按照如下方式操作
1 | # 删除Docker相关源 |
-
设置docker存储库
1 | sudo dnf -y install dnf-plugins-core |
-
安装 Docker
1 | # 安装最新版本,升级 docker 时也是执行如下命令 |
-
启动 Docker
1 | # 设置Docker守护进程在系统启动时自动启动 |
-
验证 Docker 安装
1 | docker -v # Docker version 26.1.3, build b72abbb |
-
添加国内镜像源
目前国内大部分的Docker镜像源都关闭了,另外阿里云的Docker镜像源只允许在阿里云的机器上使用。
参考:Docker/DockerHub 国内镜像源/加速列表
注意:国内镜像源的更新会比官网滞后,但只要不是获取最新版本基本上是够用的。
1 | sudo tee /etc/docker/daemon.json <<EOF |
-
Docker命令自动补全,参考:官方文档
1 | # 使用的bash |
-
/var/lib/docker
用于存储 Docker 运行时生成的数据,如镜像、容器、网络、卷、配置文件、日志等,其目录结构说明如下:
目录名 | 作用说明 |
---|---|
buildkit/ |
存放 Docker BuildKit 构建缓存和状态信息;构建镜像时的中间文件和上下文会存于此,空间占用可能较大。 |
containers/ |
每个容器一个子目录,包含配置文件和运行日志(如 container.log ),用于容器的运行状态记录和管理。 |
engine-id |
存储 Docker 引擎的唯一 ID,Docker 安装时生成,常用于 swarm 节点识别。 |
image/ |
镜像的元数据(不含实际 layer 数据),组织镜像的结构、标签、驱动等信息。 |
network/ |
网络配置及状态信息,如默认 bridge 网络、自定义网络配置等。 |
overlay2/ |
镜像和容器实际的数据层(overlay2 是存储驱动),包含所有联合文件系统层,是 Docker 中最大的空间使用者。 |
plugins/ |
存放 Docker 插件(如网络、卷插件)的配置和数据,一般为空,除非使用了扩展插件。 |
runtimes/ |
支持的 OCI runtime 配置目录,如默认的 runc ,也可能包含其他 runtime(如 kata , gvisor )。 |
swarm/ |
Docker swarm 模式下的集群元数据与节点状态,仅在初始化 swarm 后存在实际数据。 |
tmp/ |
Docker 的临时文件目录,如镜像下载缓存、挂载操作中的临时文件,通常可以清理但需小心。 |
volumes/ |
Docker 卷的数据目录,每个卷一个子目录,卷中的持久化数据实际存放于此。 |
-
/var/lib/containerd
是 Containerd 守护进程的默认数据存储目录。Containerd 是 Docker 和其他容器平台(如 Kubernetes)底层的 容器运行时(Container Runtime),负责拉取镜像、管理容器生命周期、挂载文件系统等操作。其目录结构说明如下:
目录名 | 作用说明 |
---|---|
io.containerd.content.v1.content/ |
存储镜像 layer 的实际二进制内容(blob),遵循 OCI 镜像规范,是镜像和容器文件系统的数据来源。 |
io.containerd.metadata.v1.bolt/ |
使用 BoltDB 存储 containerd 的元数据(如镜像信息、容器状态、快照引用等),是 containerd 的核心元数据数据库。 |
io.containerd.runtime.v1.linux/ |
存储旧版(v1 API)运行时容器信息,目前已逐步被 v2 接口取代,仅在向后兼容场景中存在。 |
io.containerd.runtime.v2.task/ |
存储 v2 运行时接口下容器的运行时状态,如容器进程的 shim、PID、日志路径等,是容器实际运行时所依赖的。 |
io.containerd.snapshotter.v1.native/ |
使用 native 模式存储的容器快照(文件系统层),直接复制底层文件;性能较差,占用空间较大,主要用于测试或特定用途。 |
io.containerd.snapshotter.v1.overlayfs/ |
使用 overlayfs 模式存储容器的文件系统快照(镜像层和容器层);这是生产环境默认的高效存储驱动。 |
tmpmounts/ |
临时挂载点目录,containerd 用于镜像解包、中间构建过程中的挂载操作,通常是构建或运行过程的临时数据。 |
MacOS/Windows下无法查看/var/lib/docker
的解决方法
- 在 MacOS/Windows 上使用Docker时,是启动了一个虚拟机来运行docker的,由于其运行在虚拟机内部,直接查找
/var/lib/docker
路径是无效的。 - 解决方法如下:
1 | # 启动一个临时容器,并进入其内部 |
- 这个命令启动一个基于 Debian 的容器,给它所有特权,让它能看到宿主机的进程,然后使用 nsenter 进入 PID 为 1 的所有命名空间(相当于进入宿主机的视角),最后启动一个 sh,你就在容器里 “变成了宿主机”。
- 这样,你就可以在这个容器中查看
/var/lib/docker
目录了。