美文网首页
【快学Docker】Docker镜像相关操作

【快学Docker】Docker镜像相关操作

作者: 哈皮呀 | 来源:发表于2019-07-15 22:17 被阅读0次

    前言

    镜像是Docker的三大核心概念之一(另外两个分别是:容器和仓库)。

    Docker运行容器前需要本地存在镜像,如果本地不存在镜像,Docker则会尝试从远端仓库拉去镜像。镜像是Docker一大核心,我们今天就来了解下Docker镜像的相关操作。

    原创声明

    本文发布于掘金号【Happyjava】。Happy的掘金地址:https://juejin.im/user/5cc2895df265da03a630ddca,Happy的个人博客:(http://blog.happyjava.cn)[http://blog.happyjava.cn]。欢迎转载,但须保留此段声明。

    获取镜像

    命令格式:

    docker pull <name:tag>
    

    如果不显式指定tag,则会默认选择latest标签,即下载仓库中最新版本的镜像。

    如:拉取一个ubuntu镜像:

    image

    不指定tag则会默认拉取最新版本

    查看镜像信息

    使用 docker images 可以查看本地的镜像信息: image

    可以列出:镜像仓库、标签、镜像ID、创建时间和大小。

    使用 docker inspect <image_id> 可以查看镜像详细信息:

    [
        {
            "Id": "sha256:4c108a37151f54439950335c409802e948883e00c93fdb751d206c9a9674c1f6",
            "RepoTags": [
                "ubuntu:latest"
            ],
            "RepoDigests": [
                "ubuntu@sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c"
            ],
            "Parent": "",
            "Comment": "",
            "Created": "2019-06-18T22:51:38.340092056Z",
            "Container": "fdea049ea807b599050e885a88784e009ed78ebcc4d498be93744bb9374c6134",
            "ContainerConfig": {
                "Hostname": "fdea049ea807",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "Tty": false,
                "OpenStdin": false,
                "StdinOnce": false,
                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                ],
                "Cmd": [
                    "/bin/sh",
                    "-c",
                    "#(nop) ",
                    "CMD [\"/bin/bash\"]"
                ],
                "ArgsEscaped": true,
                "Image": "sha256:ae950a0376fe6c4d08fa7ff395f50f4a909e26e9f2d865d8641cda024161c6ee",
                "Volumes": null,
                "WorkingDir": "",
                "Entrypoint": null,
                "OnBuild": null,
                "Labels": {}
            },
            "DockerVersion": "18.06.1-ce",
            "Author": "",
            "Config": {
                "Hostname": "",
                "Domainname": "",
                "User": "",
                "AttachStdin": false,
                "AttachStdout": false,
                "AttachStderr": false,
                "Tty": false,
                "OpenStdin": false,
                "StdinOnce": false,
                "Env": [
                    "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
                ],
                "Cmd": [
                    "/bin/bash"
                ],
                "ArgsEscaped": true,
                "Image": "sha256:ae950a0376fe6c4d08fa7ff395f50f4a909e26e9f2d865d8641cda024161c6ee",
                "Volumes": null,
                "WorkingDir": "",
                "Entrypoint": null,
                "OnBuild": null,
                "Labels": null
            },
            "Architecture": "amd64",
            "Os": "linux",
            "Size": 64184378,
            "VirtualSize": 64184378,
            "GraphDriver": {
                "Data": {
                    "LowerDir": "/var/lib/docker/overlay2/fc1c2e7f7d583af0ddaa86f2d10be50371a966dd564c9d95b1816c33296520c7/diff:/var/lib/docker/overlay2/615da971b39e6d5121eb018b14f350b1466ef9445870ddba03d2d2da3ecd25d7/diff:/var/lib/docker/overlay2/e508ef7c05f3bdcd784d1f59064574d92f11516e6592cd5df24cfdac7ae13768/diff",
                    "MergedDir": "/var/lib/docker/overlay2/f6b9b965a5e2714452cf355e1a530b8b2f8c5d818e73f723debd7b27d955ae5e/merged",
                    "UpperDir": "/var/lib/docker/overlay2/f6b9b965a5e2714452cf355e1a530b8b2f8c5d818e73f723debd7b27d955ae5e/diff",
                    "WorkDir": "/var/lib/docker/overlay2/f6b9b965a5e2714452cf355e1a530b8b2f8c5d818e73f723debd7b27d955ae5e/work"
                },
                "Name": "overlay2"
            },
            "RootFS": {
                "Type": "layers",
                "Layers": [
                    "sha256:ba9de9d8475e7f5e40086358a1353b3cc080994fc6d31e4272dd3acb69b0151e",
                    "sha256:fbd2732ad777cb5db2515fa62b6122b797be233d01db02e0a19e5d894688cad6",
                    "sha256:dda1518598187bf87704acc22aa0ec2a67d9e7835c24346dfca118ab42c5cd0b",
                    "sha256:75e70aa52609fdbd63b58d46d6f7c20470062e1c9bb75616f7703a358a61e5ca"
                ]
            },
            "Metadata": {
                "LastTagTime": "0001-01-01T00:00:00Z"
            }
        }
    ]
    

    修改镜像TAG

    我们使用默认tag拉取镜像,在本地TAG会显示为latest,其实这是很不好的,因为时间久了,可能我们也忘记其具体的版本号了。不过我们可以通过如下命令修改镜像TAG:

    docker tag <iamges_name>:<images_tag> <new_iamges_name>:<new_images_tag>
    

    如:

    image

    我们可以看到ubuntu 18.09 和 latest 的 image id 是一样的,说明这是同一个镜像。

    搜索镜像

    docker search name
    
    image

    其中,官方镜像会有OFFICIAL标识

    删除镜像

    使用镜像ID删除

    docker rmi <iamge_id>
    

    使用名字和TAG删除

    docker rmi <name>:<tag>
    

    期中tag字段是可选的。

    如遇到删除不了的镜像,比如正在使用的,可以通过 -f 参数强制删除

    image

    创建镜像

    创建镜像有三种方式:基于容器创建、基于本地模板导入、基于Dockerfile创建。

    基于容器创建

    创建一个ubuntu容器

    docker run -it --name ubuntu ubuntu:18.09 /bin/bash
    
    # 在容器内部创建一个文件
    touch happyjava.txt
    
    # 退出
    exit
    

    这时候就可以创建镜像了,命令如下

    docker commit -m "commit message" -a "author" <container_id> <image_name>:<tag>
    

    如:

    docker commit -m "create a new file happyjava.txt" -a "Happy" d51e6f5e99d4 personalrepo:99
    
    

    docker images查看镜像:

    image

    这就跟GIT的commit操作一样,可以把变动提交上去。我们可以使用自己创建的镜像新建一个容器,就可以看到我们创建的happyjava.txt文件了。

    基于本地模板创建

    推荐模板下载地址:

    https://wiki.openvz.org/Download/template/precreated
    
    
    image

    创建命令如下:

    cat centos-5-x86.tar.gz |docker import - <name>:<tag>
    
    

    Dockerfile方式

    基于Dockerfile方式创建镜像,这个放到以后再做讲解~~~

    保存和加载镜像

    保存镜像

    docker save -o <filename> <name:tag/id>
    
    

    如:

    image

    加载镜像

    docker load --input <filename>
    
    

    或者

    docker load < <filename>
    
    

    总结

    本文总结了Docker中对于镜像的常用操作,包括镜像搜索、拉取、创建、删除等。镜像是使用Docker的前提,其基本操作是需要熟练掌握的。

    相关文章

      网友评论

          本文标题:【快学Docker】Docker镜像相关操作

          本文链接:https://www.haomeiwen.com/subject/oaxakctx.html