Dockerfile制作的分层构建概念

Dockerfile制作的分层构建概念_第1张图片

公司中的所有镜像都是要上传到harbor仓库上,一层一层的打镜像,在打的同时将镜像上传到harbor上

第一层原始系统层(ubantu/debain/centos):

这个目录结构一定要提前设计好,我先将官方的原始系统镜像pull下来,在这层的基础之上我们会加一些常用命令

第二层常用命令层:

否则后期还要在镜像中安装命令太过于麻烦,我们将这个安装常用命令的镜像称为公司的基础镜像叫做baseimgae,后期我们在打镜像的时候就不再调用官方的了,而是直接调用baseimgae。我们会在baseimgae这个镜像中不仅要安装命令,而且还要将我们的常用用户创建好,这个镜像创建好了之后再往下就会分叉了,

第三层业务层(nginx、PHP、JDK、tomcat、mysql等业务):

因为公司有很多业务,这一层就包括了各种服务镜像如jdk(java环境使用的镜像)、安装PHP的镜像、安装NGINX的镜像等等服务。然后这一层再提交为一层业务镜像,并在JDK的镜像层往下再打一层tomcat的业务层,在tomcet这层之后再打一层代码层。用来存放代码的APP1、APP2这一层只是编译安装了各个服务而已他们上面是没有任何代码和web页面数据的。

第四层代码层(静态服务前端代码和tomcat的jsp代码等):

然后再将这一层打出来的镜像就可以往公司的 Harbor 仓库进行上传了。

宿主机:

打完了这几层镜像之后,下面就是运行这些镜像的各个node节点也就是所谓的宿主机,要保证我们的宿主机能够在公司的harbor上去拉取镜像,当宿主机拉取完了镜像之后,我们就让该宿主机运行一个容器。然后再将所有nginx容器的数据都存放到NAS存储上,以实现数据同步。而NAS存储是先挂载在宿主机上,然后是宿主机将这个存储给各个容器去使用。由java容器往NAS存储上写数据,再由nginx容器来读NAS存储上的数据,所以他们实际上是看到的同一份数据

总结:

我们从镜像分层上,我们不会像docker官方那样一步打成我们的业务镜像,因为像官方那样一次性操作的步骤太多了,不利于后期dockerfile文件以及没做一个容器就要从新打一次镜像,不能实现dockerfile文件多次复用。

所以我们会将每个步骤才分开,每个步骤都是一层镜像,这样后期某个业务想用某个环境的镜像直接就基于不同层的dockerfile文件进行调用。

更多文章和资料|点击下方文字直达 ↓↓↓
阿里云K8s实战手册
[阿里云CDN排坑指南]CDN
ECS运维指南
DevOps实践手册
Hadoop大数据实战手册
Knative云原生应用开发指南
OSS 运维实战手册

你可能感兴趣的:(Dockerfile制作的分层构建概念)