Docker入门|第1章 容器生态系统完整解析

Docker入门|第1章 容器生态系统完整解析

摘要:本文系统讲解 Docker 容器生态全景与实战入门。内容涵盖容器核心技术(OCI 规范、runtime、管理工具、定义工具、镜像仓库、容器 OS)、容器平台技术(编排引擎、管理平台、容器 PaaS)与容器支持技术(网络、服务发现、监控、数据管理、日志、安全)三大板块;随后在 CentOS Stream 8 上完成 Docker 安装、镜像加速器配置,并运行 hello-world 与 httpd 容器验证环境;最后演示 Docker C/S 客户端-服务端分离部署,实现客户端远程操作远端 Docker 服务。

一、了解容器技术

容器技术是继大数据和云计算之后炙手可热的技术,未来很长一段时间都会保持很高的热度。 对于IT行业,容器拥有极高业务价值;对于IT从业者,掌握容器既是市场需求,也是提升个人自身价值的重要途径。

从Google趋势数据可以看到Docker搜索热度持续上涨,关注度远超OpenStack、Apache Hadoop。 学习容器技术特点:系统讲解完整容器生态,由整体到细节;重实践同时兼顾理论,先建立认知再动手做实验,运行第一个容器来直观感受容器。

二、容器生态系统

提到容器,大家第一反应就是Docker。Docker确实将容器技术发扬光大,但Docker不等于全部容器。Docker只是容器生态的基石,一套完善的生态系统,才是容器技术能够健康落地发展的关键。

容器生态系统整体划分为三大类别:

  1. 容器核心技术
  2. 容器平台技术
  3. 容器支持技术

2.1 容器核心技术

容器核心技术,指可以让container在host os宿主机操作系统上能够运行起来的底层相关技术,包含6个子模块:容器规范、容器runtime、容器管理工具、容器定义工具、Registries、容器OS。

2.1.1 容器规范

容器不只有Docker,还有CoreOS rkt、红帽podman、containerd等多种容器实现。 为保障容器生态健康,实现不同容器产品之间兼容互操作,Docker、CoreOS、Google等多家公司联合成立 OCI(Open Container Initiative)开放容器倡议组织

OCI一共发布两套规范:

  • runtime spec 容器运行时规范
  • image format spec 容器镜像格式规范

通过这两套规范,不同厂商开发的容器,可以运行在不同runtime之上,保障容器的可移植性和互操作性。

2.1.2 容器 runtime

runtime是容器真正运行的载体。runtime需要和操作系统内核紧密协同,为容器提供完整运行环境。 类比Java:容器相当于Java应用程序,runtime就等价于JVM;Java程序依赖JVM运行,容器依赖runtime运行。

主流三种容器runtime:

  1. lxc:Linux老牌容器runtime,Docker早期版本底层就是使用lxc;
  2. runc:Docker自研开发,完全符合OCI规范,是当前Docker默认runtime;
  3. rkt:CoreOS开发,兼容OCI规范,可以直接运行Docker容器。
2.1.3 容器管理工具

仅有runtime还不够,用户需要工具来管理容器。

容器管理工具对内和runtime交互,对外向用户提供CLI等交互接口。类比Java:除JVM以外,还需要java命令让用户可以启动程序。

runtime与管理工具对应关系:

  • lxc → lxd 管理工具
  • runc → docker engine(包含后台deamon守护进程、cli命令两部分,日常所说Docker,大多指docker engine)
  • rkt → rkt cli
2.1.4 容器定义工具

容器定义工具的作用:定义容器内部的内容与属性,让容器可以保存、共享、重建。

  • docker image:Docker容器模板,runtime依据image创建容器实例
  • dockerfile:包含多条指令的文本文件,通过指令构建docker image镜像
  • ACI(App Container Image):CoreOS rkt容器使用的镜像格式,作用类似docker image。
2.1.5 Registries(镜像仓库)

容器是基于镜像创建,Registry就是统一存放镜像的仓库。

  • Docker Registry:开源仓库组件,企业可以用来搭建私有镜像仓库;
  • Docker Hub:Docker官方提供公共托管Registry,拥有大量现成公开镜像;
  • Quay.io:另一款公共托管镜像仓库,功能与Docker Hub类似。
2.1.6 容器OS

几乎所有Linux、Mac OS、Windows操作系统都可以运行容器,但是业界依然发展出专门面向容器的操作系统,叫做容器OS。

容器OS专门用来运行容器,对比普通操作系统,体积更小、启动更快,运行容器效率更高。

代表产品:CoreOS、atomic、ubuntu core。

三、容器生态系统

容器核心技术解决单台主机上运行容器 的问题; 容器平台技术解决:让容器作为集群,在分布式多节点环境运行。

容器平台技术分为三类:容器编排引擎、容器管理平台、基于容器的PaaS。

3.1 容器编排引擎

