Docker-镜像操作之搜寻、清理删除、迁移、导入导出、上传下载、批量打包

文章目录

  • 获取镜像-pull
  • 查看镜像信息-ls、tag、inspect
  • 搜索镜像-search
  • 删除和清理镜像-rm、prune
  • 创建镜像-commit、import、build
  • 导出和载入镜像-save、load
  • 上传镜像-push

镜像说白了就是操作系统:只能读,和虚拟机镜像不同的是,它很小,反应出的是系统内核
容器就是在操作系统里办公:可以写

获取镜像-pull

语句格式:

docker [image] pull name[:tag]

其中
name:为镜像名(用来区分镜像)
tag:是标签(用来区分版本)
[image]:选项可加可不加

举例
从官方库 Docker Hub 获取一个 Ubuntu 18.04 系统的基础镜像可以使用如下的命令:

$ docker pull ubuntu:18.04

18. 04: Pulling from library/ubuntu 
...........
Digest: sha256:e27e9d7f7f28d67aa9e2d7540bdc2b33254b452ee8e60f388875e5b7d9b2b696
Satus: Downloaded newer image for ubuntu:18.04

注意:
对于docker镜像不显示指定tag,则会默认选择latest标签,这会下载仓库中最新的版本。

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

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

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

  • -a, --all-ags=true|false: 是否获取仓库中的所有镜像,默认为否;
    - -disable-content-trust:取消镜像的内容校验,默认为真。
    另外,有时需要使用镜像代理服务来加速Docker镜像获取 过程 ,可以在Docker服务
    启动配置中增加 --regis七ry-mirror=proxy_URL来指定镜像代理服务地址(如https://
    registry.docker-cn.com)

下载镜像到本地后, 即可随时使用该镜像了, 例如利用该镜像创建一个容器,在其中运行bash应用, 执行打印 "Hello World"命令:

$ docker run -it ubuntu:18.04 bash
root@65663247040f:/# echo "Hello World"
Hello World
root@65663247040f:/# exit

查看镜像信息-ls、tag、inspect

1:列出镜像

$ docker images 
或者
$ docker image ls 

只查看所有镜像的id:
$ docker images -q 

在这里插入图片描述
在列出信息中, 可以看到几个字段信息:

  • REPOSITORY:来自于哪个仓库, 比如 ubuntu 表示ubuntu 系列的基础镜像;
  • TAG: 镜像的标签信息, 比如 18.04 、 latest 表示不同的版本信息。 标签只是标记, 并不能标识镜像内容;
  • IMAGE ID: 镜像的ID(唯一标识镜像), 如果两个镜像的ID相同, 说明它们实际上指向了同一个镜像, 只是具有不同标签名称而已;
  • CREATED:创建时间, 说明镜像最后的更新时间;
  • SIZE:镜像大小, 优秀的镜像往往体积都较小。

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

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

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

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

  • –format=“TEMPLATE” : 控制输出格式,如. ID代表ID信息,.Repository
    代表仓库信息等;

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

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

2:添加标签
例如添加一个新标签 myubuntu:latest(就是起个别名、起到链接作用)

$ docker tag ubuntu:latest myubuntu:latest

3:使用inspect 查看详细信息
格式:

docker inspect name[:tag]

搜索镜像-search

用途:使用 docker search 命令可以搜索Docker Hub 官方仓库中的镜像。
基本格式

docker search [option] keyword

keyword 为关键字
option为命令选项,支持类型如下:

  • -f, --filter filter : 过滤输出内容;
  • –format string : 格式化输出内容;
  • –limit it :限制输出结果个数, 默认为 25 个;
  • –no-trunc : 不截断输出结果。

示例
搜索官方提供的带 nginx关键字的镜像, 如下所示:

$ docker search --filter=is-official=true nginx
NAME                DESCRIPTION                STARS               OFFICIAL            AUTOMATED
nginx               Official build of Nginx.   11909               [OK] 

再比如, 搜索所有收藏数超过 4 的关键词包括 tensorflow 的镜像:

$ docker search --filter=stars=4 tensorflow

NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tensorflow/tensorflow Official docker images for deep learning fra... 760
xblaster/tensorflow-jupyter Dockerized Jupyter with tensorflow 47 [OK]
jupyter/tensorflow-notebook Jupyter Notebook Scientific Python stack w/ ... 46
romilly/rpi-docker-tensorflow Tensorflow and Jupyter running in docker con... 16
floydhub/tensorflow tensorflow 8 [OK]
erroneousboat/tensorflow-pyt.hon3-jupyter Docker container with python 3 version of
te... 8 [OK]
tensorflow/tf_grpc_server Server for TensorFlow GRPC Distributed Runti"· 5 

