Docker了解与安装

Docker

一、容器是什么?

  • 本质:Docker 镜像的运行实例,是一个轻量级的、可独立运行的进程隔离环境。

  • 内容:包含应用程序及其所有依赖(代码、运行时、库、配置等)。

  • 特点:可创建、启动、停止、删除;每个容器相互隔离,拥有自己的文件系统、网络和进程空间。

  • 一句话:容器 = 镜像跑起来之后的“活体”。


二、镜像是什么?

  • 本质:创建容器的只读模板,是一个静态文件。

  • 内容:应用代码 + 运行时 + 系统工具 + 库 + 环境变量 + 配置文件等。

  • 类比:镜像 ≈ 面向对象中的“类”,容器 ≈ “类的实例”。

  • 构建与复用:通过 Dockerfile 定义,构建后可上传到仓库(如 Docker Hub)共享复用。


三、容器 vs 虚拟机(核心区别)

对比维度

容器

虚拟机(VM)

虚拟化层级

操作系统级(共享宿主机内核)

硬件级(Hypervisor 模拟完整硬件)

是否带完整 OS

不带,仅含应用及依赖

必须带完整的 Guest OS

隔离程度

进程级隔离(Namespace + Cgroups),较弱

强隔离(独立内核),安全性高

资源占用

极轻量,通常 MB 级

重量级,通常 GB 级

启动速度

秒级甚至毫秒级

分钟级

系统兼容性

必须与宿主机内核兼容(如 Linux 容器跑在 Linux 上)

极高,可同时跑 Windows 和 Linux

典型场景

微服务、CI/CD、弹性伸缩、云原生

传统应用迁移、强隔离需求、多操作系统环境


四、Docker 底层使用的技术(核心支撑)

Docker 本质上是对 Linux 容器(LXC) 的封装,依赖宿主机内核提供的两项核心技术:

  1. Namespace(命名空间)

    • 负责隔离,让每个容器拥有独立的进程树、网络栈、文件系统挂载点、用户 ID 等,容器内部“以为”自己独享系统。

  2. Cgroups(控制组)

    • 负责限制和监控资源,控制每个容器能使用的 CPU、内存、磁盘 I/O、网络带宽,防止相互争抢。

补充(来自你原文件):虚拟化分类中,容器虚拟化(如 Docker) 与 硬件辅助虚拟化(如 KVM) 同属高性能方案,优于仿真虚拟化和半虚拟化。


五、Docker 的其他核心组件

  • Docker 引擎:创建和管理容器的核心服务。

  • Docker 仓库:存镜像的地方(公有如 Docker Hub)。

  • Docker Compose:用 YAML 文件定义并运行多容器应用。

  • Docker Swarm:Docker 自带的集群管理工具(多节点编排)。


六、适用场景

  • 最适合:微服务、CI/CD、多环境一致部署、资源优化、DevOps。

  • 不太适合:需要极强安全隔离、或必须跑不同操作系统的场景(此时选 VM)。

安装与配置

安装Docker工具

 # 安装依赖(无法安装继续下面的步骤)
 yum install -y dnf-utils device-mapper-persistent-data lvm2
 ​
 # 下载Docker官方yum源
 wget https://download.docker.com/linux/centos/docker-ce.repo -P /etc/yum.repos.d/
 ​
 # 替换成清华源
 sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
 ​
 # 强制将 $releasever 变量替换为 Docker 官方实际支持的版本号(如 9 或 8)
 sed -i 's/$releasever/9/g' /etc/yum.repos.d/docker-ce.repo
 # 原因:您的麒麟系统 $releasever=11,但 Docker 仓库无此目录,导致 404 错误
 ​
 # 清理并重建缓存(验证修改是否成功)
 yum clean all
 yum makecache

docker 安装

卸载旧版本

 # 彻底卸载旧版本或可能存在冲突的 Docker 软件包
 yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

安装docker并启动

 # 安装docker
 yum -y install  docker-ce
 ​
 ## 安装docker及核心组件
 yum install -y docker-ce docker-ce-cli containerd.io
 ​
 # 设置开机自启
 systemctl enable docker
 ​
 # 执行命令后显示
 Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
 ​
 # 立即启动Docker服务
 systemctl start docker
 ​
 # 验证启动
 systemctl status docker
 ​
 # 显示客户端版本号
 docker -v
 ​
 # 显示结果
 Docker version 29.6.2, build dfc4efb