现代业务大量使用微服务架构:应用拆分为多个组件,每个组件以服务形式运行在独立容器,对外提供API。为保障高可用,每个组件会运行多个容器副本。 这些容器组成集群,业务变化时需要动态创建、迁移、销毁容器。我们需要高效手段批量管理集群内大量容器,这就是容器编排引擎的工作。

编排(orchestration)包含能力:容器生命周期管理、调度、集群定义、服务发现。通过编排引擎,将大量容器有机组合成完整微服务业务系统。

主流编排引擎:

  1. docker swarm:Docker官方开发的容器编排引擎
  2. kubernetes:Google主导开源,支持Docker、CoreOS多种容器,业界主流
  3. mesos+marathon:mesos是通用集群资源调度平台,搭配marathon共同实现容器编排能力。

3.2 容器管理平台

容器管理平台构建在编排引擎之上,属于更上层通用平台。 支持对接多种编排引擎,屏蔽底层实现细节,给用户提供更友好能力,例如应用目录catalog、一键应用部署。 典型产品:Rancher、ContainerShip。

3.3 基于容器的PaaS

面向微服务开发人员,提供应用开发、部署、管理整套平台。开发人员无需关心底层基础设施,只聚焦业务代码开发。 开源代表项目:Deis、Flynn、Dokku。

3.4 容器支持技术

容器支持技术,用于支撑整套容器基础设施稳定运行。包含:容器网络、服务发现、监控、数据管理、日志管理、安全性。

3.4.1 容器网络

容器实例会动态扩缩容,网络拓扑变得动态复杂。需要专门方案处理容器与容器、容器和外部实体之间连通性、网络隔离。

  • docker network:Docker原生网络解决方案
  • 第三方开源方案:flannel、weave、calico,不同方案实现各有优劣,按需选型。
3.4.2 服务发现

微服务显著特点就是动态变化:负载升高自动新建容器;负载降低销毁容器;容器还会因为资源调度在不同主机之间迁移,容器IP、端口随之改变。 客户端不能写死IP访问业务,需要服务发现组件保存集群内所有微服务最新IP、端口信息,对外提供查询API。 主流服务发现组件:etcd、consul、zookeeper。

3.4.3 监控

容器的动态特性对监控提出更高的要求,现在已经有大量针对容器的监控工具:

  1. Docker原生:docker ps / docker top / docker stats命令;docker stats API,可以通过HTTP接口获取容器状态;
  2. 开源工具:sysdig、cAdvisor/Heapster、Weave Scope。
3.4.4 数据管理

容器支持跨主机迁移,数据管理工具解决持久化数据跟随容器动态迁移的需求,典型工具Flocker。

3.4.5 日志管理

日志是问题排查、事件管理重要依据。

  • docker logs:Docker原生日志工具
  • logspout:实现日志路由,收集各个容器日志转发至其他系统做后续处理。
3.4.6 安全性

容器安全一直是行业重点讨论话题。Open SCAP工具,能够对容器镜像扫描,发现镜像内部潜在安全漏洞。

四、安装docker

了解容器生态之后,进入实操环节,在Linux主机上完成Docker安装。

4.1 环境选择

  • 管理工具:Docker Engine
  • runtime:runc(Docker默认runtime)
  • 操作系统:CentOS Stream 8

4.2 克隆准备虚拟机

基于CentOS‑Stream‑8模板克隆虚拟机,虚拟机命名为docker,配置静态IP:192.168.108.30,修改主机名。

bash 复制代码
hostnamectl set-hostname docker
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.108.30/24 ipv4.gateway 192.168.108.2 ipv4.dns 192.168.108.2 autoconnect yes
nmcli con up ens160

4.3 Docker安装步骤

bash 复制代码
# 卸载旧版本(可选)
yum remove docker-ce
# 安装依赖工具
yum install -y yum-utils device-mapper-persistent-data lvm2 vim
# 添加阿里docker-ce源
yum-config-manager --add-repo [https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo](https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo)
yum makecache
# 安装docker‑ce
yum install -y docker-ce
# 设置开机自启并立即启动服务
systemctl enable docker.service --now

4.4 验证docker安装

bash 复制代码
# 查看docker版本
docker --version
# 查看服务状态
systemctl status docker

4.5 配置镜像加速器

4.5.1 阿里云镜像加速器配置
bash 复制代码
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["[https://spcqvmfn.mirror.aliyuncs.com](https://spcqvmfn.mirror.aliyuncs.com)"]
}
EOF
systemctl daemon-reload
systemctl restart docker
# 校验配置
docker info
4.5.2 华为云镜像加速器配置

修改/etc/docker/daemon.json写入华为云镜像加速地址

bash 复制代码
{
"registry-mirrors": ["[https://054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com](https://054b8ac70e8010d90f2ac00ef29e6580.mirror.swr.myhuaweicloud.com)"]
}
systemctl daemon-reload
systemctl restart docker
docker info

