1、Docker概述与安装

张开发
2026/6/7 4:07:22 15 分钟阅读
1、Docker概述与安装
Docker概述与安装文章目录Docker概述与安装一、 Docker概述Docker简介Docker版本演化与技术特征更新1、Docker发展历程概述1. 初创期2013-20142. 成长期2015-20163. 成熟期2017-20194. 现代期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启动docker1、使用官方安装脚本自动安装2、手动安装3、启动 Docker4、卸载 Docker四、 Docker 镜像加速五、/etc/docker/daemon.json 配置文件核心配置字段网络配置安全配置镜像与存储性能与资源实验性功能完整示例注意事项一、 Docker概述Docker简介Docker翻译过来就是码头工人Docker是一个开源的应用容器引擎让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中然后发布到任何流行的Linux机器上也可以实现虚拟化。容器完全使用沙盒机制相互之间不会存在任何接口。几乎没有性能开销可以很容易的在机器和数据中心运行。最重要的是他们不依赖于任何语言、框架或者包装系统。Docker是dotCloud公司开源的一个基于LXC的高级容器引擎源码托管在Github上基于go语言并且遵从Apache2.0协议开源。GitHub地址https://github.com/moby/mobyLXC主要通过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.comdocker中文库: https://www.docker.org.cn/Docker版本演化与技术特征更新1、Docker发展历程概述Docker自2013年诞生以来经历了从简单的容器工具到完整的容器生态系统的演变过程。其版本演化可以分为四个主要阶段1. 初创期2013-20142013年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 包括三个基本概念镜像ImageDocker 镜像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安装配置阿里源cat EOF /etc/yum.repos.d/docker-ce.repo [docker-ce-stable] nameDocker CE Stable - $basearch baseurlhttps://mirrors.aliyun.com/docker-ce/linux/centos/9/x86_64/stable/ enabled1 gpgcheck1 gpgkeyhttps://mirrors.aliyun.com/docker-ce/linux/centos/gpg EOF下载dockeryum install -y docker-ce-28.03#不加-28.03默认下载最新启动dockercat 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[rootlocalhost ~]# systemctl start docker##通过运行 hello-world 镜像来验证是否正确安装了 Docker Engine-Community 。[rootlocalhost ~]# docker run hello-world4、卸载 Docker##删除安装包[rootlocalhost ~]# yum remove docker-ce##删除镜像、容器、配置文件等内容[rootlocalhost ~]# rm -rf /var/lib/docker四、 Docker 镜像加速国内从 DockerHub 拉取镜像有时会遇到困难此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务##编辑配置文件[rootlocalhost ~]#catEOF/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##重新启动服务[rootlocalhost ~]# systemctl daemon-reload[rootlocalhost ~]# systemctl restart docker五、/etc/docker/daemon.json 配置文件核心配置字段data-root指定 Docker 数据存储路径替代旧的graph选项示例/mnt/docker-dataexec-opts运行时选项如 cgroup 驱动示例[native.cgroupdriversystemd]log-driver默认容器日志驱动如json-file,syslog,journald示例json-filelog-opts日志驱动的配置选项示例{max-size: 10m, max-file: 3}网络配置bip指定网桥 IP 地址如192.168.1.1/24default-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/falsetlscacertCA 证书路径如/etc/docker/ca.pemuserns-remap启用用户命名空间隔离示例default镜像与存储storage-driver存储驱动如overlay2,btrfsregistry-mirrors镜像加速器地址示例[https://mirror.aliyuncs.com]insecure-registries允许非 HTTPS 私有仓库示例[myregistry.local:5000]性能与资源max-concurrent-downloads镜像下载并发数默认3live-restore守护进程崩溃时保持容器运行true/false实验性功能features启用实验性功能示例{buildkit: true}完整示例{data-root:/var/lib/docker,exec-opts:[native.cgroupdriversystemd],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 验证配置是否生效 如果需要针对特定场景的配置建议请提供更多需求细节。

更多文章