Docker之Docker镜像操作

1.获取镜像

通过使用 docker [image] pull 命令直接从 Docker Hub 镜像源来下载镜像。 该命令的格式为

docker [image] pull NAME [:TAG]

NAME 是镜像仓库名称(用来区分镜像)

TAG 是镜像的标签(往往用来表示版本信息)。

通常情况下, 描述一个镜像需要包括 “名称+标签“ 信息。

对于Docker镜像来说, 如果不显式指定TAG, 则默认会选择latest标签,这会下载仓库中最新版本的镜像。

一般来说, 镜像的latest 标签意味着该镜像的内容会跟踪最新版本的变更而变化, 内容是不稳定的。因此,从稳定性上考虑,不要在生产环境中忽略镜像的标签信息或使用默认的latest 标记的镜像

如果从非官方 的仓库 下载,则 需要在仓库 名称前指定完整的仓库地址。例如从网易蜂巢的镜像源来下载ubuntu:18.04镜像,可以使用如下命令,此时下载的镜像名称为hub.c.163.com/public/ubuntu:18.04

$ docker pull hub.c.163.com/public/ubuntu:18.04

pull 子命令支持的 选项主要包括:

-a, --all-tags=true|false: 是否获取仓库中的所有镜像,默认为否;

--disable-content-trust:取消镜像的内容校验,默认为真。

另外,有时需要使用镜像代理服务来加速Docker 镜像获取 过程 ,可以在Docker服务启动配置中增加--registry-mirror=proxy_URL来指定镜像代理服务地址(如https://registry.docker-en.com)

2.查看镜像信息

1. 使用images命令列出镜像

使用docker images或docker image ls命令可以列出本地主机上已有镜像的基本信息。

来自于哪个仓库,比如ubuntu表示ubuntu系列的基础镜像;

镜像的标答信息,比如 18.04、latest 表示不同的版本信息。标签只是标记,并不能标识镜像内容;

镜像的ID(唯一标识镜像):如果两个镜像的ID相同,说明它们实际上指向了同一个镜像,只是具有不同标签名称而已;

创建时间,说明镜像最后的更新时间;

镜像大小,优秀的镜像往往体积都较小。

images子命令主要支持如下选项, 用户可以自行进行尝试:

-a, --all true | false: 列出所有(包括临时文件)镜像文件,默认为否;

--digestS=true|false: 列出镜像的数字摘要值,默认为否;

-f, --filter=[] : 过滤列出的镜像, 如dangling=rue 只显示没有被使用的镜像;也可指定带有特定标注的镜像等;

--format="TEMPLATE" : 控制输出格式,如.ID代表ID信息,.Repository代表仓库信息等;

--no-trunec=true|false: 对输出结果中太长的部分是否进行截断,如镜像的ID信息,默认为是;

-q, --quiet=true|false: 仅输出ID信息, 默认为否。

其中, 还支持对输出结果进行控制的选项,如-f. --filter=[]、--no-trune=true|false、 -q、 --quie=true|false等。

更多子命令选项还可以通过man docker-images来查看。

2. 使用tag命令添加镜像标签

为了方便在后续工作中使用特定镜像,还可以使用docker tag命令来为本地镜像任

意添加新的标签。 例如,添加 一个新的myubuntu:latest镜像标签:

docker tag ubuntu:latest myubuntu:latest

myubuntu:latest镜像的ID跟ubuntu:latest是完全一致的,它们实际上指向了同一个镜像文件,只是别名不同而巳。docker tag命令添加的标签实际上起到了类似链接的作用。

3.使用inspect命令查看详细信息

使用docker [image] inspect命令可以获取该镜像的详细信息,包括制作者、 适应架构、各层的数字摘要等:

4.使用 history 命令查看镜像历史

既然镜像文件由多个层组成,那么怎么知道各个层的内容具体是什么呢?这时候可以使用history子命令, 该命令将列出各层的创建信息。

注意, 过长的命令被自动截断了, 可以使用前面提到的 --no-trunc 选项来输出完整命令。

3.搜索镜像

使用 docker search 命令可以搜索Docker Hub 官方仓库中的镜像。 语法为 docker search [option] keyword。

支持的命令选项主要包括:

-f, --filter filter: 过滤输出内容;

--format string: 格式化输出内容;

--limit int:限制输出结果个数, 默认为 25 个;

--no-trunc: 不截断输出结果。

返回了很多包含关键字的镜像,其中包括镜像名字、描述、收藏数(表示该镜像的受欢迎程度)、是否官方创建、是否自动创建等。默认的输出结果将按照星级评价进行排序

4.删除和清理镜像

1 使用标签删除镜像

使用 docker rmi 或 docker image rm 命令可以删除镜像, 命令格式为 docker rmi IMAGE [IMAGE ... ], 其中 IMAGE 可以为标签或 ID。

支持选项包括:

-f, -force: 强制删除镜像, 即使有容器依赖它;

-no-prune: 不要清理未带标签的父镜像。

当同一个镜像拥有多个标签的时候,docker rmi 命令只是删除了该镜像多个标签中的指定标签而巳,并不影响镜像文件。

2. 使用镜像ID来删除镜像

当使用 docker rmi 命令,并且后面跟上镜像的 ID (也可以是能进行区分的部分ID串前缀)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。

如果要想强行删除镜像, 可以使用-f参数;

通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。 正确的做法是,先删除依赖该镜像的所有容器, 再来删除镜像。

3. 清理镜像

使用Docker 一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune命令来进行清理。

支待选项包括:

-a, -all: 删除所有无用镜像, 不光是临时镜像;

-filter filter: 只清理符合给定过滤器的镜像;

-f, -force: 强制删除镜像, 而不进行提示确认。

5.创建镜像

1.基于已有容器创建

该方法主要是使用 docker [container] commit命令。

命令格式为 docker [container] commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]], 主要选项包括:

