diff --git a/SUMMARY.md b/SUMMARY.md index ef92b95..c2c525f 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -12,12 +12,12 @@ * [Ubuntu](install/ubuntu144.md) * [CentOS](install/centos.md) * [镜像](image/README.md) + * [获取镜像](image/pull.md) * [列出](image/list.md) - * [使用Docker Hub](image/dockerhub.md) * [创建](image/create.md) * [存出和载入](image/save_load.md) * [移除](image/rmi.md) - * [底层原理](image/internal.md) + * [实现原理](image/internal.md) * [容器](container/README.md) * [启动](container/run.md) * [守护态运行](container/daemon.md) diff --git a/image/README.md b/image/README.md index 2428623..6b74cd3 100644 --- a/image/README.md +++ b/image/README.md @@ -1,10 +1,10 @@ -#Docker镜像 +# Docker镜像 在之前的介绍中,我们知道镜像是Docker的三大组件之一。 -Docker把下载的镜像存储到本地,如果一个镜像不在本地,Docker会从一个镜像仓库下载,默认的仓库是 Docker Hub 公共仓库。 +Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会从镜像仓库下载(默认是Docker Hub公共注册服务器中的仓库)。 -接下来将介绍更多关于镜像的内容,包括: -* 使用和管理本地主机上的镜像 -* 创建一个基础的镜像 -* 上传镜像到Docker Hub(公共镜像仓库) +本章将介绍更多关于镜像的内容,包括: +* 从仓库获取镜像; +* 管理本地主机上的镜像; +* 介绍镜像实现的基本原理。 diff --git a/image/create.md b/image/create.md index db60997..f0c7cbb 100644 --- a/image/create.md +++ b/image/create.md @@ -145,3 +145,12 @@ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 05ac7c0b9383 17 seconds ago 215.5 MB ``` + +###上传镜像 +用户可以通过`docker push`命令,把自己创建的镜像上传到仓库中来共享。例如,用户在Docker Hub上完成注册后,可以推送自己的镜像到仓库中。 +``` +$ sudo docker push ouruser/sinatra +The push refers to a repository [ouruser/sinatra] (len: 1) +Sending image list +Pushing repository ouruser/sinatra (3 tags) +``` diff --git a/image/dockerhub.md b/image/dockerhub.md deleted file mode 100644 index d0ac199..0000000 --- a/image/dockerhub.md +++ /dev/null @@ -1,61 +0,0 @@ -## 使用Docker Hub管理镜像 -[Docker Hub](https://hub.docker.com/)是一个公共仓库,供用户上传和下载制作好的不同用途的镜像,用户可以在Docker Hub的网站上来查找满足自己需求的镜像。 - -###查找镜像 - -使用`docker search`命令。比如,当开发团队需要ruby和sinatra作为web应用程序的开发时,可以使用关键字sinatra进行搜索。 - -``` -$ sudo docker search sinatra -NAME DESCRIPTION STARS OFFICIAL AUTOMATED -training/sinatra Sinatra training image 0 [OK] -marceldegraaf/sinatra Sinatra test app 0 -mattwarren/docker-sinatra-demo 0 [OK] -luisbebop/docker-sinatra-hello-world 0 [OK] -bmorearty/handson-sinatra handson-ruby + Sinatra for Hands on with D... 0 -subwiz/sinatra 0 -bmorearty/sinatra 0 -``` - -可以看到返回了很多包含sinatra的镜像。其中包括镜像名字、描述、星级(表示该镜像的受欢迎程度)、是否官方创建、是否自动创建。 -官方的镜像是由stackbrew项目组创建和维护的,automated 资源允许用户验证镜像的来源和内容。 - -现在可以下载使用training/sinatra镜像。 - -到目前为止,我们看到了2种镜像资源。 -一种是类似ubuntu这样的基础镜像,被称为基础或根镜像。这些基础镜像是由Docker公司创建、验证、支持、提供。这样的镜像往往使用单个单词作为名字。 -还有一种类型,比如training/sinatra镜像。它是由Docker的用户创建并维护的,你可以通过指定镜像名字的前缀来指定使用某个用户的镜像,比如training。 - -###获取镜像 -可以使用`docker pull`命令来预先下载所需要的镜像。 - -下面的例子下载一个centos镜像。 -``` -$ sudo docker pull centos -Pulling repository centos -b7de3133ff98: Pulling dependent layers -5cc9e91966f7: Pulling fs layer -511136ea3c5a: Download complete -ef52fb1fe610: Download complete -``` -下载过程中,会输出获取镜像的每一层信息。 -*注:有时候官方镜像下载较慢,可以试试`203.195.193.251:5000`镜像,如 -``` -$ sudo docker pull 203.195.193.251:5000/centos -``` - -完成后,即可随时创建一个容器了。 -``` -$ sudo docker run -t -i centos /bin/bash -bash-4.1# -``` - -###上传镜像 -用户也可以通过`docker push`命令,把自己创建的镜像上传到Docker Hub中来共享。 -``` -$ sudo docker push ouruser/sinatra -The push refers to a repository [ouruser/sinatra] (len: 1) -Sending image list -Pushing repository ouruser/sinatra (3 tags) -``` - diff --git a/image/internal.md b/image/internal.md index c2577f8..117e86d 100644 --- a/image/internal.md +++ b/image/internal.md @@ -1,4 +1,4 @@ -##镜像的工作原理 +##镜像的实现原理 Docker镜像是怎么实现增量的修改和维护的? 每个docker都有很多层次构成,docker使用 [Union FS](http://en.wikipedia.org/wiki/UnionFS) 将这些不同的层结合到一个镜像中去。 diff --git a/image/list.md b/image/list.md index fbcdc97..3458108 100644 --- a/image/list.md +++ b/image/list.md @@ -1,37 +1,29 @@ -##列出本地镜像 -使用`docker images`显示本机上的镜像 +## 列出本地镜像 +使用`docker images`显示本地已有的镜像。 ``` $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE -training/webapp latest fc77f57ad303 3 weeks ago 280.5 MB -ubuntu 13.10 5e019ab7bf6d 4 weeks ago 180 MB -ubuntu saucy 5e019ab7bf6d 4 weeks ago 180 MB ubuntu 12.04 74fe38d11401 4 weeks ago 209.6 MB ubuntu precise 74fe38d11401 4 weeks ago 209.6 MB -ubuntu 12.10 a7cf8ae4e998 4 weeks ago 171.3 MB -ubuntu quantal a7cf8ae4e998 4 weeks ago 171.3 MB ubuntu 14.04 99ec81b80c55 4 weeks ago 266 MB ubuntu latest 99ec81b80c55 4 weeks ago 266 MB ubuntu trusty 99ec81b80c55 4 weeks ago 266 MB -ubuntu 13.04 316b678ddf48 4 weeks ago 169.4 MB -ubuntu raring 316b678ddf48 4 weeks ago 169.4 MB -ubuntu 10.04 3db9c44f4520 4 weeks ago 183 MB -ubuntu lucid 3db9c44f4520 4 weeks ago 183 MB +... ``` 在列出信息中,可以看到几个字段信息 * 来自于哪个仓库,比如ubuntu * 镜像的标记,比如 14.04 -* 它的ID号(唯一) -* 什么时候被创建的 +* 它的`ID`号(唯一) +* 创建时间 * 镜像大小 -仓库中可能有同一个镜像的多个发行版,比如ubuntu镜像,就有10.04、12.04、12.10、13.04、14.04等发行版,每个发行版的标记都不同,可以使用tag信息来指定使用某一个镜像来启动容器 +其中镜像的`ID`唯一标识了镜像,注意到`ubuntu:14.04`和`ubuntu:trusty`具有相同的镜像`ID`,说明它们实际上是同一镜像。 + +`TAG`信息用来标记来自同一个仓库的不同镜像。例如`ubuntu`仓库中有多个镜像,通过`TAG`信息来区分发行版本,例如10.04、12.04、12.10、13.04、14.04等。例如下面的命令指定使用镜像`ubuntu:14.04`来启动一个容器。 ``` $ sudo docker run -t -i ubuntu:14.04 /bin/bash -$ sudo docker run -t -i ubuntu:12.04 /bin/bash ``` -上面的命令会从指定镜像启动一个容器,并提供用户控制台来交互。用户登录进入后可以看到系统内运行了一个bash进程。 -如果你不指定具体的发行版,比如仅使用ubuntu,那么Docker会使用最新的发行版ubuntu:latest。 +如果不指定具体的标记,则默认使用`latest`标记信息。 diff --git a/image/pull.md b/image/pull.md new file mode 100644 index 0000000..1732616 --- /dev/null +++ b/image/pull.md @@ -0,0 +1,38 @@ +## 获取镜像 + +可以使用`docker pull`命令来从仓库获取所需要的镜像。 + +下面的例子将从Docker Hub仓库下载一个Ubuntu 12.04操作系统的镜像。 +``` +$ sudo docker pull ubuntu:12.04 +Pulling repository ubuntu +ab8e2728644c: Pulling dependent layers +511136ea3c5a: Download complete +5f0ffaa9455e: Download complete +a300658979be: Download complete +904483ae0c30: Download complete +ffdaafd1ca50: Download complete +d047ae21eeaf: Download complete +``` +下载过程中,会输出获取镜像的每一层信息。 +该命令实际上相当于`$ sudo docker pull registry.hub.docker.com/ubuntu:12.04`命令,即从注册服务器`registry.hub.docker.com`中的`ubuntu`仓库来下载标记为`12.04`的镜像。 + +有时候官方仓库注册服务器下载较慢,可以从其他仓库下载。 +从其它仓库下载时需要指定完整的仓库注册服务器地址。例如 +``` +$ sudo docker pull www.dockerpool.com:5000/ubuntu:12.04 +Pulling www.dockerpool.com:5000/ubuntu +ab8e2728644c: Pulling dependent layers +511136ea3c5a: Download complete +5f0ffaa9455e: Download complete +a300658979be: Download complete +904483ae0c30: Download complete +ffdaafd1ca50: Download complete +d047ae21eeaf: Download complete +``` + +完成后,即可随时使用该镜像了,例如创建一个容器,让其中运行bash应用。 +``` +$ sudo docker run -t -i ubuntu:12.04 /bin/bash +root@fe7fc4bd8fc9:/# +```