赞
踩
从 Docker 镜像仓库获取镜像的命令是 docker pull
。其命令格式为:
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
例如:
docker pull ubuntu:18.04
上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub (docker.io)获取镜像。而镜像名称是 ubuntu:18.04,因此将会获取官方镜像 library/ubuntu 仓库中标签为 18.04 的镜像
有了镜像后,我们就能够以这个镜像为基础启动并运行一个容器。以上面的 ubuntu:18.04 为例,如果我们打算启动里面的 bash 并且进行交互式操作的话,可以执行下面的命令:
docker run -it --rm ubuntu:18.04 bash
--rm
:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm
可以避免浪费空间进入容器后,我们可以在 Shell 下操作,执行任何所需的命令:
要想列出已经下载下来的镜像,可以使用 docker image ls
命令
docker image ls
列表中的镜像体积总和并非是所有镜像实际硬盘消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于 Docker 使用 Union FS,相同的层只需要保存一份即可,因此实际镜像硬盘占用空间很可能要比这个列表镜像大小的总和要小的多
可以通过 docker system df
命令来便捷的查看镜像、容器、数据卷所占用的空间:
上面的镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均为 <none>
:
<none> <none> 00285df0df87 5 days ago 342 MB
这个镜像原本是有镜像名和标签的,原来为 mongo:3.2,随着官方镜像维护,发布了新版本后,重新 docker pull mongo:3.2
时,mongo:3.2 这个镜像名被转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消,从而成为了 <none>
这类无标签镜像也被称为虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:
docker image ls -f dangling=true
一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除:
docker image prune
为了加速镜像构建、重复利用资源,Docker 会利用中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。默认的 docker image ls
列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 -a
参数
docker image ls -a
这样会看到很多无标签的镜像,与之前的虚悬镜像不同,这些无标签的镜像很多都是中间层镜像,是其它镜像所依赖的镜像。这些无标签镜像不应该删除
不加任何参数的情况下,docker image ls
会列出所有顶层镜像,但是有时候我们只希望列出部分镜像。docker image ls
有好几个参数可以帮助做到这个事情:
1、根据仓库名列出镜像
docker image ls ubuntu
除此以外,docker image ls
还支持强大的过滤器参数 --filter
,或者简写 -f
2、查看在 ubuntu:18.04 之后建立的镜像
想查看某个位置之前的镜像也可以,只需要把 since 换成 before 即可
3、下面的命令会直接列出镜像结果,并且只包含镜像ID和仓库名
docker image ls --format "{{.ID}}: {{.Repository}}"
如果要删除本地的镜像,可以使用 docker image rm
命令,其格式为:
docker image rm [选项] <镜像1> [<镜像2> ...]
<镜像>
可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要
例如,删除ubuntu镜像(f9a80a55f492为ubuntu镜像的短ID):
docker image rm f9a80a55f492
如果有用这个镜像启动的容器存在(即使容器没有运行),那么不可以删除这个镜像。容器是以镜像为基础,再加一层容器存储层,组成这样的多层存储结构去运行的。因此该镜像如果被这个容器所依赖的,那么删除必然会导致故障。如果这些容器是不需要的,应该先将它们删除,然后再来删除镜像
用 docker image ls
命令来配合批量删除镜像:
可以使用 docker image ls -q
来配合使用 docker image rm
,这样可以成批的删除希望删除的镜像:
1、我们需要删除所有仓库名为 redis 的镜像
docker image rm $(docker image ls -q redis)
2、删除所有在 mongo:3.2 之前的镜像
docker image rm $(docker image ls -q -f before=mongo:3.2)
1、docker部署一个nginx镜像
docker run --name webserver -d -p 8866:80 nginx
这条命令会用 nginx 镜像启动一个容器,命名为 webserver,并且映射了 8866 端口,这样我们可以用浏览器去访问这个 nginx 服务器
直接用浏览器访问的话,我们会看到默认的 Nginx 欢迎页面:
2、现在,假设我们非常不喜欢这个欢迎页面,我们希望改成欢迎 Docker 的文字,我们可以使用 docker exec
命令进入容器,修改其内容:
docker exec -it webserver bash
修改内容:
echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
退出容器:
exit
现在我们再刷新浏览器的话,会发现内容被改变了:
使用公共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界面上操作
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。