本文已参与「新人创作礼」活动,一起开启掘金创作之路。
【docker系列】之image
这次来说下镜像-image,具体概念在前篇已经讲过,可以移步“【docker系列】之概念篇.”。下边说下怎样使用镜像。
查看已有的镜像列表
[root@iz8vbbc49rkvxedwimwbxcz ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cloud-marketing latest 88a645a094f5 2 days ago 710MB
cloud-article latest 349674bfa148 2 days ago 710MB
cloud-order latest 4eaed29aa008 2 days ago 710MB
cloud-good latest edd9ac6b88cd 2 days ago 710MB
cloud-user latest 499f81e2a295 2 days ago 710MB
cloud-gateway latest fcb447533c79 2 days ago 690MB
prom/prometheus latest f73e06535383 7 days ago 142MB
grafana/grafana latest 8df10701ce62 7 days ago 180MB
nacos/nacos-server latest 707084b162a6 8 days ago 910MB
nacos/nacos-mysql 5.7 72037eccf264 4 months ago 373MB
java 8 d23bdf5b1b1b 3 years ago 643MB
分别解释下结果列:
- REPOSITORY: 表示镜像的仓库源
- TAG: 镜像的标签,也可以理解为镜像的版本,如果run时不加tag,则使用最新的latest版本
- IMAGE ID: 镜像ID
- CREATED: 镜像创建时间
- SIZE: 镜像大小
虚悬镜像
[root@iz8vbbc49rkvxedwimwbxcz ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cloud-marketing latest a86a77fdebea 15 hours ago 731MB
cloud-article latest ecf40c39bab5 15 hours ago 717MB
cloud-order latest 1fca800dc81a 15 hours ago 732MB
cloud-good latest 04097b653b59 15 hours ago 731MB
cloud-user latest 7382ce4719b4 15 hours ago 735MB
cloud-gateway latest 14439664932e 15 hours ago 690MB
<none> <none> a5f41470190e 17 hours ago 731MB
<none> <none> e63f83c1ae17 17 hours ago 717MB
<none> <none> f6c9d36aad8f 17 hours ago 732MB
<none> <none> 2cc6b64247f1 17 hours ago 731MB
<none> <none> 57ab39cbf47f 17 hours ago 735MB
<none> <none> d79fa62ecfcc 17 hours ago 690MB
<none> <none> 3e9acfb8fb38 18 hours ago 731MB
像上方出现的这种既没有镜像名也没有标签的,就是虚悬镜像(dangling image) ,出现这种情况一般有两种:
- 使用
docker build,由于新旧镜像名同名,导致旧镜像名称被取消。 - 当镜像更新新版本后,重新使用
docker pull此版本的镜像,则旧镜像名称被取消。
虚悬镜像可以使用如下命令删除:
[root@iz8vbbc49rkvxedwimwbxcz ~]# docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:d79fa62ecfcc8063365501cb37a18629b28af095ad78512fe69fa2d94bce5e31
deleted: sha256:18cc3cebb8b9758d285a331251ae62d583ce2a8819013c1bf433f33a1661db1c
deleted: sha256:5477201ae2770f4a186e3a30ff2064918d3ea9a99229517e6168b1521e2a5d33
deleted: sha256:6a94dce65009ac15f97127f7d98c5c3b038960236069b44d3efd6b9564f3a26c
deleted: sha256:6399ebbcf1b18e584c42360b0ea151e2c4213035d7a7b3e05d6b205e19a5c03d
deleted: sha256:77674cf59d0953fc951fe2895263dd5963acb57ae6ceaedc1ed57e9dd0c82c60
搜索镜像
[root@coder ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 13744 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1874 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 787 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 128
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 91 [OK]
bitnami/nginx Bitnami nginx Docker Image 90 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 87
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 76 [OK]
其中OFFICIAL代表是否为官方版本。
获取镜像
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
[root@coder ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
d121f8d1c412: Pull complete
ebd81fc8c071: Pull complete
655316c160af: Pull complete
d15953c0e0f8: Pull complete
2ee525c5c3cc: Pull complete
Digest: sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
从反馈信息(“Pull complete”)来看也可以验证镜像的分层存储。pull镜像时如果不指定tag,则默认为latest。
运行
[root@coder ~]# docker run --name nginx -p 80:80 -d nginx
b25df0205faacbd079bb11d083a1d3a962a3f43e1d6b2e6ef6484ac43557b88a
docker run命令就是运行容器命令,如果本地没有相关镜像,则会先pull到本地,然后再执行run命令。
删除本地镜像
方法一:
[root@coder ~]# docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
Deleted: sha256:7e4d58f0e5f3b60077e9a5d96b4be1b974b5a484f54f9393000a99f3b6816e3d
Deleted: sha256:eedfd37abc0b05520a719addf6675b372687fe9a2ed1746fa988335720d4376c
Deleted: sha256:4f052ddd517f6dc5b74d2f7d881838b8ec6a5e67ec7a1da8bbbe91e1e068ad3a
Deleted: sha256:5f78154d356577280e4ac0d9bf0d021d488828e57f953b011dcbadaecd539ce4
Deleted: sha256:db5783668220e16186080f3e9d69ad748aab8c72abb8e457f6fc45369461634b
Deleted: sha256:07cab433985205f29909739f511777a810f4a9aff486355b71308bb654cdc868
当然,删除本地镜像前,要确保相关的容器没有正在被使用,否则会删除失败:
[root@coder ~]# docker rmi nginx
Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container b25df0205faa is using its referenced image 7e4d58f0e5f3
方法二:
docker image rm [选项] <镜像1> [<镜像2> ...]
这两种方法中<镜像>可以是镜像名称,镜像短ID,镜像完整ID或者镜像摘要。
批量删除本地镜像
使用docker image ls 命令配合使用。比如:
需要删除所有仓库名为 redis 的镜像:
[root@coder ~]# docker image rm $(docker image ls -q redis)
或者删除所有在 mongo:3.2 之前的镜像:
[root@coder ~]# docker image rm $(docker image ls -q -f before=mongo:3.2)
更多命令可以使用docker image -help查询!