来源 | 捡田螺的小男孩(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容器,解放双手,不用手动盯服务器。
-