多阶段构建

docker-multistage-build

老的方案

在 Docker 17.05 版本之前,我们构建 Docker 镜像时,通常会采用两种方式:

1、全部放入一个 Dockerfile

一种方式是将所有的构建过程编包含在一个 Dockerfile 中,包括编译、测试、打包等流程,这样做的缺点是 Dockerfile 非常大,可维护性低,镜像层次多,镜像体积较大,部署时间变长,且存在源码泄漏风险。

2、分散到多个 Dockerfile

另一种方式,就是我们事先在一个 Dockerfile 将项目及其依赖库编译测试打包好后,再将其拷贝到运行环境中,这种方式需要我们编写两个 Dockerfile 和一些编译脚本才能将其两个阶段自动整合起来,这种方式虽然可以很好地规避第一种方式存在的风险,但明显部署过程较复杂。

使用多阶段构建

为解决以上问题,Docker v17.05 开始支持多阶段构建 (multistage builds)。

使用多阶段构建我们就可以很容易解决前面提到的问题,并且只需要编写一个 Dockerfile

具体实践可以参考微服务实战中的 Dockerfile 多阶段构建教程

其它制作镜像的方式

1、从 rootfs 压缩包导入

docker import [选项] <文件>|<URL>|- [<仓库名>[:<标签>]]

docker import http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz openvz/ubuntu:14.04

2、docker save 和 docker load

Docker 还提供了 docker savedocker load 命令,用以将镜像保存为一个 tar 文件, 然后传输到另一个位置上,再加载进来。(有了 Docker Registry 之后不再推荐这种方式)

上一篇: Dockerfile 常用指令详解

下一篇: 镜像的实现原理