Docker概述与安装

一、 Docker概述

Docker简介

Docker,翻译过来就是码头工人

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。

Docker是dotCloud公司开源的一个基于LXC 的高级容器引擎,源码托管在Github上,基于go语言 并且遵从Apache2.0协议开源。 GitHub地址https://github.com/moby/moby

LXC主要通过Kernel的namespace 实现每个用户实例之间的项目隔离,通过cgroup实现对资源的配额和调度。

名词解释

**沙盒:**沙盒也叫沙箱(sandbox)。在计算机领域指一种虚拟技术,而且多用于计算机安全技术。安全软件可以让它在沙盒中运行,如果含有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何危害。

**LXC:**Linux Container的简写。Linux Container 容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。

**cgroup:**控制组,Control Groups,是一种内核功能,用于限制、统计和隔离一个进程组(process groups)所使用的物理资源,如CPU、内存、磁盘输入输出等。从2.6.24内核引入,它将进程管理从cpuset中剥离出来,并非全新创造的。cgroup提供了一个虚拟文件系统,作为分组管理和各子系统设置的接口。因此,使用cgroup时,必须挂载cgroup文件系统。

cgroup的主要目的是实现资源限制和进程管理。通过将进程分组,可以对各个组内的进程进行资源限制,例如CPU、内存和磁盘输入输出等。这有助于确保系统资源得到合理分配,同时也可以避免单个进程过度消耗资源,导致系统性能下降。

docker官网: https://www.docker.com

docker中文库: https://www.docker.org.cn/

Docker版本演化与技术特征更新

1、Docker发展历程概述

Docker自2013年诞生以来,经历了从简单的容器工具到完整的容器生态系统的演变过程。其版本演化可以分为四个主要阶段:

1. 初创期(2013-2014)
  • 2013年3月:Docker 0.1.0发布,基于LXC技术

  • 2014年6月:Docker 1.0发布,标志着生产就绪

2. 成长期(2015-2016)
  • 引入Swarm集群管理

  • 建立开放容器倡议(OCI)标准

3. 成熟期(2017-2019)
  • 采用新的版本命名方案(YY.MM)

  • 分化为CE(社区版)和EE(企业版)

4. 现代期(2020至今)
  • 深度集成Kubernetes

  • 专注于开发者体验和安全增强

2、重大版本技术特征更新
Docker 1.0 (2014年6月)
  • 核心技术:从LXC转向libcontainer

  • 镜像格式:建立分层存储体系

  • 网络模型:基础桥接网络支持

Docker 1.12 (2016年7月)
  • Swarm模式:内置容器编排功能

  • 服务发现:内置DNS服务

  • 安全增强:TLS加密通信

Docker 17.03 (2017年3月)
  • 版本改革:采用YY.MM版本号

  • 多架构支持:ARM平台正式支持

  • 插件系统:卷和网络插件标准化

Docker 18.09 (2018年11月)
  • BuildKit:实验性下一代构建引擎

  • Rootless模式:非root用户运行容器

  • cgroups v2:初步支持新控制组系统

Docker 19.03 (2019年7月)
  • GPU支持:NVIDIA GPU容器化

  • 性能优化:containerd集成改进

  • Windows容器:完善WSL2支持

Docker 20.10 (2020年12月)
  • BuildKit默认:取代经典构建引擎

  • Compose V2:重写为Go版本

  • 检查点/恢复:实验性容器状态保存

Docker 23.0 (2023年1月)
  • 构建革新:完全移除经典构建引擎

  • 镜像管理:改进垃圾回收机制

  • 安全扫描:内置漏洞扫描工具

3、关键技术演进路线
1. 容器运行时演进
  • libcontainer → runc → containerd

  • 符合OCI运行时规范

  • gVisor、Kata Containers等安全容器支持

2. 构建系统革新
  • 传统构建 → BuildKit

  • 多阶段构建支持

  • 构建缓存优化和并行构建

3. 网络模型发展
  • 基础桥接网络 → overlay网络

  • Macvlan/IPvlan支持

  • 服务网格集成能力

4. 存储驱动优化
  • AUFS → overlay2

  • 快照和存储配额管理

  • 卷插件生态系统

5. 安全增强路径
  • 用户命名空间隔离

  • Rootless容器模式

  • 内容信任和镜像签名

4、当前技术趋势
  1. 云原生集成:与Kubernetes深度整合

  2. 开发者体验:简化本地开发工作流

  3. 安全强化:默认安全配置和策略

  4. 性能优化:资源利用率和启动速度

  5. 多平台支持:ARM、RISC-V等架构

Docker容器技术与虚拟机的区别

相同点:docker容器技术和虚拟机技术,都是虚拟化技术。

不同点

  • 虚拟机技术:

  • docker容器技术:

通过图片,我们很明显的看到docker有着比虚拟机更少的抽象层。 由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。所以docker效率比虚拟机效率高。达到了秒级启动的地步。

Docker相较于VM的优点

  • 比VM小、快,Docker容器的尺寸减小相比于整个虚拟机大大简化了分布到云和分发时间的开销。Docker启动一个容器实例时间仅仅需要几秒钟。

  • Docker是一个开放的平台,构建、发布和运行分布式应用程序。

  • 开发人员不需要关注具体是哪个Linux操作系统。

  • Google、微软(azure)、亚马逊(AWS)、IBM等都支持docker。

  • Docker支持Unix/Linux操作系统,也支持Windows和Mac。

  • 一次封装,到处运行

Docker局限性