删除和清理镜像-rm、prune

1: 使用标签或者ID删,删除一个或多个,多个之间用空格隔开
格式:

$  docker rmi image [image ... ]     
 或者   
$  docker image rm

#删除所有镜像:
docker rmi $(docker images -q)

其中 IMAGE可以为标签或 ID。
支持选项包括:

  • -f, -force: 强制删除镜像, 即使有容器依赖它;(当后台运行容器时删除不了可以使用 -f 属性)
  • -no-prune: 不要清理未带标签的父镜像。
    prune 命令用来删除不再使用的 docker 对象。

prune命令的使用

删除所有未被 tag 标记和未被容器使用的镜像:
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y

删除所有未被容器使用的镜像:
$ docker image prune -a

删除所有停止运行的容器:
$ docker container prune

删除所有未被挂载的卷:
$ docker volume prune

删除所有网络:
$ docker network prune

删除 docker 所有资源:
$ docker system prune

创建镜像-commit、import、build

1: 基于已有容器创建
容器运行起来后,又在里面做了一些操作,并且要把操作结果保存到镜像里
命令格式:

docker commit [options] 容器ID/名字 镜像名:tag

主要选项包括:
-a, --auther=" ": 作者信息;
-c, - -change=[] : 提交的时候执行Dockerfile指令
-m, - -message= " ": 提交消息;
-p, --pause=true: 提交时暂停容器运行。

示例:
首先 启动一个镜像, 并在其中进行修改操作。 例如, 创建一个test文件, 之后退出,

$ docker run -it ubuntu:18.04 /bin/bash
root@a925cb40b3f0:/# touch test
root@a925cb40b3f0:/# exit

记住容器的 ID 为 a925cb40b3£0。
创建新镜像,提交时可以使用 ID 或名称来指定容器:

$ docker commit -m "new file" -a "wen" a925cb40b3f0 test:0.1
9e9c814023bcffc3e67e892a235afe6lb02f66a947d2747f724bd317dda02f27

-m : 添加注释
-a : 作者
a925cb40b3f0: 容器环境id
-p,–pause=true 提交时暂停容器运行

此时查看本地镜像列表, 会发现新创建的镜像已经存在了:

$ docker images
REPOSITORY  TAG      IMAGEID       CREATED   VIRTUAL     SIZE
test        0.1   9e9c814023bc    4seconds    ago 1      88 MB 

2: 基于本地模板导入

用户也可以直接从一个操作系统模板文件导入一个镜像
命令格式为

 docker import  [选项]   文件地址   新镜像name:tag

-c :应用docker 指令创建镜像;
-m :提交时的说明文字;

从镜像归档文件my_ubuntu_v3.tar创建镜像,命名为runoob/ubuntu:v4

runoob@runoob:~$ docker import  my_ubuntu_v3.tar runoob/ubuntu:v4  
sha256:63ce4a6d6bc3fabb95dbd6c561404a309b7bdfc4e21c1d59fe9fe4299cbfea39
runoob@runoob:~$ docker images runoob/ubuntu:v4
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
runoob/ubuntu       v4                  63ce4a6d6bc3        20 seconds ago      142.1 MB

3: 基于dockerdfile创建

使用 Dockerfile 的技巧将将在后面进行介绍

导出和载入镜像-save、load

1: 导出
格式:

 $ docker save  [选项]   [导出名.tar]   [原镜像ID/名字]

该命令支持

  • -o
  • -output string 参数 导出镜像到指定的文件中

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

$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 18.04 0458a4468cbc 2 weeks ago 188 MB
....
$ docker save -o ubuntu.18.04.tar ubuntu:18.04

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

2: 载入
可以将导出的tar包再导入到镜像库
格式

$ docker load 

支持 -i、-input string 选项

例如,从文件 ubuntu 18.04.tar 导入到本地镜像列表,如下所示:

$ docker load -i ubuntu_18.04.tar
或者
$ docker load < ubuntu_18.04.tar

这将导人镜像及其相关的元数据信息(包括标签等) 导人成功后,可以使用 docker images 令进行查看与原镜像一致。

上传镜像-push

上传镜像到仓库,默认上传到 Docker Hub 官方仓库(需要登录)
命令格式为

 docker push   name [:TAG]

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

$ docker tag test:latest user/test:latest

$ docker push user/test:latest
The push refers to a repository [docker.io/user/test]
Sending image list
Please login prior to push:
Username :
Password:
Email :

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

你可能感兴趣的:(Docker)