1、Docker概述与安装
Docker概述与安装
文章目录
- Docker概述与安装
- 一、 Docker概述
- Docker简介
- Docker版本演化与技术特征更新
- 1、Docker发展历程概述
- 1. 初创期(2013-2014)
- 2. 成长期(2015-2016)
- 3. 成熟期(2017-2019)
- 4. 现代期(2020至今)
- 2、重大版本技术特征更新
- Docker 1.0 (2014年6月)
- Docker 1.12 (2016年7月)
- Docker 17.03 (2017年3月)
- Docker 18.09 (2018年11月)
- Docker 19.03 (2019年7月)
- Docker 20.10 (2020年12月)
- Docker 23.0 (2023年1月)
- 3、关键技术演进路线
- 1. 容器运行时演进
- 2. 构建系统革新
- 3. 网络模型发展
- 4. 存储驱动优化
- 5. 安全增强路径
- 4、当前技术趋势
- Docker容器技术与虚拟机的区别
- Docker相较于VM的优点
- Docker局限性
- Docker通常用于如下场景
- 二、 Docker 架构
- 三、 Docker安装
- 配置阿里源
- 下载docker
- 启动docker
- 1、使用官方安装脚本自动安装
- 2、手动安装
- 3、启动 Docker
- 4、卸载 Docker
- 四、 Docker 镜像加速
- 五、/etc/docker/daemon.json 配置文件
- 核心配置字段
- 网络配置
- 安全配置
- 镜像与存储
- 性能与资源
- 实验性功能
- 完整示例
- 注意事项
一、 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 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安装
配置阿里源
cat <<EOF >> /etc/yum.repos.d/docker-ce.repo [docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/9/x86_64/stable/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg EOF下载docker
yum install -y docker-ce-28.03#不加-28.03默认下载最新启动docker
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 systemctl daemon-reload systemctl enable --now docker1、使用官方安装脚本自动安装
curl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun2、手动安装
#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-ce3、启动 Docker
[root@localhost ~]# systemctl start docker##通过运行 hello-world 镜像来验证是否正确安装了 Docker Engine-Community 。[root@localhost ~]# docker run hello-world4、卸载 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"
- 指定 Docker 数据存储路径(替代旧的
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")
- 指定网桥 IP 地址(如
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)
- 启用 TLS 验证(
tlscacert- CA 证书路径(如
"/etc/docker/ca.pem")
- CA 证书路径(如
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验证配置是否生效
如果需要针对特定场景的配置建议,请提供更多需求细节。
“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` 验证配置是否生效 如果需要针对特定场景的配置建议,请提供更多需求细节。