什么是镜像
docker镜像就是一个只读的模板,一种轻量级,可执行的独立软件包,包含运行某个软件所需要的所有内容,将应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件,只有通过这个镜像文件才能创建docker容器运行时的实例,容器和镜像的关系类似于java中对象和类的关系。
docker镜像层是只读的,而容器层是可写的,当容器启动时,一个新的可写层会被加载到镜像的顶部,这一层被称做是“容器层”,“容器层”之下叫做“镜像层”。
对于容器的改动,无论是添加,删除,还是修改文件都只会发生在容器中。
镜像的加载原理
docker的镜像是分层的,每个镜像都有很多层构成,使用UnionFS将这些不同的层结合到一个镜像中去。
UnionFS有两个用途:一方面可以借助LVM、RAID将多个Disk挂载到同一个目录下,另一个更常用的就是将一个只读的分之和一个可写的分支联合到一起,Live CD正是基于此方法可以允许在镜像不变的基础上允许用户在其上进行一些写操作。
镜像的基本操作
镜像的获取
docker pull ubuntu
可以指定具体的版本号
docker pull ubuntu:[版本号]
从Docker Hub仓库下载一个ubuntu操作系统镜像
列出所有镜像
使用docker images 显示本地已有的镜像。
REPOSITORY:来源于哪个仓库,比如ubuntu。
TAG:镜像的标记。
IMAGE ID:他的ID号,唯一。
CREATED:创建时间
SIZE:镜像大小
tag 14.04和tag trusty的imageID是一样的,说明他们是同一个镜像。
创建镜像
1、将一个容器提交成一个镜像,比如从启动一个ubuntu容器之后,然后将这个容器提交成一个镜像文件。
启动一个ubuntu容器:
docker run --name ubuntu_vim -it ubuntu:latest /bin/bash
--name:给当前容器设置一个名字
-i:保持标准输入开放,即使没有附加。这允许你和容器进行交互。大多数情况下,当你希望和容器的进程进行交互的时候,会使用到-i。
-t:为容器分配一个伪终端或者终端。通常和 `-i` 一起使用,提供一个完整的交互式shell环境。当容器运行一个shell并与之交互的时候,会使用-t选项。
-i -t:这两个一起使用,为容器提供了一个交互式的shell环境。
给容器添加一个vim
其中的04fe941df521
就是容器的ID,这个ID在commit的时候会用到。
提交镜像的命令
docker commit -m 'add vim' -a 'user information' 04fe941df521 vimubuntu:1.0.0
参数说明:
-m:指定提交的说明信息,跟我们使用的版本控制工具一样;
-a:指定更新的用户信息;
之后是容器ID,然后是仓库名称:版本号
存储和载入镜像
存储镜像就是导出镜像到本地文件,可以使用docker save
命令:
载入镜像可以使用docker load 从导出的本地文件中在导入到本地镜像库:
docker load --input [fileName]
或者使用:
docker load < [filename]
移除镜像
移除镜像命令:
docker rmi [repository]:[version]
如果不加version的话,那么version就是latest
-f:强制移除