-a, --author=" ": 作者信息;

-c, --change=[] : 提交的时候执行 Dockerfle指令, 包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等;

-m, --message=" ": 提交消息;

-p, --pause=true: 提交时暂停容器运行。

2.基于本地模板导入

用户也可以直接从一个操作系统模板文件导人一个镜像,主要使用 docker [container] import 命令。 命令格式为 docker [image] import [OPTIONS] file|URL|-[REPOSITORY[:TAG ] ]

要直接导入一个镜像,可以使用 OpenVZ 提供的模板来创建,或者用其他已导出的镜像模板来创建。 OPENVZ 模板的下载地址为http://openvz.org/Download/templates/precreated 。

3.基于Dockerfile创建

基于Dockerfile创建是最常见的方式。Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。

创建镜像的过程可以使用 docker [image] build 命令,编译成功后本地将多出一个python:3 镜像:

6.存出和载入镜像

1. 存出镜像

如果要导出镜像到本地文件,可以使用 docker [image] save 命令。该命令支持-o、-output string参数,导出镜像到指定的文件中 。

例如,导出本地的 ubuntu:18.04 镜像为文件 ubuntu_18.04.tar ,如下所示 :

之后,用户就可以通过复制 ubuntu 18.04.tar 文件将该镜像分享给他人。

2.载入镜像

可以使用 docker [image] load 将导出的 tar 文件再导人到本地镜像库。支持 -i、-input string 选项,从指定文件中读入镜像内容。

7.上传镜像

可以使用 docker [image] push 命令上传镜像到仓库,默认上传到 Docker Hub 官方仓库(需要登录)。命令格式为 docker [image]push NAME [:TAG] | [REGISTRY_HOST [ :REGISTRY_PORT] / ]NAME [:TAG ] 。

用户在 Docker Hub 网站注册后可以上传自制的镜像 。

例如,用户user上传本地的 test:latest 镜像,可以先添加新的标签 user/test:latest,然后用 docker [image ] push 命令上传镜像 :

第一次上传时,会提示输入登录信息或进行注册,之后登录信息会记录到本地~/.docker目录下。

转载自:https://my.oschina.net/u/4346143/blog/4697095

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342