https://www.docker.com/sites/default/files/social/docker_facebook_share.png![](/api/file/getImage?fileId=5c1749dcaddba40f1200002d)
提起容器,大家可能首先想到的是 Docker,Docker 已经当之无愧的成为容器界巨头。如果你使用 Kubernetes 作为私有云
【编者的话】随着容器化进程的加速,容器编排的需求也越来越强烈。而容器编排也经历了从Kubernetes、Mesos和Swarm三足鼎立到今天的Kubernetes一统江湖的局面。现在越来越多的公司选择基于Kubernetes来构建企业内部的私有云。本次分享将为大家介绍360搜索基于Kubernetes打造私有云的整体架构,以及遇到的一些问题和解决方案,希望可以使大家在打造私有云过程中少走一些弯路
Docker
2018-08-08 12:45:56
1312
0
0
Docker目前在容器市场可以说是占领了大部分市场,Docker掀起了容器革命,同时也改变了现代化云平台的构建方式。尽管Docker很强大,但使用过程当中也遇到了一些问题。比如说我想要构建一个编译型语言镜像,需要先在一个Dockerfile中编译,然后再使用另外一个Dockerfile把编译好的文件放到镜像中。这样无形当中就增大了CI/CD的复杂度。
## 多阶段构建
Docker 多阶段构建
Docker
2017-06-27 10:46:51
370
0
0
虽然 Dockerfile 简化了镜像构建的过程,并且把这个过程可以进行版本控制,但是不正当的 Dockerfile 使用也会导致很多问题:
- docker 镜像太大。如果你经常使用镜像或者构建镜像,一定会遇到那种很大的镜像,甚至有些能达到 数G
- docker 镜像的构建时间过长。每个 build 都会耗费很长时间,对于需要经常构建镜像(比如单元测试)的地方这可能是个大问题
- 重复劳动。多次镜像构建之间大部分内容都是完全一样而且重复的,但是每次都要做一遍,浪费时间和资源
容器应该是短暂的
容器模型是进程而不是机器,不需要开机初始化。在需要时运行,不需要时停止,能够删除后重建,并且配置和启动的最小化。
使用.dockerignore文件
在 docker build 的时候,忽略部分无用的文件和目录可以提高构建的速度。比如.git目录。dockerignore的定义类似gitignore。具体使用方式可以参考链接。
避免安装不必要的安装包
为了减少镜像的复杂性、镜像大小和构建时间,应该避免安装无用的包。
每个容器只运行一个进程
一个容器只运行一个进程。容器起到了隔离应用隔离数据的作用,不同的应用运行在不同的容器让集群的纵向扩展以及容器的复用都变的更加简单。需要多个应用交互时请使用 link 命令进行组合或者使用docker-compose。
最小化层数
需要掌握好Dockerfile的可读性和镜像层数之间的平衡。不推荐使用过多的镜像层。
多行命令按字母排序
命令行按字母顺序排序有助于避免重复执行和提高Dockerfile可读性。apt-get update 应与 apt-get install 组合,换行使用反斜杠(\)。例如:
RUN apt-get update && apt-get install -y \
bzr \
cvs \
git \
mercurial \
subversion
构建缓存
Dockerfile的每条指令都会将结果提交为新的镜像。下一条指令基于上一条指令的镜像进行构建。如果一个镜像拥有相同的父镜像和指令(除了 ADD )