Docker学习之镜像操作
使用Docker镜像
以下都是Docker镜像的一系列重要名操作,包括获取、查看、搜索、删除、创建、存出或载入、上传等。可使用docker image help命令查看帮助。
1.获取镜像(pull)
使用pull子命令下载镜像
格式为: docker [image] pull NAME[:TAG],其中,NAME是镜像仓库名称,用以区分镜像,
TAG是镜像的标签,往往用来表示版本信息,如果不显示指定TAG,则默认为latest标签,这会下载仓库中最新版本的镜像。例如获取一个centos系统的基础镜像可以使用如下的命令:
$ docker pull centos
sudo docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a02a4930cb5d: Pull complete
Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
Status: Downloaded newer image for centos:latest
镜像文件一般由若干层(layer)组成,每一层都对应一个唯一的id(完整的id包括256比特,64个十六进制字符组成)
docker默认是从官方仓库下载镜像,官方的镜像注册服务器可省略。
docker pull ubuntu:18.04命令相当于:
docker pull registry.hub.docker.com/ubuntu:18.04
如果从其他地址下载,需要填写镜像注册服务器地址,例如从网易蜂巢的镜像源来下载ubuntu18.04镜像:
docker pull hub.c.163.com/public/ubuntu:18.04
pull子命令支持的选项主要包括:
-a, --all-tags=true|false: 是否获取镜像中的所有镜像,默认为否;
--disable-content-trust: 取消镜像的内容校验,默认为真
--registry-mirror=proxy_url:指定镜像代理服务地址(如:https://registry.docker-cn.com)
使用centos镜像创建一个容器,并在其中运行bash应用:
$ docker run -it centos
[root@5797962d59c1 /]# echo "Hello World"
Hello World
[root@5797962d59c1 /]#
2. 查看镜像(images & tag & inspect & history)
使用Docker镜像的images、tag、inspect和history子命令。
使用images命令列出镜像
使用docker images或docker image ls命令,可以列出本地主机上已有镜像的基本信息。$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 1e1148e4cc2c 3 months ago 202MB
各字段详细描述如下:
REPOSITORY:来源于哪个仓库,比如ubuntu表示ubuntu系列的基础镜像
TAG:镜像的标签信息,比如18.04、latest表示不同的版本信息
IMAGE ID:镜像ID(唯一标识镜像),如果两个镜像的ID相同,则它们指向同一个镜像,只是具有不同标签名。
CREATE:创建时间,说明镜像最后的最新时间
SIZE:镜像大小使用tag命令添加镜像标签
$ sudo docker tag centos:latest mycentos:latest
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 1e1148e4cc2c 3 months ago 202MB
mycentos latest 1e1148e4cc2c 3 months ago 202MB
使用inspect命令查看详细信息
使用docker [image] inspect 命令可以获取该镜像的详细信息,包括作者、适应架构、各层的数字摘要等。$ sudo docker inspect centos
[
{
"Id": "sha256:1e1148e4cc2c148c6890a18e3b2d2dde41a6745ceb4e5fe94a923d811bf82ddb",
"RepoTags": [
"centos:latest"
],
"RepoDigests": [
"centos@sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426"
],
"Parent": "",
"Comment": "",
"Created": "2018-12-06T00:21:07.135655444Z",
"Container": "1fdbb0fcc184eb795364f7aa5fdc00299d0a2b90d8e26b4696217c22da7f983f",
"ContainerConfig": {
...
},
"DockerVersion": "17.06.2-ce",
"Author": "",
"Config": {
...
},
"Architecture": "amd64",
"Os": "linux",
"Size": 201779604,
"VirtualSize": 201779604,
"GraphDriver": {
"Data": {
"MergedDir": "/var/lib/docker/overlay2/b46b82dcbe576848eb5ab37f99d47a6053ea31fab8561bc2fd80b3157a82f774/merged",
"UpperDir": "/var/lib/docker/overlay2/b46b82dcbe576848eb5ab37f99d47a6053ea31fab8561bc2fd80b3157a82f774/diff",
"WorkDir": "/var/lib/docker/overlay2/b46b82dcbe576848eb5ab37f99d47a6053ea31fab8561bc2fd80b3157a82f774/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:071d8bd765171080d01682844524be57ac9883e53079b6ac66707e192ea25956"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
docker [image] inspect centos返回的是一个JSON格式的消息,如果只需要其中一项内容时,可以使用-f子命令指定,
例如,获取镜像的Architecture:$ docker [image] inspect -f {{.Architecture}} centos
amd64
使用history命令查看镜像历史
history子命令,可以查看镜像各层的创建信息$ docker history centos
IMAGE CREATED CREATED BY SIZE COMMENT
e1148e4cc2c 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<\missing> 3 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<\missing> 3 months ago /bin/sh -c #(nop) ADD file:6f877549795f4798a… 202MB
可使用history子命令--no-trunc查看被截短的命令
3. 搜寻镜像(search)
使用search子命令搜索镜像
语法为:docker search [option] keyword。支持的命令选项可以通过docker search "-" + "TAB"提示补充。$ docker search [option] keyword
4. 删除和清理镜像(rmi & rm)
使用标签删除镜像
使用docker rmi或docker image rm命令可以删除镜像,命令格式为docker rmi IMAGE [IMAGE...],其中IMAGE可以为标签或ID$ docker rmi IMAGE [IMAGE...]
$ docker image rm label IMAGE [IMAGE...] 支持的选项有:
-f, -force: 强制删除镜像,即使有容器依赖它
-no-prune: 不要清理未带标签的父镜像
当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像多个标签中的指定标签而已,并不影响镜像文件。
当镜像只剩下一个标签的时候,docker rmi命令会删除这个镜像文件的所有文件层使用镜像ID来删除镜像
先使用docker rm id删除容器,然后再使用docker rmi id删除镜像。$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
210a3d3375d4 ubuntu:18.04 "/bin/bash" 7 seconds ago Exited (0) 3 seconds ago brave_bardeen $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 47b19964fb50 4 weeks ago 88.1MB $ docker rm 210a3d3375d4
210a3d3375d4 $ docker rmi 47b19964fb50
Untagged: ubuntu:18.04
Untagged: ubuntu@sha256:7a47ccc3bbe8a451b500d2b53104868b46d60ee8f5b35a24b41a86077c650210
Deleted: sha256:47b19964fb500f3158ae57f20d16d8784cc4af37c52c49d3b4f5bc5eede49541
Deleted: sha256:d4c69838355b876cd3eb0d92b4ef27b1839f5b094a4eb1ad2a1d747dd5d6088f
Deleted: sha256:1c29a32189d8f2738d0d99378dc0912c9f9d289b52fb698bdd6c1c8cd7a33727
Deleted: sha256:d801a12f6af7beff367268f99607376584d8b2da656dcd8656973b7ad9779ab4
Deleted: sha256:bebe7ce6215aee349bee5d67222abeb5c5a834bbeaa2f2f5d05363d9fd68db41
当有容器运行时,使用docker -rmi id删除容器是无法成功的,如果想强制删除使用-f参数。一般推荐使用以上方法,
先删除镜像对应的所有容器,然后再删除镜像。清除镜像
使用Docker一段时间后,系统中可异能遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过命令清理:docker image prune 支持的选项有:
-a, -all:删除所有无用镜像,不光是临时镜像;
-filter filter:只清理复合给定过滤器的镜像;
-f, -force:强制删除镜像,而不进行提示确认;
5. 创建镜像(commit & import & Dockerfile)
创建镜像的方法有三种:基于已有的容器创建、基于本地模板导入、基于Dockerfile创建
基于已有容器创建(commit子命令)
该方法主要是使用docker commit命令
命令格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
支持选项:
-a, --author="": 作者信息;
-c, --change=[]: 提交的时候执行Dokerfile指令,包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR等
-m, --message="": 提交消息;
-p, --pause=true: 提交时暂停容器运行 实例如下:
$ docker run -it ubuntu:18.04 /bin/bash
root@25b742d78f24:/# touch test
root@25b742d78f24:/# exit
当前容器相比于原ubuntu:18.04镜像,已经发生了改变,可以使用docker commit命令来提交为一个新的镜像。
$ docker [container] commit -m "Added a new file" -a "thekernel@163.com" 25b742d78f24:1.0.0
sha256:59fc18f43457af8ba1084094f1c7b33edb7a0d263409fb0912ba280fdd1a30ca $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1.0.0 59fc18f43457 17 seconds ago 88.1MB
ubuntu 18.04 47b19964fb50 4 weeks ago 88.1MB
ubuntu latest 47b19964fb50 4 weeks ago 88.1MB
基于本地模板导入(import子命令)
可以直接从一个操作系统模板文件导入一个镜像,使用docker import命令,命令格式:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
要直接导人一个镜像,可以使用 OpenVZ 提供的模板来创建,或者用其他已导出的镜像模板来创建 。
OPENVZ 模板的下载地址为 http://openvz.org/Download/templates/precreated。例如,下载了 ubuntu-18.04 的模板压缩包,之后使用以下命令导人即可:
$ cat ubuntu-18.04-x86_64-minimal.tar.gz | docker import - ubuntu:18.04
然后查看新导入的镜像,已经在本地存在了:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 18.04 47b19964fb50 4 weeks ago 88.1MB
基于Dockerfile创建
基于Dockerfile创建是常见的方式。Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。
见其他章节详解。
6. 存出和载入镜像(save & load)
Docker镜像的save和load命令。
存出镜像
如果要导出镜像到本地文件,可以使用docker [image] save命令,支持 -o、-output string参数,导出镜像到指定的文件中。导出本地的ubuntu:18.04镜像到文件ubuntu_18.04.tar:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 1.0.0 59fc18f43457 3 hours ago 88.1MB
ubuntu 18.04 47b19964fb50 4 weeks ago 88.1MB
ubuntu latest 47b19964fb50 4 weeks ago 88.1MB $ docker save -o ubuntu_18.04.tar ubuntu:18.04
至此,可以将ubuntu_18.04.tar分享给别人。
载入镜像
可以使用docker [image] load将导出的tar文件再导入到本地镜像库。支持-i、-input string选项,从指定文件中读入镜像内容。例如,从文件ubuntu_18.04.tar导入镜像到本地镜像列表,如下所示:
$ docker load -i ubuntu_18.04.tar
或者
$ docker load < ubuntu_18.04.tar
这将导入镜像及其相关的元数据信息(包括标签等)。导入成功后,可以使用docker images命令进行查看,与原镜像一致。
7. 上传镜像(push)
上传镜像
可以使用docker [image] push 命令上传镜像到仓库,默认上传到Docker Hub官方仓库(需要登录)。命令格式:docker [image] push NAME[:TAG],或者上传到非官方仓库
docker [image] push [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG] 例如:用户user上传本地的test:latest镜像,可以先添加新的标签user/test:latest,然后用docker [image] push命令上传镜像:
$ docker tag test:latest user/test:latest
$ docker push user/test:latest
第一次上传时,会提示输入登录信息或进行注册,之后登录信息会记录到本地~/.docker目录下
Docker学习之镜像操作的更多相关文章
- Docker 学习之镜像导入导出及推送阿里云服务器(三)
在前面两节里主要就是记录一些docker的基本的操作,包括搜索镜像,拉取镜像,根据镜像创建容器等等,在这一节主要就是记录Docker对于镜像文件的导入导出,及推送到阿里云再从阿里云获取镜像. 一.镜像 ...
- 4.docker学习之镜像
镜像 我们知道,我们想在Windows操作系统上跑Linux,需要安装一个虚拟机程序,然后下载一个Linux镜像,在该虚拟机程序中创建一个虚拟机,并使用该镜像安装对应的Linux操作系统,安装好之后, ...
- docker学习构建镜像---第三章节
一.docker镜像使用 运行docker容器时,使用的镜像如果在本地不存在,docker会自动从docker镜像仓库中下载,默认是从docker hub公共镜像源下载 在这里,我们需要了解:管理和使 ...
- Docker学习以及镜像制作流程
一.何为Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...
- 【Docker】docker 的常用命令&操作
一.在linux虚拟机上安装docker XShell1:检查内核版本,必须是3.10及以上 uname -r2:安装docker yum install docker3:输入y确认安装4:启动doc ...
- Docker学习(二)docker镜像操作
上一篇:docker学习(一)在centos7上安装docker 列出所有docker镜像 docker images 拉取镜像 docker pull 镜像名 我这里一Tomact为例 首先在Doc ...
- Docker学习笔记(2)-docker镜像操作
本节将会涉及Docker的镜像操作. 1. 获取镜像 如何获取Docker Hub上的镜像?可通过docker pull命令获取,其格式为: docker pull [选项] [Docker Regi ...
- docker学习(4) 一些常用操作
继续docker的学习之旅,今天练习一些常用的命令: 一.镜像相关 1.1 列出本机所有镜像 docker images 后面的操作,都以ubuntu做为练习的目标. 另外:如果某些镜像文件不想要了, ...
- Docker容器学习梳理 - 日常操作总结
使用Docker已有一段时间了,今天正好有空梳理下自己平时操作Docker时的一些命令和注意细节: Docker 命令帮助 $ sudo docker Commands: attach Attach ...
随机推荐
- pat1068. Find More Coins (30)
1068. Find More Coins (30) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Eva l ...
- c++ 面试整理
1. 继承方式 public 父类的访问级别不变 protected 父类的public成员在派生类编程protected,其余的不变 private 父类的所有成员变成pr ...
- weblogic 10.3.5重置密码
weblogic 10.3.5重置密码 热度1,609 ℃ 时间:2013-12-26 10:26 分类:middleware 评论数:0 条 0 weblogic默认验证密码机制:如 ...
- C#Winform中ToolTip的简单用法,
ToolTip它能够为我们的软件提供非常漂亮的提示信息,提高软件的可用性,给用户比较好的体验. 使用,在窗体加载时加载以下代码: var toolTip1 = new ToolTip(); toolT ...
- 拿到返回值,Callable示例
- ps_cc:制作sprite拼贴图片
我们的目标是: 将 合并为一张图片 step1:制作动作,便于批处理和重复使用 首先随便新建空白文档(建议:90x300px) 录制动作,alt+F9 上图中,可以新建分组前端,再新建动作 ...
- Conferences
中国学术会议在线 :http://www.meeting.edu.cn 中国会议网: http://www.chinameeting.com 香山科学会议:http://www.xssc.ac.cn/ ...
- Android中快速实现自定义字体!
前言:我们都知道,Android中默认的字体是黑体,而大多数app也都是使用的这种字体,但我们发现,大多数app中,个别地方字体非常好看,例如app的标题栏,菜单栏等地方,那他们是怎么做到的呢?有两种 ...
- ansible使用7-Loops
Standard Loops with_items - name: add several users user: name={{ item }} state=present groups=wheel ...
- System Center Configuration Manager 2016 配置安装篇(Part2)
步骤4.安装SCCM当前分支(版本1802) 注意:以管理员身份在ConfigMgr服务器(CM01)上执行以下操作. 为此,在Configuration Manager服务器(CM16)上,打开W ...