Docker 镜像是用来启动容器的构建基石。
Docker 镜像是由文件系统叠加而成。
列出 Docker 主机上可用的镜像
docker images
本地镜像都保存在 Docker 宿主机的 /var/lib/docker 目录下。每个镜像都保存在 Docker 所采用的存储驱动目录下面。容器保存在 /var/lib/docker/containers 目录下面。
镜像从仓库下载下来。镜像保存在仓库中,而仓库存在于 Registry 中。默认的 Registry 是由 Docker 公司运营的公共 Registry 服务,即 Docker Hub
https://registry.hub.docker.com/
从仓库拉取一个镜像
docker pull ubuntu
这里使用 docker pull 命令来拉取 ubuntu 仓库中的所有内容。
为了区分同一个仓库中的不同镜像, Docker 提供了一种标签 ( tag ) 的功能。
我们可以通过在仓库名后面加上一个冒号和标签名来指定该仓库中的某一个镜像,例如:
docker run -t -i –name new_container ubuntu:12.04 /bin/bash
本例从 ubuntu:12.04 启动一个容器。该镜像的系统就是 ubuntu12.04
在构建一个新的容器时指定仓库的标签也是一个好习惯。这样可以准确地指定容器来源。
Docker Hub 中有两种类型的仓库:用户仓库 ( user repository ) 和顶层仓库 ( top-level repository ) 。用户仓库的镜像是由用户自行创建的,顶层仓库是由 Docker 内部人管理的。
用户仓库的命名由用户名和仓库名两部分组成,如: jamtur01/puppet
- 用户名:jamtur01
- 仓库名:puppet
顶层仓库则只包含仓库名,如 ubuntu 仓库。顶层仓库由 Docker 公司和相关厂商管理,所以一般顶层仓库的镜像是架构良好、安全且最新的。
拉取镜像
当用 docker run 从镜像启动一个容器时,如果该镜像不在本地, Docker 会先从 Docker Hub 下载该镜像。如果没有指定具体的镜像标签,那么 Docker 会自动下载 latest 标签的镜像。
docker pull fedora
可以把镜像拉取到本地。也可以指定具体标签:
docker pull fedora:latest
查找镜像
docker search puppet
该命令会在 Docker Hub 上查找公用镜像。
构建镜像
构建镜像有2种方法
- 使用 docker commit 命令;(不推荐)
- 使用 docker build 命令和 Dockerfile 文件。(更灵活,更强大)
其实我们并不是在创建新的镜像,而是基于一个基础镜像(如ubuntu、Fedora等)构建新镜像。
构建镜像中很重要的一环就是共享和发布镜像。镜像可以被推送到 Docker Hub 或者用户私有 Registry 中,因此必须要有一个 Docker Hub 账号。
docker login
个人认证信息将会保存到 $HOME/.dockercfg 文件。
用 Docker 的 commit 命令创建镜像
创建 Docker 镜像的第一种方法是使用 docker commit 命令。有点类似往版本控制系统提交变更。
docker commit d64ccc4c92c6 wangyanfu/httpd
上面这条命令就提交了我们定制过后的容器啦,而且我们将其命名为wangyanfu/httpd。
然后就可以用 docker images wangyanfu/httpd 来查看这个新镜像的信息啦。
还有一种提交的方法:
docker commit -m=”A new custom image” –author=”wangyanfu” d64ccc4c92c6 wangyanfu/httpd:webserver
这里-m添加了提交信息。–author添加了作者ID。 最后还加上一个新的容器标签webserver。
然后就可以用 docker inspect 来查看新镜像啦。