docker,docker compose,k8s之间的区别

一、先理解一个核心:容器是什么

容器本质就是:

把程序 + 运行环境一起打包,然后在任何机器上运行。

例如一个 Java 服务:

复制代码
SpringBoot
JDK
依赖库
配置

打包成一个 镜像(image)

复制代码
my-service:1.0

然后运行:

复制代码
docker run my-service

就变成一个 容器(container)


二、Docker 是干什么的

Docker 是 容器运行时(Container Runtime)

作用:

  1. 下载镜像

  2. 创建容器

  3. 启动容器

  4. 停止容器

  5. 删除容器

例如:

复制代码
docker pull redis
docker run redis

或者运行 Java:

复制代码
docker run -p 8080:8080 my-springboot

Docker解决的问题是:

复制代码
开发环境一致
部署简单
依赖隔离

Docker 管理的粒度

Docker 管理的是:

复制代码
一个容器

例如:

复制代码
mysql
redis
springboot
nginx

每个都是独立容器。


三、Docker Compose 是什么

Docker Compose 是 多容器编排工具

解决的问题:

一个项目往往有 多个容器

例如一个系统:

复制代码
nginx
springboot
redis
mysql
minio

如果用 docker 手动启动:

复制代码
docker run mysql
docker run redis
docker run minio
docker run springboot
docker run nginx

非常麻烦。


Compose 的作用

用一个文件:

复制代码
docker-compose.yml

描述所有服务。

例如:

复制代码
version: "3"

services:

  mysql:
    image: mysql:8
    ports:
      - "3306:3306"

  redis:
    image: redis
    ports:
      - "6379:6379"

  backend:
    image: my-backend
    ports:
      - "8080:8080"

然后一条命令:

复制代码
docker compose up

全部启动。


Compose 管理的粒度

Compose 管理的是:

复制代码
一台服务器上的多个容器

例如:

复制代码
服务器 A
 ├ mysql
 ├ redis
 ├ backend
 └ nginx

四、Kubernetes 是什么

Kubernetes(简称 K8s)是:

容器集群管理平台。

它解决的问题是:

复制代码
很多服务器
很多容器
自动管理

为什么需要 K8s

如果系统变大:

复制代码
100 个服务
500 个容器
10 台服务器

Docker Compose 就不够用了。

因为:

  • 只能管理 一台机器

  • 不会自动扩容

  • 不会自动恢复

  • 不会负载均衡


Kubernetes 做什么

K8s 可以:

1 自动调度容器

你只说:

复制代码
我要运行 3 个 backend

K8s 自动决定:

复制代码
服务器A:1个
服务器B:1个
服务器C:1个

2 自动重启

如果容器挂了:

复制代码
backend 崩了

K8s:

复制代码
自动重启

3 自动扩容

流量大时:

复制代码
backend × 3

自动扩:

复制代码
backend × 10

4 负载均衡

用户请求:

复制代码
/api/login

K8s 会自动分配到:

复制代码
backend-1
backend-2
backend-3

5 滚动发布

升级版本:

复制代码
v1 → v2

K8s 会:

复制代码
逐个替换容器
不停机

五、三者关系

最简单理解:

复制代码
Docker = 容器运行
Compose = 单机编排
Kubernetes = 集群编排

结构是:

复制代码
Kubernetes
     ↓
Docker
     ↓
容器

六、一个真实系统部署例子

例如你的系统:

复制代码
gateway
auth-center
admin-be
redis
mysql
minio
mqtt

小项目

用:

复制代码
Docker Compose

一台服务器:

复制代码
server1
 ├ gateway
 ├ auth-center
 ├ admin-be
 ├ redis
 ├ mysql
 └ minio

大项目

用:

复制代码
Kubernetes

多台服务器:

复制代码
server1
 ├ gateway
 ├ admin-be

server2
 ├ auth-center
 ├ redis

server3
 ├ mysql
 ├ minio

K8s 自动管理。


七、一个更形象的比喻

工具 类比
Docker 一辆车
Compose 一个车队
Kubernetes 交通调度中心

八、为什么大厂都用 K8s

因为它解决:

复制代码
高可用
自动扩容
滚动发布
故障恢复
服务发现
负载均衡

所以现在:

复制代码
云原生 = Kubernetes

一句话总结

复制代码
Docker 负责"运行容器"
Compose 负责"在一台机器上管理多个容器"
Kubernetes 负责"在很多机器上管理很多容器"

相关推荐
Java后端的Ai之路4 小时前
Kubernetes是什么?(小白入门版)
云原生·容器·kubernetes·教程
木雷坞4 小时前
视觉算法环境 Docker 镜像拉取失败排查
运维·人工智能·docker·容器
瀚高PG实验室5 小时前
安全版V4.5版本docker容器license过期问题处理步骤
安全·docker·容器·瀚高数据库
java_logo5 小时前
SiYuan 思源笔记 Docker 部署终极指南:Windows+Linux 双平台
windows·笔记·docker·思源笔记·思源笔记部署·docker部署思源笔记·思源笔记文档
Hello.Reader5 小时前
Ubuntu 上正确安装 Kali 虚拟机、Docker 与 kail 工具指南
linux·ubuntu·docker
筱_智6 小时前
Docker学习-超详细-通俗易懂(从入门到精通)
学习·docker·容器
EAIReport7 小时前
Docker与K8s核心解析:共同性、差异性及实战适配指南
docker·容器·kubernetes
长安链开源社区7 小时前
动手开发 | 如何通过k8s部署长安链
云原生·容器·kubernetes·区块链
江湖有缘7 小时前
容器化部署|Docker搭建Blinko轻量笔记系统
笔记·docker·容器
亚空间仓鼠7 小时前
Kubernetes技术入门与实践(五):DaemonSet与StatefulSet
容器·贪心算法·kubernetes