目录
Docker使用镜像创建容器,Docker创建容器时需要本地存在对应的镜像,如果镜像不存在Docker会自动尝试从远程仓库下载镜像(默认从Docker Hun公共注册服务器中的仓库)
从仓库获取镜像
使用docker pull命令从远程仓库获取所需镜像。
下面的例子是从Docker Hub仓库下载一个Centos操作系统的镜像
|
docker pull centos:7.2.1511命令等价于 docker pull registry.hub.docker.com/centos:7.2.1511,即从注册服务器registry.hub.docker.com的centos仓库下载标记为7.2.1511的镜像
在国内访问官方服务器比较慢,可以从其他仓库下载,docker pull命令可以指定从其他仓库下载,如:
|
下载完成后,就可以使用镜像了,如创建一个容器,让其中运行bash应用:
|
管理本地主机的镜像
查看本地镜像列表
$ docker images
REPOSITORY 仓库信息
TAG 镜像标签,如7.2.1511,用来区分来自于一个仓库的不通镜像
IMAGE ID 镜像唯一标识
CREATED 创建时间
SIZE 镜像大小
如下,启动一个容器,如果不指定tag,默认使用latest标记信息
|
创建镜像
创建镜像有很多方法,用户可以从Docker Hub获取已有镜像并更新,也可以利用本地文件系统创建镜像
修改已有镜像
先使用下载的镜像启动容器
$ docker run -t -i centos:7.2.1511 /bin/bash,记住容器ID,后面提交时候用到。
在容器中新增脚本,退出,现在容器已经被改变了,使用docker commit命令提交更新后的版本
$ docker commit -m "add a.sh" -a "daweibalang" 82fe72fdf2a2 centos:myversion
其中-m指定提交说明信息,-a执行修改人信息,后面是用来创建镜像的容器的ID,最后指定目标镜像的仓库名和tag信息,创建成功后会返回这个镜像的ID信息。
创建成功后,使用docker images查看镜像信息。
使用新的镜像启动docker容器
$ docker run -t -i centos:myversion /bin/bash
使用Dockerfile创建镜像
使用docker commit来扩展一个镜像比较简单,但是在一个团队修改镜像很难。可以使用docker build创建镜像,首先需要创建Dockerfile,Dockerfile中包含创建镜像的指令。
新建一个目录和一个Dockerfile
$ mkdir test
$ cd test
$ touch Dockerfile
Dockerfile中的每一条指令,都是创建镜像的一步
#注释
|
Dockerfile的基本语法
- #后面的内容标识注释
- FROM指令指定要创建镜像的基础镜像
- MAINTAINER是维护者歇息
- RUN指令是在创建镜像时运行的指令,比如,上面的RUN指令就是创建时安装vim
Dockerfile编码完成后,使用docker build来生成镜像
|
其中-t标记来添加tag,指定新的镜像的用户信息,“.”是要执行的Dockerfile的路径
从docker build命令的执行信息中可以看到,生成新镜像的每一步指令的执行信息,所有指令执行结束后,返回生成镜像的镜像ID,删除指令执行过程中生成的容器。
一个镜像的指令不能超过127个
除了以上指令外,还可以有以下指令
- ADD,复制本地文件系统的文件到镜像中
- EXPOSE,向外开放端口
- CMD,指定容器启动后运行的程序
如:
|
还可以使用docker tag命令修改镜像的标签,如:
$ docker tag f6291722118d centos:myversion2.1
从本地文件系统导入镜像
从本地文件系统导入一个镜像,可以使用openvz的模板来创建,openvz的模板下载地址为:http://openvz.org/Download/templates/precreated
例如下载一个centos7的镜像,使用如下的命令导入
cat centos-7-x86_64.tar.gz |docker import - ubuntu:14.04
上传镜像
用户可以通过docker push命令,把自己创建的镜像上传到仓库中来共享。例 如,用户在Docker Hub上完成注册后,可以推送自己的镜像到仓库中。
$ docker push mycentos/centos
存出和载入镜像
docker save -o centos_myversion3.tar centos:myversion3 存出镜像到本地文件系统
docker load --input centos_myversion3.tar 从本地文件系统载入镜像
docker load < centos_myversion3.tar 从本地文件系统载入镜像
载入时还会载入标签等其他元数据信息
清理镜像
docker rmi imageid 删除镜像
docker images --quiet --filter 'dangling=true' 查看未打标签的镜像
docker images -q -f 'dangling=true' 查看未打标签的镜像