1. 简介
Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器。
Docker 公司创建、验证、支持、提供了一些基础镜像,这样的镜像往往使用单个单词作为名字。用户自己创建的一般前面会带 "username/"前缀
镜像信息:
- Image ID:唯一标识一个镜像
- REPOSITORY:来自于哪个仓库
- TAG:标记来自同一个仓库的不同镜像(如果不指定具体的标记,则默认使用 latest 标记信息)
- CREATED:创建时间
- SIZE:大小
常用命令
- docker images:列出本地的所有images
- docker search imageName:查找指定name的image
- docker pull imageName:下载指定name的image
- docker push imageName:推送到 Docker Hub
- docker rmi imageName:移除本地的镜像
- docker rmi $(docker images -q -f "dangling=true"):清理所有未打过标签的本地镜像
2. 创建image
创建镜像有很多方法:
- 用户可以从 Docker Hub 获取已有镜像,并在修改后commit
- 可以利用本地文件系统创建一个
2.1 修改已有image来创建
启动容器后,可在容器中做一些操作。之后可用 docker commit 提交变更:
docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2
其中,-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;-a
可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。
2.2 Dockerfile来创建
使用 docker build 来创建一个新的镜像。首先需要创建一个 Dockerfile,Dockerfile 中每一条指令都创建镜像的一层。
Dockerfile 基本的语法是
- 使用#来注释
- FROM 指令告诉 Docker 使用哪个镜像作为基础
- 接着是维护者的信息
- RUN开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get 来安装了一些软件
编写完成 Dockerfile 后可以使用 docker build -t="ouruser/sinatra:v2
来生成镜像。其中 -t 标记来添加 tag。
Dockfile 中的指令被一条一条的执行。每一步都创建了一个新的容器,在容器中执行指令并提交修改(就跟之前介绍过的 docker commit
一样)。当所有的指令都执行完毕之后,返回了最终的镜像 id。所有的中间步骤所产生的容器都被删除和清理了。