Docker了解与安装

介绍

Docker是管理容器的工具,Docker不等于容器

Docker 是一个开源的应用容器引擎,允许开发者将应用程序及其依赖项打包到一个轻量级可移植的容器中,然后发布到任何支持 Docker 的机器上,确保应用在不同环境中的运行一致性。

Docker 的核心思想是通过容器化技术实现应用的快速部署、扩展和管理。

Docker特点和功能

  1. 容器化:Docker 使用容器技术将应用程序及其依赖项打包在一个独立的运行环境中,这使得应用在不同的计算环境(如开发、测试、生产)中具有一致性。

  2. 轻量级:相比于传统的虚拟机,Docker 容器更加轻量级,因为它们共享宿主机的操作系统内核,而不是像虚拟机那样运行独立的完整操作系统。

  3. 可移植性:Docker 容器可以在任何安装了 Docker 的机器上运行,无论是个人电脑、云服务器还是数据中心,保证了应用的可移植性。

  4. 版本控制和组件复用:Docker 允许开发者使用 Dockerfile 来定义应用的环境,并通过 Docker Hub 等平台共享和复用容器镜像,简化了应用的构建和管理过程。

  5. 隔离性:每个 Docker 容器都是相互隔离的,确保不同应用之间的资源和依赖不会互相干扰。

  6. 易于扩展:Docker 容器可以快速创建和销毁,非常适合需要弹性扩展的应用场景,如微服务架构。

Docker 的核心组件:

  1. Docker 引擎(Docker Engine):负责创建和管理 Docker 容器的核心组件。

  2. Docker 镜像(Docker Image):包含了应用运行所需的所有内容,如代码、运行时、库、环境变量和配置文件等。

  3. Docker 容器(Docker Container):Docker 镜像的运行实例,可以启动、停止、移动和删除。

  4. Docker 仓库(Docker Registry):用于存储和分发 Docker 镜像,最常见的公共仓库是 Docker Hub。

  5. Docker Compose:一个工具,允许开发者通过 YAML 文件定义和运行多容器 Docker 应用。

  6. Docker Swarm:Docker 自带的本地集群管理工具,支持多节点容器编排。

Docker 的应用场景:

  1. 微服务架构:Docker 非常适合微服务架构,每个微服务可以作为独立的容器运行,便于扩展和管理。

  2. 持续集成和持续部署(CI/CD):通过 Docker,可以实现快速、一致的环境切换,简化 CI/CD 流程。

  3. 多环境部署:Docker 容器可以在开发、测试、生产等多环境中保持一致的运行环境,减少“在我的机器上可以运行”的问题。

  4. 资源优化:由于 Docker 容器的轻量级特性,可以更高效地利用硬件资源。

  5. DevOps 实践:Docker 通过标准化应用环境和依赖管理,支持 DevOps 文化,促进开发和运维团队之间的协作。

虚拟化分类

  1. 仿真虚拟化:对系统硬件没有要求,性能最低。例如: VMware

  2. 半虚拟化:虚拟机可以使用真机物理硬件,性能高,需要改内核。例如:Xen

  3. 硬件辅助虚拟化。例如: vmware kvm

    • 需要硬件支持 【cpu 主板】

    • 不需要改内核

    • 可以直接使用真机硬件,性能最贴近宿主机

  4. 容器虚拟化。例如:lxc docker

对比维度

主机虚拟化 (虚拟机 VM)

容器虚拟化 (如 Docker)

核心架构

硬件级虚拟化:通过 Hypervisor 模拟完整的虚拟硬件,每个 VM 必须运行一个完整的操作系统(Guest OS)。

操作系统级虚拟化:所有容器共享宿主机的操作系统内核,仅包含应用及其依赖,无需完整 OS。

隔离性与安全性

强隔离:每个 VM 拥有独立的内核,故障或安全威胁被严格限制在单个 VM 内,安全性极高。

轻量级隔离:依赖 Namespace 和 Cgroups 实现进程级隔离,共享内核,隔离性和安全性相对较弱。

资源占用

重量级:需分配独立的 CPU、内存和存储给 Guest OS,资源开销大,通常以 GB 为单位。

极轻量:除应用本身外几乎不消耗额外系统资源,资源占用极低,通常以 MB 为单位。

启动速度

较慢:需要引导和加载完整的操作系统,启动时间通常为分钟级。

极快:直接启动用户态进程,启动速度可达秒级甚至毫秒级。

系统兼容性

极高:可以在同一台物理机上运行完全不同的操作系统(如 Windows 和 Linux)。

受限:容器内的应用必须与宿主机内核兼容(例如 Linux 容器需运行在 Linux 内核上)。

典型应用场景

传统应用迁移、需要完整 OS 环境的场景、多租户强隔离环境、安全测试。

微服务架构、CI/CD 持续交付、高弹性伸缩的互联网应用、云原生部署。

安装与配置

安装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 runpsstop 等命令。 • 与 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 强大的远程管理能力和生态扩展性。