镜像(image)是Docker的核心概念之一,掌握镜像是熟练使用Docker的前提,接下来就主要针对Docker镜像的操作做一介绍,希望对大家有帮助。

Docker想要启动一个容器,则必须要先有一个镜像,镜像是创建容器的模板和源程序,docker对镜像的管理灵感很大程度来源于git,比如镜像也有pull和push操作。如同github上托管了数以万计的项目一样,Docker的官方镜像库Docker Hub(https://hub.docker.com/)上也托管了几十万个公开的镜像供我们下载使用,可以说正是由于镜像的存在才让我们的Docker变得如此流行。

docker search

使用 docker search 命令可以用关键字从 Docker Hub 上来查找搜索镜像。

可以输入命令  docker search –help 来查看使用帮助

可以看到该命令使用非常简单,支持的参数也不多, -s 参数可以指定只搜索镜像最少获得的star数,比如只展示获得的STARS数在50以上的mysql镜像:docker search -s 50 mysql

 

docker pull

使用 docker pull 命令可以从Docker Hub上拉取镜像,docker pull 命令同样非常的简单:

[root@localhost ~]# docker pull --help  
  
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]  
  
Pull an image or a repository from the registry  
  
  -a, --all-tags=false    Download all tagged images in the repository  
  --help=false            Print usage  
[root@localhost ~]#   

一般来说,一个镜像可以用 NAME:TAG 来标识,其中 NAME 是镜像名称,比如前述的 mysql 镜像, TAG 一般用来表示镜像的版本,如果你再拉取镜像时没有指明TAG,则用默认的 :latest 作为TAG,例如:

由于最新的镜像可能并不稳定,所以我们在pull镜像时往往要加上特定的TAG来下载指定的版本,比如下载5.6.37版本的mysql镜像:

那我们怎么知道一个镜像有哪些TAG版本呢,这时我们可以去Docker Hub网站(https://hub.docker.com/)去查看,先搜索一个镜像,然后点进去,点击tag列表



Docker images

没什么说的,列出本地的镜像

[root@localhost ~]# docker images  
REPOSITORY                    TAG                 IMAGE ID            CREATED             VIRTUAL SIZE  
centos                        latest              fae454d6fc7b        4 days ago          434.5 MB  
centos                        v7.0                fae454d6fc7b        4 days ago          434.5 MB  
mysql                         5.6.37              c6d1fd492efc        10 days ago         299 MB  
mysql                         latest              16f9fffc75d8        10 days ago         412.3 MB  
ubuntu                        14.04               b44ce450cb60        2 weeks ago         188 MB  
quay.io/coreos/etcd           v3.0.4              3b17a5f34e6c        14 months ago       43.3 MB  
hub.c.163.com/public/ubuntu   14.04               f6a575b7c805        18 months ago       237.1 MB  
[root@localhost ~]#   

Docker inspect

列出镜像的详细信息,返回的是一个json格式文本

[root@localhost ~]# docker inspect --help  
  
Usage: docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]  
  
Return low-level information on a container or image  
  
  -f, --format=      Format the output using the given go template  
  --help=false       Print usage  
