您的位置:首页 > 运维架构 > Docker

Docker的镜像简介

2016-12-27 11:00 701 查看
一、获取镜像

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
制作镜像,以及后期修改的话,每一次修改都会让镜像更加臃肿一次,所删除的上一层的东西并不会丢失,会一直如影随形的跟着这个镜像,即使根本无法访问到™。这会让镜像更加臃肿。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: