跳转至

docker 镜像构建

镜像概述

Docker 镜像是Docker容器技术中的核心,也是应用打包构建发布的标准格式。一个完整的镜像可以支撑多个容器的运行,在Docker的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务。 如果想要把已经安装的服务容器进行迁移,就需要把环境以及部署的服务生成新的镜像。

镜像构建方式

1、基于已有的容器创建镜像 2、基于本地模板创建镜像 3、基于Dockerfile创建镜像

镜像构建案例

3.1、基于已有容器创建镜像 基于现有镜像创建主要使用 docker commit 命令,即把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。

命令格式:

docker commit [选项] 容器ID/名称 仓库名称:[标签] 

常用选项:(-m 说明信息;-a 作者信息;-p 生成过程中停止容器的运行。)

首先启动一个镜像,在容器里做相应的修改,然后将修改后的容器提交为新的镜像。需要记住该容器的ID号。

基于Dockerfile构建镜像

3.3.1、Docker 镜像结构 镜像并不是一个单一的文件,而是由多层堆叠构成。可以通过docker history 命令查看镜像中各层的内容和大小,每层对应着Dockerfile 构建时的一条指令。Docker镜像默认存储在/var/lib/docker/目录中。容器其实是在镜像的最上面加了一层读写层,在运行容器中做的任何文件改动,最终都会写到这个读写层。如果删除了容器,也就是删除了这个读写层,文件改动也就会丢失了。Docker使用存储驱动管理镜像每层内容及可读写层的容器层。

Docker镜像特点:

  1. Dockerfile中的每个指令都会创建一个新的镜像层;
  2. 镜像层可以被缓存和复用;
  3. 当Dockerfile中的指令被修改、复制的文件发生变化或者构建镜像时指定的变量值更换了,那么对应的镜像层缓存也将会失效;
  4. 某一层的镜像缓存失效,它之后的镜像层缓存都会失效; 镜像层是不可变的,如果在某一层中添加一个文件,然后在某一层中删除它,则镜像中依然会包含该文件,只是这个文件在Docker容器中不可见了。
回到页面顶部