Docker的镜像简介

一、获取镜像

1.获取的命令(docker pull)

--->docker pull [选项]  [Docker Registry地址]<仓库名>:<标签>

具体的选项可以通过命令docker pull --help来查看

例如

--->docker pull hyperledger-fabric:latest

2.运行,以hyperledger-fabric:latest为例

--->docker run -it --rm hyperledger-fabric:latest bash

这里的-it是两个参数,-i 交互式操作 -t代表终端;--rm 容器退出即删除;bash 是我希望有shell式的交互式操作


二、列出镜像

1.列表包含了仓库名、标签、镜像 ID、创建时间以及所占用的空间

-->docker images

REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
hyperledger/fabric-membersrvc   latest              b3654d32e4f9        10 weeks ago        1.417 GB
hyperledger/fabric-peer         latest              21cb00fb27f4        10 weeks ago        1.424 GB

2.悬浮镜像

<none>    <none>   00285df0df87     10 days age      342mb

一般来说,悬浮镜像是没有价值的,可以通过命令 docker rmi $(docker images -q -f dangling=true)删除

3.中间层镜像

用命令docker images -a来查看

4.列出部分镜像

root@node1:~# docker images hyperledger/fabric-peer
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
hyperledger/fabric-peer   latest              21cb00fb27f4        10 weeks ago        1.424 GB

=======================================================================

root@node1:~# docker images hyperledger/fabric-peer:latest
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
hyperledger/fabric-peer   latest              21cb00fb27f4        10 weeks ago        1.424 GB

=======================================================================

root@node4:~# docker images -f since=hyperledger/fabric-peer:latest
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
registry                        latest              c9bd19d022f6        9 weeks ago         33.3 MB
hyperledger/fabric-membersrvc   latest              b3654d32e4f9        10 weeks ago        1.417 GB

========================================================================

root@node4:~# docker images -f label=com.example.version=0.1
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

5.以特定的格式显示

========================================================================

root@node4:~# docker images -q
c9bd19d022f6
b3654d32e4f9
21cb00fb27f4

========================================================================

下面命令只会列出直接列出镜像结果,并且只包含镜像ID和仓库名

===============================================================

root@node4:~# docker images --format "{{.ID}}: {{.Repository}}"
c9bd19d022f6: registry
b3654d32e4f9: hyperledger/fabric-membersrvc

21cb00fb27f4: hyperledger/fabric-peer

===============================================================

打算以表格等距显示,并且有标题行,和默认一样,不过自己定义列

==============================================================

root@node4:~# docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID            REPOSITORY                      TAG
c9bd19d022f6        registry                        latest
b3654d32e4f9        hyperledger/fabric-membersrvc   latest
21cb00fb27f4        hyperledger/fabric-peer         latest

三、构建镜像

下面我们一个Web镜像构建为例说明

1.从docker上先拉nginx镜像下来

2.执行启动命令

docker run --name websvr -d -p 80:80 nginx
28a3069293d0b97cdc334fa086884c2af0f04bd5c9ced162cfa3c45b08e94e41

3.这里假设你已经拥有一些网站开发访问经验,打开浏览器访问,出现下面结果

现在我们开始对容器进行改造

4.使用下面命令进入容器

==============================================================

root@node4:~# docker exec -it websvr bash
root@28a3069293d0:/#

================================================================

root@node4:~# docker exec -it websvr bash
root@28a3069293d0:/# echo '<h1>I LOVE DOCKER!</h1>' > /usr/share/nginx/html/index.html                                  
root@28a3069293d0:/# ls
bin  boot  dev    etc  home  lib    lib64  media  mnt  opt    proc  root  run  sbin  srv  sys  tmp  usr  var
root@28a3069293d0:/# exit
exit
root@node4:~#

================================================================================

4.刷新浏览器出现以下结果


5.通过docker diff 命令看到具体的改动

=============================================================

root@node4:~# docker diff websvr
C /root
A /root/.bash_history
C /run
A /run/nginx.pid
C /usr
C /usr/share
C /usr/share/nginx
C /usr/share/nginx/html
C /usr/share/nginx/html/index.html
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp

=======================================================================

5.通过docker commit 命令来保存修改过的镜像

docker commit的语法格式为

docker commit [选项] <容器ID或者容器名> [仓库名[:标签]]

==================================================================================

docker commit  --author "JiangGe <guosj@gmail.com>" --message "修改网页" websvr nginx:v2
sha256:b1a172a26b4cee6515d497c76bf9c16f45a188260cccc23c51b2286b5a260007

==================================================================================

6.查看新定制的镜像

root@node4:~# docker images nginx
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
nginx               v2                  b1a172a26b4c        About a minute ago   181.6 MB------->这个就是新定制的镜像
nginx               latest              19146d5729dc        6 days ago           181.6 MB
===================================================================================

7.查看具体的历史记录

====================================================================================

root@node4:~# docker history nginx:v2
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
b1a172a26b4c        2 minutes ago       nginx -g daemon off;                            100 B               修改了默认网页
19146d5729dc        6 days ago          /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon    0 B                 
<missing>           6 days ago          /bin/sh -c #(nop)  EXPOSE 443/tcp 80/tcp        0 B                 
<missing>           6 days ago          /bin/sh -c ln -sf /dev/stdout /var/log/nginx/   22 B                
<missing>           6 days ago          /bin/sh -c apt-key adv --keyserver hkp://pgp.   58.56 MB            
<missing>           6 days ago          /bin/sh -c #(nop)  ENV NGINX_VERSION=1.11.7-1   0 B                 
<missing>           13 days ago         /bin/sh -c #(nop)  MAINTAINER NGINX Docker Ma   0 B                 
<missing>           13 days ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
<missing>           13 days ago         /bin/sh -c #(nop) ADD file:1d214d2782eaccc743   123.1 MB            
root@node4:~#

=======================================================================================

8.启动nginx:v2并映射到81端口

======================================================================================

docker run --name web2 -d -p 81:80 nginx:v2
6209246fae53f53b514a8765dba2e73256a79be8d0b2f35abc48f255df728f09

====================================================================================

9.浏览器查看


注意

尽量不要使用 docker commit 定制镜像,定制行为应该使用 Dockerfile 来完成。使用 docker commit 命令虽然可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并不会这样使用。首先,如果仔细观察之前的 docker diff webserver 的结果,你会发现除了真正想要修改的 /usr/share/nginx/html/index.html 文件外,由于命令的执行,还有很多文件被改动或添加了。这还仅仅是最简单的操作,如果是安装软件包、编译构建,那会有大量的无关内容被添加进来,如果不小心清理,将会导致镜像极为臃肿。此外,使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。而且,除当前层外,之前的每一层都是不会发生改变的,换句话说,任何修改的结果仅仅是在当前层进行标记、添加、修改,而不会改动上一层。如果使用 docker commit 制作镜像,以及后期修改的话,每一次修改都会让镜像更加臃肿一次,所删除的上一层的东西并不会丢失,会一直如影随形的跟着这个镜像,即使根本无法访问到™。这会让镜像更加臃肿。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

The_Web3_社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值