Docker容器技术介绍(二) --- Docker镜像操作

镜像(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!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值