【docker系列】之image

354 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

【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查询!