docker配置文件

 # 1、关闭docker
 systemctl stop docker
 # 会显示以下【意思是:正在停止 docker.service,但它的触发单元 docker.socket 仍然处于活动状态】
 Stopping 'docker.service', but its triggering units are still active:
 docker.socket
 ​
 # 2、编辑docker配置文件,默认没有
 # registry-mirrors设置国内镜像站,加速下载镜像
 vim /etc/docker/daemon.json
 ​
 # 添加以下内容
 {
   "registry-mirrors": [
     "https://0c105db5188026850f80c001def654a0.mirror.swr.myhuaweicloud.com",
     "https://5tqw56kt.mirror.aliyuncs.com",
     "https://docker.1panel.live",
     "http://mirrors.ustc.edu.cn",
     "http://mirror.azure.cn",
     "https://hub.rat.dev",
     "https://docker.chenby.cn",
     "https://docker.hpcloud.cloud",
     "https://docker.m.daocloud.io",
     "https://docker.unsee.tech",
     "https://dockerpull.org",
     "https://dockerhub.icu",
     "https://proxy.1panel.live",
     "https://docker.1panel.top",
     "https://docker.1ms.run",
     "https://docker.ketches.cn"
   ]
 }
 ​
 # 3、重载docker服务、重启docker生效配置
 systemctl daemon-reload
 systemctl restart docker
 ​
 # 4、查看docker的监听地址和端口
 ps aux | grep dockerd
 ​
 # 显示内容
 root        4154  7.3  6.2 1947624 89656 ?       Ssl  09:14   0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

docker client 与 daemon分离

“分离”指的就是 Docker 客户端(Client) 和 Docker 守护进程 (Daemon) 是各自独立运行的两个进程

对比维度

Docker Client (客户端)

Docker Daemon (守护进程)

角色比喻

您手中的“遥控器”

后台的“大管家”

核心职责

接收并解析用户命令,将其封装为 API 请求。

监听 API 请求,实际执行所有容器、镜像、网络、数据卷的管理操作。

具体工作

• 解析 docker run、ps、stop 等命令。 • 与 Daemon 建立通信(默认通过 Unix Socket 或 TCP)。 • 显示 Daemon 返回的执行结果。

• 拉取镜像 (docker pull)。 • 创建、启动、停止、删除容器。 • 管理网络和存储卷。 • 监控容器运行状态。

运行方式

以您执行的 Shell 命令进程运行(瞬时)。

作为系统服务常驻后台(如 systemctl status docker)。

权限要求

通常无需 root 权限,只要能连接到 Daemon 即可。

需要 root 或等效权限,因为要操作系统内核特性(如 Namespace、Cgroups)。

通信方式

通过 REST API 与 Daemon 交互(默认使用 Unix Socket /var/run/docker.sock)。

监听来自 Client 或其他工具的 API 请求。

是否必须

是,人类或工具需要通过它来发出指令。

是,它是实际完成所有容器工作的引擎。

这个架构的核心设计理念是 “分离控制与执行”,这赋予了 Docker 强大的远程管理能力和生态扩展性。

Ubuntu 安装与配置 Docker

1. 更新系统包索引

 sudo apt update
 sudo apt upgrade -y

2. 安装依赖包

 sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

3. 添加 Docker 官方 GPG 密钥

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4. 添加 Docker APT 源(使用阿里云镜像加速)

 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

如果 $(lsb_release -cs) 返回的版本名(如 focal、jammy)在 Docker 源中不存在,可手动替换为最近 LTS 版本名,例如 jammy(22.04)或 focal(20.04)。

5. 更新 APT 缓存

 sudo apt update

6. 卸载旧版本 Docker(如有)

 sudo apt remove docker docker-engine docker.io containerd runc -y

7. 安装 Docker 及核心组件

 sudo apt install -y docker-ce docker-ce-cli containerd.io

8. 启动 Docker 并设置开机自启

 sudo systemctl enable docker
 sudo systemctl start docker

9. 验证安装

 sudo systemctl status docker
 docker -v
 ​
 示例输出:
 Docker version 29.7.2, build a7dcaa6

10. 配置 Docker 镜像加速器

停止 Docker 服务

 sudo systemctl stop docker

创建或编辑 /etc/docker/daemon.json

 sudo mkdir -p /etc/docker
 sudo vim /etc/docker/daemon.json

添加以下内容(镜像站列表可自行精简):

 {
   "registry-mirrors": [
     "https://0c105db5188026850f80c001def654a0.mirror.swr.myhuaweicloud.com",
     "https://5tqw56kt.mirror.aliyuncs.com",
     "https://docker.1panel.live",
     "http://mirrors.ustc.edu.cn",
     "http://mirror.azure.cn",
     "https://hub.rat.dev",
     "https://docker.chenby.cn",
     "https://docker.hpcloud.cloud",
     "https://docker.m.daocloud.io",
     "https://docker.unsee.tech",
     "https://dockerpull.org",
     "https://dockerhub.icu",
     "https://proxy.1panel.live",
     "https://docker.1panel.top",
     "https://docker.1ms.run",
     "https://docker.ketches.cn"
   ]
 }

重新加载并重启 Docker

 sudo systemctl daemon-reload
 sudo systemctl restart docker

11. 验证 Docker 监听地址(可选)

 ps aux | grep dockerd
 ​
 示例输出:
 root       24233  3.6  2.2 2025636 88384 ?       Ssl  01:13   0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
 root       24431  0.0  0.0   6544  2272 pts/1    S+   01:13   0:00 grep --color=auto dockerd

12. (可选)将当前用户加入 docker 组,避免每次使用 sudo

 sudo usermod -aG docker $USER
 newgrp docker