4.6 运行第一个容器 hello‑world

bash 复制代码
docker run hello-world

执行成功输出Hello from Docker!,代表Docker环境正常。

4.7 清理实验环境,拍摄快照

bash 复制代码
# 删除全部容器
docker rm -f $(docker ps -aq)
# 删除hello‑world镜像
docker rmi -f hello-world

关机虚拟机,拍摄快照命名为docker ok

4.8 运行第二个容器 httpd

bash 复制代码
docker run -d -p 80:80 httpd
# 访问验证
curl 192.168.108.30

输出<html><body><h1>It works!</h1></body></html>代表web容器运行成功。

五、docker C/S分离部署

Docker是C/S客户端‑服务端架构,可以将客户端、服务端部署在两台不同虚拟机。

5.1 虚拟机规划

  • docker_server:服务端,IP:192.168.108.30
  • docker_client:客户端,IP:192.168.108.31

5.2 docker‑server服务端配置

  1. 设置主机名、静态IP
bash 复制代码
hostnamectl set-hostname docker_server
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.108.30/24 ipv4.gateway 192.168.108.2 ipv4.dns 192.168.108.2 autoconnect yes
nmcli con up ens160
  1. 安装docker‑ce全套软件包,配置镜像加速器
  2. 修改docker.service开启2375远程监听端口 修改/usr/lib/systemd/system/docker.service,在ExecStart末尾增加参数:‑H tcp://0.0.0.0:2375
  3. 重载配置重启docker
bash 复制代码
systemctl daemon-reload
systemctl restart docker.service
# 关闭防火墙
systemctl stop firewalld
# 验证2375端口监听
yum install lsof
lsof -i :2375

5.3 docker‑client客户端配置

  1. 设置主机名、静态IP
bash 复制代码
hostnamectl set-hostname docker_client
nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.108.31/24 ipv4.gateway 192.168.108.2 ipv4.dns 192.168.108.2 autoconnect yes
nmcli con up ens160
  1. 只安装docker客户端工具docker‑ce‑cli
bash 复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2 vim
yum-config-manager --add-repo [https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo](https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo)
yum makecache
yum install -y docker-ce-cli
  1. 远程调用服务端docker执行命令
bash 复制代码
# 远程连接server执行hello‑world
docker -H 192.168.108.30 run hello-world
# 查看远端镜像列表
docker -H 192.168.108.30 images

说明:client只负责发送管理指令,镜像、容器全部存储在docker‑server服务端主机。

六、第1章小结

  1. 容器不等于Docker,Docker只是容器生态中一个知名实现;完整生态分为核心技术、平台技术、支持技术三大板块。
  2. 容器核心技术负责单机运行容器:OCI规范、runtime运行时、管理工具、定义工具、镜像仓库、容器OS。
  3. 容器平台技术面向分布式集群:编排引擎、管理平台、容器PaaS,解决大规模容器集群调度管理。
  4. 容器支持技术属于配套基础设施:网络、服务发现、监控、数据管理、日志、安全,保障生产环境稳定运行。
  5. 实操部分:虚拟机环境准备、Docker完整安装、服务状态验证、国内镜像加速器配置(阿里云、华为云),运行hello‑world与httpd测试容器。
  6. 理解Docker C/S客户端‑服务端架构,完成C/S分离部署实验,客户端远程操作远端Docker服务。
  7. 学习路径:先理解容器生态全景,再动手搭建Docker环境,掌握基础环境配置,之后学习Docker命令与容器操作。
相关推荐
LuiChun1 小时前
与精神病患者的日常探讨20260913
docker
筝筝ba1 小时前
如何跳过FFDC
xml·linux·运维·服务器·网络
2601_963282771 小时前
政企无线对讲系统落地:从设备采购到长期运维的完整工程实践
大数据·运维·数据库
2601_962218471 小时前
万象生鲜系统协议价底层架构实现生鲜企业报价业务数字化管理
大数据·运维·微服务·云原生·架构
u0109053592 小时前
NAS远程访问内网穿透方案之使用神卓N600实现不限速方法
服务器·网络·数据库
闲云自留地2 小时前
Neutron 实战教程:物理 vs 虚拟网络,OVN 环境创建网络与安全策略
服务器·网络·openstack
szarron2 小时前
HTOOL‑SA12 + HT06 近场探头组合实操|手持设备工位 EMI 预兼容排查完整流程
运维·服务器·开发语言·网络·射频工程·频谱仪
杨云龙UP2 小时前
DB2 HADR 主备架构活动日志参数优化操作手册
linux·运维·服务器·数据库·db2·db2 hadr·日志参数调整
我是大猴子2 小时前
MyBatis‑Plus & MyBatis‑Flex 区别
java·服务器·数据库