蛮多人对docker、k8s模棱两可,不得要领,因为自己本身是做云原生基础架构的,经常跟这些打交道,这里不讲docker、k8s具体细节,就讲一些非常重要的点,如果对docker和k8s完全不熟悉的,自己可以在B站搜索黑马java就业班中的持续集成、docker、K8S部分
docker:docker的发明就是为了敏捷开发,再小一点,就是为了无缝上线,快速交付软件及应用服务,一般的人都知道docker,(不会的自己安装一下docker,然后用docker安装一下redis),docker怎么操作容器,docker怎么拉取所需镜像,也知道docker其实就那么几个常见的命令
http://www.ha97.com/5546.html
,但是今天我想说的重点,就是docker操作镜像,这个是重点,理解了镜像,那么你就玩完全全会docker,现在的k8s各种牛逼的部署、运行其实就是有了镜像,所以才能玩的这么转,而镜像最重要的就是dockerfile,可以说,理解了dockerfile,然后看一个dockerfile的demo,基本就掌握了docker的最核心,如果你会编写dockerfile,那么你就会创建基础镜像、api镜像、业务镜像、xx镜像、java应用(jar和war
的随便)镜像、redis镜像、mongodb镜像、mysql镜像、es镜像、rabbitmq镜像、kafka镜像、influxdb镜像,太多了,什么是dockerfile,我就不介绍了,一般的大企业都有自己自己的私有镜像仓库,dockerfile举个例子:
FROM 116.211.105.42:18823/whty/jdk:8u171-20180517
VOLUME /tmp
ADD xx-i-0.0.1.jar /opt/xx-i/xx-i.jar
ADD start.sh /opt/xx-i/start.sh
RUN chmod -R 755 /opt/xx-i
ENTRYPOINT ["/opt/xx-i/start.sh"]
题外话:虽然k8s的内核已经不再支持docker了,但是据小龙分析:并没什么妨碍
K8S:k8s部署、涉及到概念如namespace、node、pod、service就不说了,至于怎么创建这些,都是通过K8S提供的api进行curd的,其实我讲完了上面的镜像,k8s的重点已经没了,本质上还是镜像
${imageUrl}这个是镜像地址,因为做的一键发布,所以这个成了变量了,后续在程序中会替换成设计好的镜像地址
有了镜像地址,创建一个或者多个容器组就很方便了,在我下面的这个例子中随便更改参数或者自己去把我这个例子中涉及到的字段百度一遍,就什么都懂了,就可以创建多个容器(微服务),自动伸缩、cpu和内存limit限制、挂载地址、代码更新等等,太多了,还有可以通过k8s api配置域名和service的映射以及k8s内部网络映射
spec:
replicas: 1
revisionHistoryLimit: 2
selector:
matchLabels:
app: xiaolong-app
strategy:
type: "RollingUpdate"
rollingUpdate:
maxUnavailable: "25%"
maxSurge: "25%"
template:
metadata:
labels:
app: xiaolong-app,
spec:
containers:
- name: toxiaolong-app
image: ${imageUrl}
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 0.5
memory: 1Gi
limits:
memory: 2.5Gi
ports:
- containerPort: 8086
volumeMounts:
${configmapMounts}
volumes:
${configmapVolumes}
这里做个总结:彻底会docker、k8s,一定要抓住什么才是核心,本质发明这两个东西就是为了无缝对接上线,所以核心一定是基于镜像构建应用,镜像的本质就是dockerfile,只有这样,你写的代码才能真正实现k8s微服务快速部署!!!
转载:https://blog.csdn.net/weixin_40562504/article/details/113856085