Docker镜像管理

Docker的镜像是增量的修改,每次创建新的镜像都会在老的镜像上面构建一个增量的,使用到的技术是Another Union File System(AUFS)。

要创建一个Docker的镜像,可以通过:

1 从Docker Hub 下载

2 通过Dockerfile创建

3 通过 docker import来导入一个容器快照而生成一个新的镜像

4 通过 docker commit 提交对容器的修改生产一个新的镜像

5 通过 docker load 来导入一个保存的镜像文件

 

使用Docker Hub 查找和下载镜像

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

搜索镜像 docker search
下载镜像 docker pull

 

通过Dockerfile创建镜像

Dockerfile文件里包含若干条命令,每个命令都会创建一个新的层,Dockerfile创建的层数不可以超过127层。

下面是官方网站上的一个Dockerfile sample

FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay

创建好Dockerfile之后可以通过Docker build来创建image

$ docker build --help
Usage:    docker build [OPTIONS] PATH | URL | -
Build an image from a Dockerfile

比如 docker build -t imagename:tagname .

 

查看本地镜像

docker images 命令查看本地的镜像列表,信息包括:
    REPOSITORY:仓库名称
    TAG:标签名,一个仓库可以有若干个标签对应不同的镜像,默认都是latest
    IMAGE ID:镜像ID
    CREATED:创建时间,注意不是本地的pull时间
    SIZE:镜像大小

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

 

查看镜像详细信息 docker inspect

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

常用的参数是--format, -f, 用来指定输出的格式,比如:

获取instance的log path

docker inspect --format='{{.LogPath}}' $INSTANCE_ID

 

导出及导入镜像

镜像可以被导出到本地文件,也可以从本地文件中加载。导出命令是 docker save 命令,导出后的镜像如果需要导入到新的Docker 服务器,则使用docker load命令。

docker save

可以用于备份一个镜像,用法如下:

$ docker save busybox > busybox.tar
$ ls -sh busybox.tar

$ docker save --output busybox.tar busybox
$ ls -sh busybox.tar

$ docker save -o fedora-all.tar fedora

$ docker save -o fedora-latest.tar fedora:latest

 

docker load

从STDIN或者tar 包加载一个镜像

$ docker load < busybox.tar.gz

$ docker load --input fedora.tar

 

注意:用户既可以使用 docker load 来导入镜像存储文件到本地镜像库,也可以使用 docker import 来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

更新/删除镜像

docker commit

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

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

docker commit -m 'add 3 dirs' -a 'author' -p updateimage newimage

几个参数的说明:

  • -m 本次提交的描述
  • -a 指定镜像作者信息
  • -p 提交时暂停容器运行
  • 容器的ID或名称
  • 目标镜像

如果指定了目标镜像,Docker会创建新的镜像。

 

docker rmi

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

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

posted @ 2017-02-23 17:16  LCdre  阅读(2002)  评论(0编辑  收藏  举报