Docker概述与安装方法

 更新时间:2026年04月21日 09:49:56   作者:齐潇宇  
本文主要介绍了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、当前技术趋势

  • 云原生集成:与Kubernetes深度整合
  • 开发者体验:简化本地开发工作流
  • 安全强化:默认安全配置和策略
  • 性能优化:资源利用率和启动速度
  • 多平台支持: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 RegistryDocker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker MachineDocker 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 配置文件

核心配置字段

  • data-root
    • 指定 Docker 数据存储路径(替代旧的 graph 选项)
    • 示例:"/mnt/docker-data"
  • exec-opts
    • 运行时选项(如 cgroup 驱动)
    • 示例:["native.cgroupdriver=systemd"]
  • log-driver
    • 默认容器日志驱动(如 json-file, syslog, journald
    • 示例:"json-file"
  • log-opts
    • 日志驱动的配置选项
    • 示例:{"max-size": "10m", "max-file": "3"}

网络配置

  • bip
    • 指定网桥 IP 地址(如 "192.168.1.1/24"
    • default-address-pools
    • 自定义默认 IP 地址池
  • 示例:[{"base": "10.10.0.0/16", "size": 24}]
  • dns
    • 自定义 DNS 服务器
    • 示例:["8.8.8.8", "1.1.1.1"]
  • mtu
    • 容器网络 MTU 值

安全配置

  • tlsverify
    • 启用 TLS 验证(true/false
  • tlscacert
    • CA 证书路径(如 "/etc/docker/ca.pem"
  • userns-remap
    • 启用用户命名空间隔离
  • 示例:"default"

镜像与存储

  • storage-driver
    • 存储驱动(如 overlay2, btrfs
  • registry-mirrors
    • 镜像加速器地址
    • 示例:["https://mirror.aliyuncs.com"]
  • insecure-registries
    • 允许非 HTTPS 私有仓库
    • 示例:["myregistry.local:5000"]

性能与资源

  • max-concurrent-downloads
    • 镜像下载并发数(默认 3
  • live-restore
    • 守护进程崩溃时保持容器运行(true/false

实验性功能

  • 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 验证配置是否生效

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

到此这篇关于Docker概述与安装方法的文章就介绍到这了,更多相关Docker概述与安装内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mac系统上用Docker搭建lamp环境

    Mac系统上用Docker搭建lamp环境

    这篇文章主要给大家介绍了Mac系统上用Docker如何搭建lamp环境,文章给大家介绍的很详细,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • DockerHub 镜像仓库的使用详解

    DockerHub 镜像仓库的使用详解

    这篇文章主要介绍了DockerHub 镜像仓库的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • spring-boot构建docker镜像上传仓库的示例教程

    spring-boot构建docker镜像上传仓库的示例教程

    这篇文章主要介绍了spring-boot构建docker镜像上传仓库,受限创建一个简单spring-boot-web项目,查看镜像上传仓库这时候有两种解决方案,对docker镜像上传仓库相关知识感兴趣的朋友跟随小编一起看看吧
    2022-12-12
  • Docker 制作镜像Dockerfile和commit操作

    Docker 制作镜像Dockerfile和commit操作

    这篇文章主要介绍了Docker 制作镜像Dockerfile和commit操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker search命令的具体使用

    docker search命令的具体使用

    本文主要介绍了docker search命令的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Docker打包前后端项目的实现示例

    Docker打包前后端项目的实现示例

    目前我们大多数服务应该会使用Docker来进行部署,本文主要介绍了Docker打包前后端项目的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • dockerfile基于apline将JDK20打包成镜像

    dockerfile基于apline将JDK20打包成镜像

    这篇文章主要为大家介绍了dockerfile基于apline将JDK20打包成镜像步骤及验证,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-02-02
  • ubuntu docker搭建Hadoop集群环境的方法

    ubuntu docker搭建Hadoop集群环境的方法

    这篇文章主要介绍了ubuntu docker搭建Hadoop集群环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • 详解Docker中的nacos集群部署方式

    详解Docker中的nacos集群部署方式

    在 Docker 中使用 Nacos,你可以通过拉取官方提供的 Docker 镜像并运行容器的方式来快速部署,这篇文章主要介绍了Docker中的nacos集群部署方式,感兴趣的朋友一起看看吧
    2024-01-01
  • CentOS 7 sshd 链接被拒绝问题解决办法

    CentOS 7 sshd 链接被拒绝问题解决办法

    这篇文章主要介绍了CentOS 7 sshd 链接被拒绝问题解决办法的相关资料,需要的朋友可以参考下
    2017-03-03

最新评论