[root@localhost ~]#   
[root@localhost ~]#   
[root@localhost ~]#   
[root@localhost ~]# docker inspect mysql:5.6.37  
[  
{  
    "Id": "c6d1fd492efc2ff14e626bda7ff4a648ffb19f149f0d76fb3b28abdb99e3be55",  
    "Parent": "cd35adb409a8bfbd932b48bb69ea261222960f780534aca1483593421c327a10",  
    "Comment": "",  
    "Created": "2017-09-19T08:14:40.227598662Z",  
    "Container": "1e51e628faca8157b00ca4b39bc6bc63ef2ee5b256cb3f273dbb2e9edde95678",  
    "ContainerConfig": {  
        "Hostname": "1e51e628faca",  
        "Domainname": "",  
        "User": "",  
        "AttachStdin": false,  
        "AttachStdout": false,  
        "AttachStderr": false,  
        "PortSpecs": null,  
        "ExposedPorts": {  
            "3306/tcp": {}  
        },  
        "Tty": false,  
        "OpenStdin": false,  
        "StdinOnce": false,  
        "Env": [  
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",  
            "GOSU_VERSION=1.7",  
            "MYSQL_MAJOR=5.6",  
            "MYSQL_VERSION=5.6.37-1debian8"  
        ],  
        "Cmd": [  
            "/bin/sh",  
            "-c",  
            "#(nop) ",  
            "CMD [\"mysqld\"]"  
        ],  
        "Image": "sha256:95e223e85dfa38832bd9c637fc3359d3bf5b5e386de637cc856087dab7fcb125",  
        "Volumes": {  
            "/var/lib/mysql": {}  
        },  
        "VolumeDriver": "",  
        "WorkingDir": "",  
        "Entrypoint": [  
            "docker-entrypoint.sh"  
        ],  
        "NetworkDisabled": false,  
        "MacAddress": "",  
        "OnBuild": [],  
        "Labels": {}  
    },  
    "DockerVersion": "17.06.2-ce",  
    "Author": "",  
    "Config": {  
        "Hostname": "",  
        "Domainname": "",  
        "User": "",  
        "AttachStdin": false,  
        "AttachStdout": false,  
        "AttachStderr": false,  
        "PortSpecs": null,  
        "ExposedPorts": {  
            "3306/tcp": {}  
        },  
        "Tty": false,  
        "OpenStdin": false,  
        "StdinOnce": false,  
        "Env": [  
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",  
            "GOSU_VERSION=1.7",  
            "MYSQL_MAJOR=5.6",  
            "MYSQL_VERSION=5.6.37-1debian8"  
        ],  
        "Cmd": [  
            "mysqld"  
        ],  
        "Image": "sha256:95e223e85dfa38832bd9c637fc3359d3bf5b5e386de637cc856087dab7fcb125",  
        "Volumes": {  
            "/var/lib/mysql": {}  
        },  
        "VolumeDriver": "",  
        "WorkingDir": "",  
        "Entrypoint": [  
            "docker-entrypoint.sh"  
        ],  
        "NetworkDisabled": false,  
        "MacAddress": "",  
        "OnBuild": [],  
        "Labels": null  
    },  
    "Architecture": "amd64",  
    "Os": "linux",  
    "Size": 0,  
    "VirtualSize": 299024930  
}  
]  
[root@localhost ~]#   

Docker history

列出镜像各层的创建过程

Docker tag

[root@localhost ~]# docker tag --help  
  
Usage: docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]  
  
Tag an image into a repository  
  
  -f, --force=false    Force  
  --help=false         Print usage  

给镜像打标签,相当于给本地的镜像重新起了个别名,方便我们操作,例如:

注意虽然上面分别列出了mysql和 hellomysql,但是它们的镜像ID是一样的,并且目前它们指向的是同一个镜像文件,镜像文件并不是重新被复制了一份,你可以对比 git中的新建分支操作。

Docker rmi

删除一个或多个镜像

由于上面删除的是一个 TAG, 但是该TAG指向的镜像还有其他的TAG指向他,所以只是删除了这个TAG,并没有真正的删除镜像文件

但是注意,当一个镜像只有一个TAG指向时,删除这个TAG会把镜像文件删除:

[root@localhost ~]# docker rmi mysql:latest  
Untagged: mysql:latest  
Deleted: 16f9fffc75d8025f10ecc10fbf5916e08e0f77caae06a624758cd69c010d31fa  
Deleted: 630f7c703d5fa67a3e777a2bfcdcd98135e397cee75a5a52bce0f627a5cbbd4c  
Deleted: bc2fe3c2835ad5fb10769599b5613f878cc8b9bbebcfa89f9521fa2f2ffaa839  
Deleted: 01e674edc677c50fac4285bc24d05b1ec759e5f0a6ba9b51d85e24ef85ed73a5  
Deleted: 078c98cfff73f1365bb1d3ff56b66a3456813fd6fbd98634a62b7856612e2824  
Deleted: 82ea38cf1e01d990ae60ba2ab974fa5790d3c1e51703009e66e8fc7aea108002  
Deleted: c225ff44bb32a6e94748a545ba1ed1c25fe2688785040b9a503f45732c9746d5  
Deleted: 4c7d19513632255c1aa23bcc385283226e760516f4ca002f835bd0677714bf59  
Deleted: 1ae42694d557736950bc6688c424afdf3684eb16ed226ed273ff8329f04bf5b9  
Deleted: f3bea8e00516f539f68f30d1d01b0838b69a78f3ece67f4d963cfe9117dddbfe  
Deleted: 8daa37e24d309600e3e3d4dfbdae180f7921773236b1e4809313dd1a14f1bd2c  
Deleted: db133f4e6ba522fedd385946121492ce639b24d6945f3e4dc56f642f3dfedfe9  
Deleted: 1be00dbf1d8f6c2bb5b7dbedfe53c43c9238e5fda7b2d0d62369588fda055995  
[root@localhost ~]#   

docker rmi 命令也可以跟镜像ID(IMAGE ID),这样所有指向该镜像的TAG都会被删除,包括镜像文件。

Docker镜像的创建,修改,以及提交由于和容器概念以及Dockerfile相关,限于篇幅,将在后续文章中介绍,欢迎继续关注

That\’s It!

版权声明:本文为liuxinyustu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/liuxinyustu/articles/8510384.html