第一节实验中咱们已经接触了一些镜像的概念,简单的说镜像就是一个容器的只读模板,用来建立容器。当运行容器时须要指定镜像,若是本地没有该镜像,则会从Docker Registry下载。默认查找的是Docker Hub。Docker的镜像是增量的修改,每次建立新的镜像都会在老的镜像上面构建一个增量的层
,使用到的技术是Another Union File System(AUFS)
,感兴趣的同窗能够学习文档InfoQ:剖析Docker文件系统:Aufs与Devicemapper(http://www.infoq.com/cn/articles/analysis-of-docker-file-system-aufs-and-devicemapper/)。docker
本节中,咱们须要依次完成下面几项任务:ubuntu
镜像存储中的核心概念仓库(Repository)是镜像存储的位置。Docker 注册服务器(Registry)是仓库存储的位置。每一个仓库包含不一样的镜像。vim
好比一个镜像名称 ubuntu:14.04
,冒号前面的ubuntu
是仓库名,后面的14.04
是TAG,不一样的TAG能够对应相同的镜像,TAG一般设置为镜像的版本号。bash
Docker Hub 是Docker官方提供公共仓库,提供大量的经常使用镜像,因为国内网络缘由常常链接Docker Hub会比较慢,因此咱们也能够选择一些国内提供相似Docker Hub镜像服务站点。链接Docker Hub的经常使用命令包括:服务器
docker search
docker pull
本节实验中,咱们须要一个busybox镜像,首先首先进行搜索,而后使用docker pull
下载到本地:网络
查找到的数据中包含仓库名称,描述,以及有多少人关注。咱们只须要下载最基本的Busybox base image
就能够。app
查找命令返回的结果中一般能够看到不一样版本的busybox,不指定版本号默认下载busybox:latest
。编辑器
使用 docker pull
命令将镜像下载到本地:学习
咱们也能够在Docker Hub上建立一个帐户,用来保存所需的镜像,可是在国内使用实在是太慢了。这里简单介绍下Docker中使用命令登录Docker Hub保存镜像的方式:ui
docker push
命令推送到Docker Hub上此外,Docker Hub提供一个强大的自动建立镜像的功能,能够设定跟踪某个镜像中安装的软件,若是有更新则自动从新构建新的镜像。更多有趣的功能能够登陆到Docker Hub 官网进行体验。在此不作更多介绍。
若是想建立一个本地的Docker Hub,在后续实验中咱们会学习如何在本地搭建一个Registry
服务器。
2、建立镜像
一、下载镜像 docker pull
在本地建立镜像的方法有几种,最简单的是直接从Registry
服务器上下载。上一节实验中已经有介绍:
镜像下载中能够看到是分层下载,每一层都有一个惟一的ID值表示,每层下载的大小实际为该层进行的修改增量。
后续章节中咱们会详细介绍Dockerfile的编写,这里仅仅介绍最简单的使用。
Dockerfile 能够很方便的基于已有镜像建立新的镜像。Dockerfile文件里包含若干条命令,每一个命令都会建立一个新的层,Dockerfile建立的层数不能够超过127层。
回顾下先前实验中咱们的一个最简单的Dockerfile实例:
Dockerfile的详细编写方法咱们后续有专门的实验介绍,此处只写一个最简单的Dockerfile来介绍。
使用 vim 或 gedit 打开一个文件 Dockerfile
:
$ cd /home/shiyanlou/ $ mkdir shiyanlouimage $ cd shiyanlouimage/ $ vim Dockerfile
在文件中输入如下内容:
from ubuntu:latest
ENV HOSTNAME=shiyanlou
保存退出编辑器。
这个 Dockerfile
中只有两行,第一行表示基于哪一个镜像建立新的镜像,相似于程序开发中的 import
或 include
,咱们这里以 ubuntu:latest
镜像为基础建立新的镜像。第二行是在新的镜像中咱们要对基础镜像 ubuntu:latest
作的改变。这句是设置一个环境变量HOSTNAME
等于shiyanlou
。
完成 Dockerfile 后,使用 docker build
命令进行构建:
$ cd /home/shiyanlou/shiyanlouimage/
$ docker build -t shiyanlou .
这个命令中第一个参数 -t shiyanlou
指定建立的新镜像的名字,第二个参数是一个点 .
指定从当前目录查找 Dockerfile 文件。
命令执行过程截图:
执行完成后咱们 docker images
命令中就能够看到新的 shiyanlou
镜像了。
咱们如今运行这个 shiyanlou 镜像并进入到bash环境:
$ docker run -t -i shiyanlou /bin/bash
进入到bash后,咱们查看镜像是否已经设置了HOSTNAME
环境变量:
$ echo $HOSTNAME
三、其余方法
建立镜像的方法不少,除了上述两种以外还可使用下述方法进行建立,每种方法都会在本节或其余章节实验中学习:
docker import
docker commit
docker load
3、查看镜像信息
一、基本命令 docker images
docker images
命令查看本地的镜像列表,信息包括:
latest
其中须要注意的是运行容器时候若是不指定镜像的TAG,则默认为latest。镜像的惟一标识符是镜像ID,不是TAG,有的时候同一个镜像能够有不一样的TAG,但实际指向的是同一个镜像ID。TAG能够理解为镜像的别名。
查看当前系统中存储的全部镜像信息:
二、查看镜像详细信息 docker inspect
docker inspect
能够查看指定镜像的详细信息。这条命令能够查看容器或镜像的详细信息,输出是一个JSON格式的内容,比较重要的信息是建立时间,启动命令等:
能够看到输出的信息很是多,若是想查看其中的一项,只须要使用-f {{}}
指定便可:
4、导出及导入镜像
与容器的导出和导入相似(请回忆相关命令),镜像能够被导出到本地文件,也能够从本地文件中加载。导出命令是docker save
命令,导出后的镜像若是须要导入到新的Docker 服务器,则使用docker load
命令。
导出的镜像文件是/home/shiyanlou/busybox.tar
,能够拷贝到其余Docker服务器上进行导入:
5、更新及删除镜像
一、更新镜像 docker commit
若是须要对镜像进行更新的话,一种方法是建立容器,在容器中进行修改,而后将修改后容器提交到镜像中。提交使用 docker commit
命令。
注意:本方法不推荐用在生产系统中,将来会很难维护镜像。最好的建立镜像的方法是Dockerfile,修改镜像的方法是修改Dockerfile,而后从新从Dockerfile中构建新的镜像。
本实验中,咱们首先基于shiyanlou镜像建立一个容器:
docker run -t -i --name updateimage shiyanlou /bin/bash
进入到容器中进行修改,建立三个新的文件夹,而后退出容器:
docker diff
查看修改的内容:
docker commit
命令将修改后的内容提交到本地,另存为镜像newshiyanlou
几个参数的说明:
若是指定了目标镜像,Docker会建立新的镜像。相似咱们修改一个word文档后进行的另存为
二、删除镜像 docker rmi
docker rmi
命令能够删除本地的镜像,删除前须要先使用docker rm
删除全部依赖该镜像的容器。
docker rmi -f
能够强制删除存在容器依赖的镜像,但这不是一个好习惯,请先删除容器再清理镜像。
请务必保证本身可以动手完成整个实验,只看文字很简单,真正操做的时候会遇到各类各样的问题,解决问题的过程才是收获的过程。