Docker | Docker镜像

镜像的基本操作 :
前提: 配置镜像加速器,提高镜像的拉取速度。
因为镜像是分层系统的模式,所以在拉取镜像的时候也是分层的拉取的,所以会看到一层一层的pull过程,如图:
在这里插入图片描述

在线搜索镜像 :

  • 语法 : docker search [OPTIONS] TERM

  • OPTIONS说明:

    –automated :只列出 automated build(自动化构建)类型的镜像;默认值false
    –no-trunc :显示完整的镜像描述;默认值false
    -s :列出收藏数(stars)不小于指定值的镜像;
    –-filter,添加过滤条件,如-filter=stars=3 代表:starts的值>=3 而不是直接等于3(注意)

  • 实例:

  • 通过过滤条件进行镜像在线搜索,如图:
    在这里插入图片描述

  • 从Docker Hub查找所有镜像名包含java,并且收藏数大于10的镜像
    在这里插入图片描述

拉取镜像:

  • 语法 : docker pull [OPTIONS] NAME[:TAG|@DIGEST]

  • 说明:从镜像仓库Docker Hub中拉取或者更新指定镜像

  • OPTIONS说明:
    -a :拉取所有 tag 镜像; 对应得是 –all-tags=false 默认值false
    –disable-content-trust :忽略镜像的校验,默认开启

  • 实例:

  • 拉取指定版本的镜像,如图:
    在这里插入图片描述

  • 拉取最新版本的镜像,这里写latest或者不写tag对应的都是一样的效果,因为默认拉取的就是latest最新版本的,如图:
    在这里插入图片描述

  • 不写tag的最新镜像的拉取命令:

    docker pull ubuntu
    
  • 从Docker Hub下载REPOSITORY为java的所有镜像的命令如下:

     docker pull -a java
    

PS:

  • latest是一个标签(tag),表示是当前最新版本;
  • 输入的命令实际上相当于docker pull registry.hub.docker.com/ubuntu:latest 命令,即从注册服务器 registry.hub.docker.com中的名为ubuntu的仓库中下载标签为latest的镜像;
  • 只要对应的选项如-a 写出来,就代表true,不管默认值是什么,如果想改为false非默认值,那么显示指定 -a=false这样

查看你本地的镜像仓库:

  • 语法 :docker images [OPTIONS] [REPOSITORY]
  • OPTIONS说明:
    -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)默认值false;
    –digests :显示镜像的摘要信息;
    -f :显示满足条件的镜像,对应–filter;
    –format :指定返回值的模板文件;
    –no-trunc :显示完整的镜像信息 默认值false;
    -q :只显示镜像ID。
  • 实例:

基本查询如下:
在这里插入图片描述

列出本地镜像中REPOSITORY为ubuntu的镜像列表,如图:
在这里插入图片描述

对于查询结果的标题字段的解释,如下:
在这里插入图片描述

查看镜像详情 (镜像的元数据) :

  • 语法 : docker inspect [OPTIONS] NAME|ID [NAME|ID…]
  • OPTIONS说明:
    -f :指定返回值的模板文件,对应–format=“” ;
    实例:
    在这里插入图片描述

PS:

  • 这里NAMW指定的是repository或者容器container的值

删除镜像 :

  • 语法 :docker rmi [OPTIONS] IMAGE [IMAGE]

  • OPTIONS说明:
    -f,–force=false:强制删除镜像
    –no-prune, 默认值–no-prune=false :不移除该镜像的过程镜像,默认移除;

  • 实例:
    强制删除本地镜像runoob/ubuntu:v4,如图:
    在这里插入图片描述

PS:

  • 删除镜像前必须先删除以此镜像为基础的容器(哪怕是已经停止的容器),否则无法删除该镜像,会报错Failed to remove image(e4415b714b62): Error response from daemon: conflict: unable to delete e4415b714b62 (cannot be forced) - image has dependent child images类似这种;
  • 特殊镜像的删除(同id不同标签或者名称的镜像的删除)可以使用repository:tag的组合来删除特殊的镜像。
    如:docker rmi docker.io/redis:3.2

自定义构建镜像 :
构建Docker镜像,可以保存对容器的修改,并且再次使用。构建镜像提供了自定义镜像的能力,以软件的形式打包并分发服务及其运行环境。Docker中提供了两种方式来构建镜像:

  • 通过容器构建镜像:docker commit

  • 通过Dockerfile:docker build

实例之通过容器构建:docker commit

  • 语法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    -a –author=“” :提交的镜像作者;
    -m –message=“”:提交时的说明文字;
    -p –pause=true :在commit时,将容器暂停;
    实例:
    在这里插入图片描述
    解释:-m指定说明信息;-a指定用户信息;aa97ba3292ce代表容器的id;sgy/ubuntu:vim指定目标镜像的用户名、仓库名和 tag 信息,运行命令的时候使用自己注册Docker hub时的用户名;
    PS:

    • 构建完成后,就可以在本地通过命令 docker images查看了,注意是在本地,还没有推送到 Docker hub上去;

