当前位置:   article > 正文

一文搞懂Docker镜像_docker镜像源

docker镜像源

1.获取镜像

从 Docker 镜像仓库获取镜像的命令是 docker pull。其命令格式为:

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
  • 1

例如:

docker pull ubuntu:18.04
  • 1

上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub (docker.io)获取镜像。而镜像名称是 ubuntu:18.04,因此将会获取官方镜像 library/ubuntu 仓库中标签为 18.04 的镜像

在这里插入图片描述

有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。以上面的 ubuntu:18.04 为例,如果我们打算启动里面的 bash 并且进行交互式操作的话,可以执行下面的命令:

docker run -it --rm ubuntu:18.04 bash
  • 1

在这里插入图片描述

  • -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端
  • --rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间
  • ubuntu:18.04:这是指用 ubuntu:18.04 镜像为基础来启动容器。
  • bash:放在镜像名后的是 命令,这里我们希望有个交互式 Shell,因此用的是 bash

进入容器后,我们可以在 Shell 下操作,执行任何所需的命令:

在这里插入图片描述


2.列出镜像

要想列出已经下载下来的镜像,可以使用 docker image ls 命令

在这里插入图片描述

docker image ls 列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于 Docker 使用 Union FS,相同的层只需要保存一份即可,因此实际镜像硬盘占用空间很可能要比这个列表镜像大小的总和要小的多

可以通过 docker system df 命令来便捷的查看镜像、容器、数据卷所占用的空间:

在这里插入图片描述


3.虚悬镜像

上面的镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均为 <none>

<none>    <none>    00285df0df87   5 days ago     342 MB
  • 1

这个镜像原本是有镜像名和标签的,原来为 mongo:3.2,随着官方镜像维护,发布了新版本后,重新 docker pull mongo:3.2 时,mongo:3.2 这个镜像名被转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消,从而成为了 <none>

这类无标签镜像也被称为虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:

docker image ls -f dangling=true
  • 1

在这里插入图片描述

一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除:

docker image prune
  • 1

4.中间层镜像

为了加速镜像构建、重复利用资源,Docker 会利用中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。默认的 docker image ls 列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数

docker image ls -a
  • 1

在这里插入图片描述

这样会看到很多无标签的镜像,与之前的虚悬镜像不同,这些无标签的镜像很多都是中间层镜像,是其它镜像所依赖的镜像。这些无标签镜像不应该删除


5.列出部分镜像

不加任何参数的情况下,docker image ls 会列出所有顶层镜像,但是有时候我们只希望列出部分镜像。docker image ls 有好几个参数可以帮助做到这个事情:

1、根据仓库名列出镜像

docker image ls ubuntu
  • 1

在这里插入图片描述

除此以外,docker image ls 还支持强大的过滤器参数 --filter,或者简写 -f

2、查看在 ubuntu:18.04 之后建立的镜像

在这里插入图片描述
想查看某个位置之前的镜像也可以,只需要把 since 换成 before 即可

3、下面的命令会直接列出镜像结果,并且只包含镜像ID和仓库名

docker image ls --format "{{.ID}}: {{.Repository}}"
  • 1

在这里插入图片描述


6.删除本地镜像

如果要删除本地的镜像,可以使用 docker image rm 命令,其格式为:

docker image rm [选项] <镜像1> [<镜像2> ...]
  • 1

<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要

例如,删除ubuntu镜像(f9a80a55f492为ubuntu镜像的短ID):

docker image rm f9a80a55f492
  • 1

在这里插入图片描述

如果有用这个镜像启动的容器存在(即使容器没有运行),那么不可以删除这个镜像。容器是以镜像为基础,再加一层容器存储层,组成这样的多层存储结构去运行的。因此该镜像如果被这个容器所依赖的,那么删除必然会导致故障。如果这些容器是不需要的,应该先将它们删除,然后再来删除镜像

docker image ls 命令来配合批量删除镜像:

可以使用 docker image ls -q 来配合使用 docker image rm,这样可以成批的删除希望删除的镜像:

1、我们需要删除所有仓库名为 redis 的镜像

docker image rm $(docker image ls -q redis)
  • 1

2、删除所有在 mongo:3.2 之前的镜像

docker image rm $(docker image ls -q -f before=mongo:3.2)
  • 1

7.案例:使用docker部署nginx

1、docker部署一个nginx镜像

docker run --name webserver -d -p 8866:80 nginx
  • 1

这条命令会用 nginx 镜像启动一个容器,命名为 webserver,并且映射了 8866 端口,这样我们可以用浏览器去访问这个 nginx 服务器

直接用浏览器访问的话,我们会看到默认的 Nginx 欢迎页面:

在这里插入图片描述

2、现在,假设我们非常不喜欢这个欢迎页面,我们希望改成欢迎 Docker 的文字,我们可以使用 docker exec 命令进入容器,修改其内容:

docker exec -it webserver bash
  • 1

修改内容:

echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
  • 1

退出容器:

exit
  • 1

在这里插入图片描述

现在我们再刷新浏览器的话,会发现内容被改变了:

在这里插入图片描述


8.docker分发镜像

使用公共Registry分发镜像

保存和分发镜像的最直接方法就是使用Docker Hub

1、首先得在Docker Hub上注册一个账号

在这里插入图片描述

2、在Docker Host上登录

在这里插入图片描述

3、修改镜像的repository,使之与Docker Hub账号匹配。Docker Hub为了区分不同用户的同名镜像,镜像的registry中要包含用户名,完整格式为:[username]/xxx:tag。我们可以通过docker tag命令重命名镜像

在这里插入图片描述

4、通过docker push将镜像上传到Docker Hub

在这里插入图片描述

5、登录https://hub.docker.com,在Public Repository中就可以看到上传的镜像,如果要删除上传的镜像,只能在Docker Hub界面上操作

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/810719
推荐阅读
相关标签
  

闽ICP备14008679号