docker筑基篇-02-镜像管理

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值