总结:

  • 先有基础镜像,然后创建容器,之后通过容器创建镜像;

**使用Dockerfile文件构建镜像 **
Docker允许我们利用一个类似配置文件的形式来进行构建自定义镜像,在文件中可以指定原始的镜像,自定义镜像的维护人信息,对原始镜像采取的操作以及暴露的端口等信息。比如:

# Sample Dockerfile
FROM ubuntu:16.04
MAINTAINER mrw "mrw@163.com"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80
  • 语法 :docker build [OPTIONS] PATH | URL | -
  • 说明 :docker build 命令用于使用 Dockerfile 创建镜像;
  • OPTIONS说明:
    –quiet, -q :安静模式,成功后只输出镜像 ID;
    –tag, -t: 指定输出的镜像的名字及标签,通常 name:tag 或者 name 格式,可以在一次构建中为一个镜像设置多个标签;
  • 实例:
  • 使用当前目录的 Dockerfile 创建镜像,镜像名:runoob/ubuntu 标签:v1
  docker build -t runoob/ubuntu:v1 . 
  • 也可以通过 -f 指定 Dockerfile 文件的位置:
docker build -f /path/to/a/Dockerfile .
或者
docker build -f Dockerfile-dev.yaml -t my_container .  一般用后者,同时指定了生成的镜像名字

注意: 这里可以指定容器中的路径,也可以指定宿主机上的实际路径(绝对路径);

  • 在 Docker 守护进程执行 Dockerfile 中的指令前,首先会对 Dockerfile 进行语法检查,有语法错误时会返回:
docker build -t test/myapp .
Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD

PS:

  • 如果引用Dockerfile失败,可能是Dockerfile文件的后缀名的问题,去掉后缀名.txt就可以了。
  • 当看到类似 Successfully built 01a82bc1cf37 (镜像ID )的字样时,说明镜像构建成功了,这时通过 docker images 命令可以看到刚才制作的镜像;

镜像迁移 :
我们制作好的镜像,一般会迁移或分享给其他需要的人。Docker提供了几种将我们的镜像迁移、分享给其他人的方式。推荐镜像迁移应该直接使用Docker Registry,无论是直接使用Docker Hub还是使用内网私有Registry都可以。使用镜像频率不高,镜像数量不多的情况下,我们可以选择以下两种方式。

  • 上传Docker Hub;

  • 导出文件互传;

上传Docker Hub :
首先,需要在Docker Hub上申请注册一个帐号。然后我们需要创建仓库,并指定仓库名称。
在这里插入图片描述

在终端中登录你的Docker Hub账户,输入docker login,接着输入用户名密码即可登录成功。
在这里插入图片描述

需要先给镜像打上标签:
给镜像打标签的命令:

docker tag <existing-image> <hub-user>/<repo-name>[:<tag>]

说明:其中existing-image代表本地待上传的镜像名加tag,后面<hub-user>/<repo-name>[:<tag>]则是为上传更改的标签名,tag不指定则为latest 这里<repo-name> 要和Docker hub上你创建的仓库名相同。
在这里插入图片描述

可以看到,我们重新为ubuntu:16.04的镜像打上标签,观察IMAGE ID可知,同一镜像可以拥有不同的标签名。接下来,我们利用push命令直接上传镜像:

docker push <hub-user>/<repo-name>:<tag>

如图,我们已经上传成功。由于之前上传过,所以我们这里是直接对已有的ubuntu镜像进行上传,只是重新打了标签,所以真正上传的只是变化的部分:
在这里插入图片描述
在这里插入图片描述

导出文件互传的方式 :
Docker 还提供了 docker load 和 docker save 命令,用以将镜像保存为一个tar文件。比如这次我们将ubuntu:latest这个镜像保存为tar文件。
在这里插入图片描述

查看本地磁盘,即可看见名为ubuntu18.04的tar包。我们可以将其拷贝给其他PC,利用load命令重新导入。
在这里插入图片描述

总结:

  • 镜像的删除,删除镜像前必须先删除以此镜像为基础的容器(哪怕是已经停止的容器);
  • 镜像的 ID 唯一标识了镜像,具有相同的镜像 ID ,就说明它们实际上是同一镜像,同一镜像可以指定不同的标签名;
  • docker的仓库是公共的,拉取镜像:指定注册服务器,指定注册服务器中的仓库,然后指定仓库中对应的镜像标签tag;
  • 拉取“基础”镜像,分层的方式一层一层的拉取;
  • 镜像一旦生成,其包含的数据就是静态数据,不允许修改,只能通过容器的动态数据来操作(再重新生成一个镜像);

引用:
Docker——入门实战
从 0 开始了解 Docker
使用 Docker 搭建前端 Java 开发环境
如何把 Java Web 应用放在 docker 容器中运行
镜像和容器的基础讲解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值