社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

小白看了秒懂:Docker和k8s是什么关系?

脚本之家 • 5 月前 • 332 次点击  
将 脚本之家 设为“星标
第一时间收到文章更新
图片

来源 | 捡田螺的小男孩(ID:gh_51e0e901a289)

前言

今天跟大家聊聊Docker与K8s区别吧~~

如果你是一位古法编程的Java程序员,相信大家都被部署环境坑过吧。

比如想在服务器上跑个Spring Boot项目,基于JDK11版本得话。Ubuntu上得敲apt install openjdk-11-jdk,换到CentOS就变成yum install java-11-openjdk-devel,还得费劲配置JAVA_HOME.

更头疼的是,项目依赖的MySQL、Redis版本得对上,不同服务器的JDK版本乱七八糟,依赖包还总冲突,被逼着写好几套部署脚本,改来改去,半天功夫全耗在这上面😭。

那么,有没有一种操作,能让我们的Java项目“一次打包,到处乱跑”,彻底和环境不一致说拜拜?

那就是容器技术,Docker

1、核心痛点:本地能跑、服务器直接崩

有时候觉得,Java程序就像个“娇贵的小公主”,离不开JDK、各种依赖包、配置文件,哪怕操作系统有一点点小差异,都可能导致“ 本地能跑、服务器直接崩”。

解决思路超简单:把Java程序和它需要的全套“家当”(JDK、依赖、配置)打包成一个整体,走到哪带到哪——这就是Docker的核心逻辑

2、Docker核心概念

2.1 基础镜像(Base Image)

基础镜像,站在java角度说,就是“精简版系统+JDK”,不用我们自己装环境。比如官方的openjdk:11-jdk-slim,自带JDK11,拿来就能用,相当于Java项目打包的“地基”,省了超多事。

2.2 Dockerfile:Java项目的“打包说明书”

就是一份简单的命令清单,告诉Docker“怎么基于基础镜像,搭好我们项目的运行环境”。给大家整个Spring Boot项目的极简示例,一看就会:

# 基础镜像(自带JDK11,不用自己装)
FROM openjdk:11-jdk-slim
# 把打包好的Spring Boot jar包复制进去
COPY target/my-springboot.jar /app.jar
# 启动命令,一行搞定
CMD ["java""-jar""/app.jar"]

2.3. 容器镜像:Java项目+环境的“压缩包”

执行docker build命令,Docker就会照着Dockerfile的说明书,帮我们打包出一个“万能压缩包”——这就是容器镜像。它是只读的,能复制、能分发,只要服务器装了Docker,拿过来就能跑,再也不用管环境差异。

2.4 Registry:镜像的“仓库”(类比Maven仓库)

知道Maven的都懂!就像Maven仓库管理jar包一样,Docker镜像也有自己的“仓库”。我们用docker push把镜像传上去,需要的时候用docker pull拉下来,不管多少台服务器,都能轻松获取,不用挨个复制,太省心了。

常用的有官方的Docker Hub,公司内部也会搭私有仓库,安全又方便。

2.5 容器:运行起来的Java项目

执行 docker run,就是把镜像 “解压运行”, 创建出一个 独立、隔离的运行环境 —— 这个东西,就叫容器。

3、Docker相关工具

3.1 Docker Compose:多容器一键部署

Java项目哪能离得开MySQL、Redis?以前得挨个启动容器,记顺序记到头疼。有了Docker Compose,用一个YAML文件写清楚容器依赖,一行docker-compose up,自动先启MySQL、再启Spring Boot,一键搞定,不用手动操作。

3.2. Docker Swarm:简单集群部署

如果有好几台服务器,想部署Java服务,还想实现“服务器坏了自动迁移”“流量大了自动加容器”,Docker Swarm就够用了,适合小型集群,操作也不复杂。

4、Docker与K8s

4.1 K8s是什么?

简单说,就是“容器管家”,专门管大规模的容器集群——比如几十台服务器、上百个Java容器,它负责调度容器、重启崩掉的容器、根据流量扩缩容,不用我们手动盯着。

4.2. 核心对应关系

  • K8s的Pod:最小的管理单元,说白了就是“容器的小房子”,通常里面只放一个Java容器(比如我们的Spring Boot项目)。

  • K8s的Node:就是集群中的每一台服务器,相当于“容器小房子”的摆放场地。

4.3. 敲黑板了哇,分工超明确

  • Docker:负责“打包Java程序+JDK环境”,造出一个个独立的容器(相当于“生产小盒子”);
  • K8s:负责管理这些小盒子,解决大规模部署、故障处理的问题(比如Java容器崩了,它自动重启,不用我们半夜起来救火)。

5、最后

  • Docker:解决Java项目“环境不兼容”的痛点,一次打包,到处运行,省了超多部署时间
  • 核心流程:Dockerfile(说明书)→docker build(造镜像)→docker run(启容器),三步搞定。
  • K8s:生产环境必备,管理大规模Java容器,解放双手,不用手动盯服务器。

    END

    图片
      推荐阅读:
    1. AI,正在“杀死”哪些软件?
    2. 糟糕,大佬45年前论文,被判AI生成
    3. 内存价格大跳水,谷歌新算法TurboQuant杀疯了!
    4. 3部旧手机换一台iPhone?我们找回收商问了问
    5. 微软终于认错!Win11要大改了!

    Python社区是高质量的Python/Django开发社区
    本文地址:http://www.python88.com/topic/194599