Docker用于应用程序时是最有用的,但并不包含数据。日志、数据库等通常放在Docker容器外。一个容器的镜像通常都很小,不用存储大量数据,存储可以通过外部挂载等方式使用,比如:NFS、ipsan、MFS、ceph等 ,或者docker -v 命令进行映射磁盘。 总之,docker只用于计算,存储交给别人。

Docker通常用于如下场景

  • web应用的自动化打包和发布;

  • 自动化测试和持续集成、发布;

  • 在服务型环境中部署和调整数据库或其他的后台应用;

  • 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。

二、 Docker 架构

Docker 包括三个基本概念

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

概念 说明
Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板,比如 CentOS 系统。
Docker 容器(Container) 容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker Registry Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

三、 Docker安装

1、使用官方安装脚本自动安装

复制代码
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2、手动安装

复制代码
#rocky8 安装
yum remove runc -y
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
​

3、启动 Docker

复制代码
[root@localhost ~]# systemctl start docker
##通过运行 hello-world 镜像来验证是否正确安装了 Docker Engine-Community 。
[root@localhost ~]# docker run hello-world

4、卸载 Docker

复制代码
##删除安装包
[root@localhost ~]# yum remove docker-ce
##删除镜像、容器、配置文件等内容
[root@localhost ~]# rm -rf /var/lib/docker

四、 Docker 镜像加速

国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,

复制代码
##编辑配置文件
[root@localhost ~]# 
cat <<EOF >>/etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://0vmzj3q6.mirror.aliyuncs.com",
        "https://docker.m.daocloud.io",
        "https://mirror.baidubce.com",
        "https://dockerproxy.com",
        "https://mirror.iscas.ac.cn",
        "https://huecker.io",
        "https://dockerhub.timeweb.cloud",
        "https://noohub.ru",
        "https://vlgh0kqj.mirror.aliyuncs.com"
    ]
}
EOF
​
##重新启动服务
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

五、/etc/docker/daemon.json 配置文件

核心配置字段

  1. data-root

    • 指定 Docker 数据存储路径(替代旧的 graph 选项)

    • 示例:"/mnt/docker-data"

  2. exec-opts

    • 运行时选项(如 cgroup 驱动)

    • 示例:["native.cgroupdriver=systemd"]

  3. log-driver

    • 默认容器日志驱动(如 json-file, syslog, journald

    • 示例:"json-file"

  4. log-opts

    • 日志驱动的配置选项

    • 示例:{"max-size": "10m", "max-file": "3"}

网络配置

  1. bip

    • 指定网桥 IP 地址(如 "192.168.1.1/24"
  2. default-address-pools

    • 自定义默认 IP 地址池

    • 示例:[{"base": "10.10.0.0/16", "size": 24}]

  3. dns

    • 自定义 DNS 服务器

    • 示例:["8.8.8.8", "1.1.1.1"]

  4. mtu

    • 容器网络 MTU 值

安全配置

  1. tlsverify

    • 启用 TLS 验证(true/false
  2. tlscacert

    • CA 证书路径(如 "/etc/docker/ca.pem"
  3. userns-remap

    • 启用用户命名空间隔离

    • 示例:"default"

镜像与存储

  1. storage-driver

    • 存储驱动(如 overlay2, btrfs
  2. registry-mirrors

    • 镜像加速器地址

    • 示例:["https://mirror.aliyuncs.com"]

  3. insecure-registries

    • 允许非 HTTPS 私有仓库

    • 示例:["myregistry.local:5000"]

性能与资源

  1. max-concurrent-downloads

    • 镜像下载并发数(默认 3
  2. live-restore

    • 守护进程崩溃时保持容器运行(true/false

实验性功能

  1. features

    • 启用实验性功能

    • 示例:{"buildkit": true}

完整示例

复制代码
{
  "data-root": "/var/lib/docker",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "registry-mirrors": ["https://registry.example.com"],
  "insecure-registries": ["myregistry.local:5000"],
  "live-restore": true,
  "features": {
    "buildkit": true
  }
}

注意事项

  • 修改后需重启 Docker 服务:sudo systemctl restart docker

  • 字段名称严格区分大小写

  • 可通过 docker info 验证配置是否生效

如果需要针对特定场景的配置建议,请提供更多需求细节。

相关推荐
Dragon水魅2 小时前
爬虫技术详解:从传统爬虫到浏览器自动化——以豆瓣读书笔记为例
运维·爬虫·自动化
willhuo2 小时前
# 自动化数据采集技术研究与实现:基于Playwright的抖音网页自动化方案
运维·selenium·c#·自动化·chrome devtools·webview
IP老炮不瞎唠2 小时前
IP轮换机制解析:动态住宅代理如何维持高可用率?
运维·服务器·网络
一个扣子2 小时前
OpenClaw 运维完全手册|日志分析、实时监控与故障排查指南
运维·监控·故障排查·健康检查·openclaw·clawmetry·openclawdoctor
Lentou2 小时前
nginx反向代理
运维·nginx
刘~浪地球2 小时前
API 安全设计最佳实践
运维·网络·安全
SilentSamsara2 小时前
存储卷体系:EmptyDir/HostPath/PV/PVC/StorageClass 的选型决策树
服务器·微服务·云原生·容器·架构·kubernetes·k8s
网络安全许木3 小时前
自学渗透测试第20天(防火墙基础与规则配置)
运维·服务器·网络·网络安全·渗透测试
亚空间仓鼠3 小时前
Docker 容器技术入门与实践 (二):Dockerfile文件
运维·docker·容器