容器技术资料概述

一些兴起原因:在使用虚拟化一段时间后,发现它存在一些问题:

不同的用户,有时候只是希望运行各自的一些简单程序,跑一个小进程。为了不相互影响,就要建立虚拟机。如果建虚拟机,显然浪费就会有点大,而且操作也比较复杂,花费时间也会比较长。而且,有的时候,想要迁移自己的服务程序,就要迁移整个虚拟机。显然,迁移过程也会很复杂。

有没有办法更灵活快速一些呢?有,这就引入了“容器(Container)”。

容器与虚拟机的区别

容器也是虚拟化,但是属于“轻量级”的虚拟化。它的目的和虚拟机一样,都是为了创造“隔离环境”。但是,它又和虚拟机有很大的不同——虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离。

虚拟机通常包括整个操作系统和应用程序。它们还需要一个与它们一起运行的管理程序来控制虚拟机。由于它们包括操作系统,因此它们的大小为几千兆字节。使用虚拟机的一个缺点是,它们需要花费几分钟来启动操作系统,并初始化它们所承载的应用程序。同时,这些容器是轻量级的,并且大部分在兆字节大小范围内。与虚拟机相比,容器的性能要好得多,几乎可以立即启动。

容器的优缺点

容器技术主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立

于宿主操作系统和其它隔离的进程。使用容器可以不修改应用程序代码,不需要开发人员学习

特定环境下的技术,就能够将现有的应用程序部署在其它机器上。

容器优缺点如下:

优点:

敏捷环境

提高生产力

版本控制

运行环境可移植

标准化

安全

缺点:

复杂性增加

原生 Linux 支持

不太成熟

容器的分类

常见的容器有操作系统容器和应用程序容器。

操作系统容器非常适合运行同一应用不同版本的需求,对相同版本的场景更不是问题。

应用程序容器设计为将服务打包并作为单个进程运行,而在操作系统容器中,可以运行多个服

务和进程。

当需要将应用程序打包并作为组件分发时,应用程序容器是个很好的选择。如果只想要一个可

以安装不同库、语言、数据库的操作系统,那么操作系统容器更适合。

容器技术:轻量级的「操作系统虚拟化」

不跟你讲长篇大论,直接从你最熟悉的场景切入,让你彻底明白容器是什么、为什么出现、怎么用。


一、先看一个你一定会遇到的痛点

你现在部署一个应用:

# 在 Rocky 上
yum install -y nginx
# 配了半天,终于跑起来了

# 在 OpenCloudOS 上
yum install -y nginx  # 等等,版本不一样?
# 又要重新调配置

更大的坑:

  • 开发用 Ubuntu,测试用 CentOS,生产用 OpenCloudOS
  • 「在我电脑上是好的啊!」—— 环境不一致,天天吵架

容器的答案:

把「应用 + 完整环境」打包成一个镜像,哪里跑都一样。


二、容器是什么?

容器 = 进程级别的隔离,操作系统级别的共享。

和你的 VMware 对比:

维度VMware(虚拟机)容器
隔离级别硬件虚拟化进程隔离
每个单元包含完整 OS(GB级)只包含应用+依赖(MB级)
启动时间分钟级秒级
资源占用高(每个 VM 一套 OS)低(共享宿主机内核)
你的 Rocky一整台虚拟机可以跑几十个容器

一个比喻让你再也忘不掉:

  • 虚拟机 = 每家租客自己盖一套房子(有自己的地基、水电、墙)
  • 容器 = 酒店房间(共享大楼的水电结构,只带自己的行李)

三、容器技术的三大核心

1. 镜像(Image)

容器的「模板」或「安装包」。

FROM nginx:alpine
COPY ./index.html /usr/share/nginx/html
EXPOSE 80
  • 包含:应用 + 运行时 + 依赖 + 配置
  • 分层存储:每一层只记录变化,节省空间
  • 不可变:镜像一旦建成,永不修改

你的类比:VMware 的 .vmdk 文件,但小得多。


2. 容器(Container)

镜像的「运行实例」。

docker run -d -p 80:80 nginx
  • 镜像 nginx 跑起来,就是一个容器
  • 可以启动、停止、删除、暂停
  • 容器内的修改不影响镜像

你的类比:VMware 里从模板克隆一台 VM。


3. 仓库(Registry)

存镜像的地方。

  • Docker Hub(官方仓库)
  • 私有仓库(Harbor、阿里云镜像服务)
docker pull nginx:latest        # 下载
docker push myapp:v1.0          # 上传

你的类比:GitHub,但存的是镜像不是代码。


四、容器和虚拟机的本质区别

对比项虚拟机容器
架构[APP] [OS] [Hypervisor] [硬件][APP] [容器引擎] [宿主机OS] [硬件]
内核每个 VM 有自己的内核所有容器共享宿主机内核
隔离强(硬件级)弱(进程级,但够用)
安全高(完全隔离)中(内核共享有风险)
密度一台物理机跑十几个 VM一台物理机跑上百个容器

你现在两台 VM 各装一套系统 → 浪费资源。
如果用容器,一台 VM 就能跑十几个隔离的应用。


五、为什么容器现在这么火?

1. 微服务的「完美载体」

  • 每个服务一个容器
  • 独立开发、独立部署、独立扩缩容

2. DevOps 的「标准化交付」

  • 开发 build 镜像
  • 测试 run 镜像
  • 生产 run 同一个镜像

3. 弹性伸缩的「原子单位」

  • K8s 调度的是容器,不是 VM
  • 不够了?再加 10 个容器副本

六、你的学习路径(从零到一)

第 1 步:在 Rocky 上安装 Docker

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker

第 2 步:跑第一个容器

# 下载并运行 nginx
docker run -d -p 8080:80 --name my-nginx nginx

# 访问你的 Rocky:8080,看到 nginx 欢迎页

第 3 步:自己打一个镜像

mkdir myapp && cd myapp
cat > index.html <<EOF
<h1>Hello from Container!</h1>
EOF

cat > Dockerfile <<EOF
FROM nginx:alpine
COPY index.html /usr/share/nginx/html
EOF

docker build -t myapp:v1 .
docker run -d -p 8081:80 myapp:v1

第 4 步:推送到仓库

docker tag myapp:v1 你的用户名/myapp:v1
docker push 你的用户名/myapp:v1

七、容器 ≠ Docker

很多人把容器等同于 Docker,这是误区:

技术角色
容器运行时runc、containerd(真正跑容器的)
容器引擎Docker、Podman、CRI-O(用户操作的)
镜像标准OCI(Open Container Initiative)
编排工具K8s、Swarm、Nomad(管一群容器的)

Docker 只是最流行的容器工具,不是唯一。


八、你现在的位置 + 下一步

你现在下一步学什么
知道容器是什么Docker 常用命令(run、ps、exec、logs)
知道镜像怎么打Dockerfile 最佳实践
跑了一个 nginx容器网络、存储卷
docker-compose(多容器编排)

等你容器玩熟了,就可以进 K8s 了。


九、一句话终结

容器 = 把你的应用和依赖打包,扔到哪里都能跑,再也不怕环境不一致。

你现在两台 VM 的环境差异,用容器就解决了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注