Docker实战(三)镜像管理

日期:2016年04月28日 作者: 分类:运维 浏览:7048

简单的说镜像就是一个容器的只读模板,用来创建容器。当运行容器时需要指定镜像,如果本地没有该镜像,则会从Docker Registry下载。默认查找的是Docker Hub。Docker的镜像是增量的修改,每次创建新的镜像都会在老的镜像上面构建一个增量的层,使用到的技术是Another Union File System(AUFS)。

一、使用 Docker Hub

镜像存储中的核心概念仓库(Repository)是镜像存储的位置。Docker 注册服务器(Registry)是仓库存储的位置。每个仓库包含不同的镜像。

比如一个镜像名称 ubuntu:14.04,冒号前面的ubuntu是仓库名,后面的14.04是TAG,不同的TAG可以对应相同的镜像,TAG通常设置为镜像的版本号。

Docker Hub 是Docker官方提供公共仓库,提供大量的常用镜像,由于众所周之的原因经常连接Docker Hub会比较慢,所以我们也可以选择一些国内提供类似Docker Hub镜像服务站点。连接Docker Hub的常用命令包括:

# 搜索镜像
docker search ...

# 下载镜像
docker pull ...

我们需要一个busybox镜像,首先首先进行搜索,然后使用docker pull下载到本地:

Docker镜像管理

查找到的数据中包含仓库名称,描述,以及有多少人关注。我们只需要下载最基本的Busybox base image就可以。

查找命令返回的结果中通常可以看到不同版本的busybox,不指定版本号默认下载busybox:latest。

二、创建镜像

创建镜像的方法有多种,最简单的是直接从Registry服务器上下载,就是上节中的 docker pull 命令,还有就是本系列容器管理中学过的 docker import

这里介绍最常用的Dockerfile。Dockerfile 可以很方便的基于已有镜像创建新的镜像。Dockerfile文件里包含若干条命令,每个命令都会创建一个新的层,Dockerfile创建的层数不可以超过127层。

使用 vim 或 gedit 打开一个文件 Dockerfile:

cd ~
mkdir image
cd image/
vim Dockerfile

在文件中输入以下内容:

from ubuntu:latest
ENV HOSTNAME=test

保存退出编辑器。

这个 Dockerfile 中只有两行,第一行表示基于哪个镜像创建新的镜像,类似于程序开发中的 import 或 include,我们这里以 ubuntu:latest 镜像为基础创建新的镜像。第二行是在新的镜像中我们要对基础镜像 ubuntu:latest 做的改变。这句是设置一个环境变量HOSTNAME等于test。

完成 Dockerfile 后,使用 docker build 命令进行构建:

cd ~/image
docker build -t testimage .

这个命令中第一个参数 -t testimage 指定创建的新镜像的名字,第二个参数是一个点 . 指定从当前目录查找 Dockerfile 文件。

命令执行过程截图:

Docker镜像管理

我们现在运行这个 testimage 镜像并进入到bash环境:

Docker镜像管理

三、查看镜像信息

docker images 命令查看本地的镜像列表,信息包括:

  1. REPOSITORY:仓库名称
  2. TAG:标签名,一个仓库可以有若干个标签对应不同的镜像,默认都是latest
  3. IMAGE ID:镜像ID
  4. CREATED:创建时间,注意不是本地的pull时间
  5. SIZE:镜像大小

其中需要注意的是运行容器时候如果不指定镜像的TAG,则默认为latest。镜像的唯一标识符是镜像ID,不是TAG,有的时候同一个镜像可以有不同的TAG,但实际指向的是同一个镜像ID。TAG可以理解为镜像的别名。

Docker镜像管理

docker inspect 可以查看指定镜像的详细信息。

这条命令可以查看容器或镜像的详细信息,输出是一个JSON格式的内容,比较重要的信息是创建时间,启动命令等:

Docker镜像管理

可以看到输出的信息非常多,如果想查看其中的一项,只需要使用-f {{}} 指定即可:

Docker镜像管理

四、导入及导出镜像

与容器的导出和导入类似(请回忆相关命令),镜像可以被导出到本地文件,也可以从本地文件中加载。导出命令是 docker save 命令,导出后的镜像如果需要导入到新的Docker 服务器,则使用docker load命令。

Docker镜像管理

导出的镜像文件,可以拷贝到其他Docker服务器上进行导入:

Docker容器管理

五、更新及删除镜像

镜像更新

如果需要对镜像进行更新的话,一种方法是创建容器,在容器中进行修改,然后将修改后容器提交到镜像中。提交使用 docker commit命令。

注意:本方法不推荐用在生产系统中,未来会很难维护镜像。最好的创建镜像的方法是Dockerfile,修改镜像的方法是修改Dockerfile,然后重新从Dockerfile中构建新的镜像。

此处不作演示,可以自己尝试,使用Dockerfile构建镜像的详细教程会后续更新。

镜像删除

docker rmi 命令可以删除本地的镜像,删除前需要先使用docker rm 删除所有依赖该镜像的容器。

docker rmi -f 可以强制删除存在容器依赖的镜像,但这不是一个好习惯,请先删除容器再清理镜像。

Docker镜像管理

 

PS:本Docker实战教程系列中使用的操作系统是基于Debian的LMDE2,教程中的命令均已运行测试,如有雷同,我抄你的!!!

标签:

除非注明,戊辰人博客文章均为原创,转载请以链接形式标明本文地址

本文地址:https://wanglu.info/2016/04/1159.html