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.浏览器查看
尽量不要使用
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制作镜像,以及后期修改的话,每一次修改都会让镜像更加臃肿一次,所删除的上一层的东西并不会丢失,会一直如影随形的跟着这个镜像,即使根本无法访问到™。这会让镜像更加臃肿。
相关文章推荐
- 学习Docker之Docker、容器和镜像的简介和常用命令
- 容器与Docker简介(四)Docker容器,镜像与 Registries——微软微服务电子书翻译系列
- Docker第一篇-docker简介、镜像
- 利用 Docker sonatype/nexus3 镜像在阿里云(CentOS7)中搭建 Maven私服简介
- 【Docker】镜像容器仓库简介
- Docker第一篇-docker简介、镜像
- Docker镜像简介
- Docker EE/Docker CE简介与版本规划
- Docker的镜像和容器
- Windows10下的docker安装与入门 (三) 创建自己的docker镜像并且在容器中运行它
- 【原创】docker源码分析(3)---镜像(1)
- Docker 简介
- Docker(nginx)镜像构建
- Docker镜像和容器
- Docker下MySQL镜像配置及启动
- Docker学习笔记(3) — docker仓库的镜像怎么删除
- 创建支持nginx服务的docker镜像
- 详解docker镜像centos7配置Java运行环境
- Docker创建PHP镜像
- docker入门之简介