美文网首页
docker筑基篇-02-镜像管理

docker筑基篇-02-镜像管理

作者: hylexus | 来源:发表于2016-10-17 23:32 被阅读113次

    [TOC]

    1 镜像再探

    docker镜像是由FileSystem叠加而成的。
    和传统的linux一样,最底层是bootfs;之上是rootfs。

    和linux不同的是,docker里的rootfs永远都是只读状态的。之所以你看起来像是修改了它(给它扩展新功能),是因为docker的联合加载技术(一次同时加载多个文件系统,并将各层文件系统的功能组合)。
    有了联合加载技术,最终的文件系统就有了所有已经加载了的文件系统的功能。是不是感觉有点像面向对象的继承呢?

    在实际使用中,一个docker镜像往往都是由另一个docker镜像扩展而来的。被扩展的那个镜像就称之为父镜像。最原始的那个父镜像被称为base image(基础镜像)。

    看看这个经典的图吧:

    image-layer

    最上面那一层是可读写的。在容器第一次启动的时候,该层是空的。
    当我们修改某个文件时,被修改的文件会从读写层下面的只读层复制到读写层。这样一来文件的只读版本还保留着,我们修改的只是一个副本,并将这个副本保留在了最上面的读写层,同时只读版本被读写层的文件隐藏了。

    而这个正是docker的另一牛逼哄哄的特性写时复制
    通过这种机制,每个只读层都是永远不会发生变化的了。当每次新建或扩展一个容器时,都会在容器栈的最顶层增加一个可写层。在可写层发生的变更隐藏掉底层的部分之后,各层在组合功能,从而扩展容器。

    总感觉这东西真是和面向对象设计原则中的开闭原则不谋而合啊!!!
    对修改关闭(除了第一层的可写层都是只读的),对扩展开放(在最顶层修改,扩展容器)。

    2 基础命令

    2.1 查看镜像

    docker images
        -a, --all=true|false
            显示所有镜像。默认情况下,那些中间层的镜像不会被显示.The default is false.
        --digests=true|false
            Show image digests. The default is false.
        --no-trunc=true|false
            不会截断输出. The default is false.
        -f, --filter=[]
            带条件地列出镜像
    

    镜像保存于仓库中,这里说的仓库有点类似于git的仓库。
    一个仓库可以存储多个镜像,通过 TAG 来区分。
    仓库存在于Registry中,默认情况下,Registry是DockerHub。

    [root@h1 ~]# docker images
    REPOSITORY                    TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    csphere/centos                7.1                 e3a35d3b1588        46 hours ago        591.4 MB
    hub.c.163.com/library/nginx   latest              b1d6e5f8fe92        5 days ago          181.4 MB
    daocloud.io/centos            6                   eb24acd8692d        5 weeks ago         194.6 MB
    centos                        latest              9baab0af79c4        5 weeks ago         196.7 MB
    centos                        6.8                 80e46367f846        6 weeks ago         194.5 MB
    centos                        centos7.1.1503      47a77536ad4c        6 weeks ago         212.1 MB
    hello-world                   latest              f0cb9bdcaa69        3 months ago        1.848 kB
    <none>                        <none>              151b45d87d28        23 months ago       859.5 MB
    [root@h1 ~]#
    
    [root@h1 ~]# docker images centos
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    centos              latest              9baab0af79c4        5 weeks ago         196.7 MB
    centos              6.8                 80e46367f846        6 weeks ago         194.5 MB
    centos              centos7.1.1503      47a77536ad4c        6 weeks ago         212.1 MB
    

    2.2 拉取镜像

    docker pull 命令其实就是下载镜像用的。默认情况下是从DockerHub下载。

    当我们使用run命令来从一个镜像启动容器时,如果镜像不在本地,docker就会从DockerHub去pull该镜像对应的最新版本,即TAG为latest的版本。

    docker pull
        -a, --all-tags=true|false
             Download all tagged images in the repository. The default is false.  
    
    [root@h1 ~]# docker pull fedora
    latest: Pulling from fedora
    daf0c008c194: Pull complete 
    daf0c008c194: Pulling fs layer 
    Digest: sha256:3346e6e34f51fc00844fe87fd2cf3afe43d7e2f360fabedb56a7c81791958df1
    Status: Downloaded newer image for fedora:latest
    
    [root@h1 ~]# docker images
    REPOSITORY                    TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    csphere/centos                7.1                 e3a35d3b1588        46 hours ago        591.4 MB
    hub.c.163.com/library/nginx   latest              b1d6e5f8fe92        5 days ago          181.4 MB
    daocloud.io/centos            6                   eb24acd8692d        5 weeks ago         194.6 MB
    centos                        latest              9baab0af79c4        5 weeks ago         196.7 MB
    centos                        6.8                 80e46367f846        6 weeks ago         194.5 MB
    centos                        centos7.1.1503      47a77536ad4c        6 weeks ago         212.1 MB
    fedora                        latest              daf0c008c194        8 weeks ago         204.4 MB
    hello-world                   latest              f0cb9bdcaa69        3 months ago        1.848 kB
    <none>                        <none>              151b45d87d28        23 months ago       859.5 MB
    [root@h1 ~]#
    
    # 指定TAG
    [root@h1 ~]# docker pull fedora:20
    20: Pulling from fedora
    a45be3b30145: Downloading [======>……
    …………………………
    …………………………
    

    2.3 搜索镜像

    这里指的搜索不是本地搜索,而是在远程的DockerHub上搜索。比如:

    [root@h1 ~]# docker search nginx
    NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    nginx                     Official build of Nginx.                        4345      [OK]       
    jwilder/nginx-proxy       Automated Nginx reverse proxy for docker c...   827                  [OK]
    richarvey/nginx-php-fpm   Container running Nginx + PHP-FPM capable ...   286                  [OK]
    million12/nginx-php       Nginx + PHP-FPM 5.5, 5.6, 7.0 (NG), CentOS...   76                   [OK]
    # ...............
    [root@h1 ~]#
    

    以上搜索结果的标题含义:

    • NAME:镜像所在仓库名,可以用它来pull镜像
    • DESCRIPTION:镜像描述
    • STARS:用户评价
    • OFFICIAL:是否是官方的
    • AUTOMATED:是否是使用自动构建流程创建的

    2.4 删除镜像

    docker rmi:删除指定镜像
    
    
    # 删除fedora最新版的镜像
    [root@h1 ~]# docker rmi -f fedora:latest
    Untagged: fedora:latest
    Deleted: daf0c008c194f2bae4f4bf36327d9166bc1dfa9fbbadb2ad585c1f11037fd787
    

    相关文章

      网友评论

          本文标题:docker筑基篇-02-镜像管理

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