docker学习-镜像(三)

搜索镜像

docker search 镜像名

--automated=false   是否为自动构建

--no-trunc  返回完整的镜像id

-s N :显示欢迎程度为N即以上的镜像

最多返回25个结果

返回结果:

docker学习-镜像(三)

NAME:镜像名

DESCRUPTION:镜像介绍

STARS:受欢迎程度

OFFFICIAL:是否官方发布

AUTOMATED:是否自动构建

一般单名字为官方创建,比如centos,一般${username}/${mirrorname}是docker用户自定义镜像,比如:wujian/centos

获取镜像

默认获取镜像:

docker pull 镜像名:tag号

指定注册服务器获取镜像

docker pull 注册服务器地址:端口/镜像名:tag号

默认从dockerhub拉取镜像,如需要提高拉取效率,则需要配置加速器,参考https://blog.****.net/wj309701477/article/details/86288928

 

查看镜像

查看镜像的详细信息

docker inspect 镜像id或者镜像名:tag名

列出本地存在的所有镜像

docker images

docker学习-镜像(三)

REPOSITORY:来自于哪个仓库,即仓库名

TAG:镜像标记,可以理解为同一个镜像的不同版本,latest为最新的tag

IMAGE ID:镜像唯一ID

CREATED:镜像创建时间

SIZE:镜像大小

参数:

  • -a:显示所有镜像,包括中间层镜像-f

  • - -no-trunc 区别在于显示完整的镜像id

  • -q:仅仅所有镜像的id

修改(构建)镜像

方式1(命令方式):通过docker commit命令来生成新的镜像

  1. 通过镜像启动容器

  2. 在容器内做修改并退出

  3. 通过commit命令生成新的镜像

docker commit -m “注释信息” -a “更新的用户信息” 容器id 生成的镜像名称

-a:作者信息

-m:注释信息    

示例:

  1. 查看镜像docker学习-镜像(三)

  2. 创建容器并进入容器docker学习-镜像(三)

  3. 在容器内安装vim命令docker学习-镜像(三)

  4. 退出容器docker学习-镜像(三)

  5. 将容器提交并生成新的镜像docker学习-镜像(三)

 

方式二(dockerfile):通过docker build来构建一个新的镜像

  1. 编写dockerfiledocker学习-镜像(三)

#this is test dockerfile
FROM centos:7
MAINTAINER wujian [email protected]
RUN yum -y install vim

#:注释信息

FROM:以哪个镜像作为基础镜像

MAINTAINER:维护者信息

RUN:在容器创建时会运行的命令

ADD:复制本地文件到镜像

EXPOSE :向外部开放端口

CMD:容器启动后运行的程序

  1. docker build命令生成新的镜像

docker学习-镜像(三)

-t:镜像名称:tag名

.(点):代表Dockerfile的路径

  1. 查看生成的镜像docker学习-镜像(三)

 

注意:通过dockerfile创建的镜像,文件中的每一行命令都会创建一个新的容器,在容器中执行指令并提交修改,即docker commit来生成一个新的容器,最终返回一个新的镜像id,中间步骤的所有容器都被删除和清理掉,一个镜像不能超过127层。

 

 

Dockerfile构建镜像原理:

  1. 从基础镜像运行一个容器

  2. 执行一个指令,对容器进行修改

  3. 执行类似docker commit操作,提交一个新的镜像层,并删除产生的容器

  4. 再基于刚提交的镜像运行一个新的容器

  5. 指定Dockerfile的下一条指令,直至所有指令执行完毕

 

dockerfile在构建过程中会产生多个镜像,docker保留了这些镜像,所以dockerfile再一次构建时,会采用缓存机制来提高构建效率,如果不需要缓存,可以用

docker build --no-cache ...

来重新构建镜像。

 

采用了缓存:

docker学习-镜像(三)

 

不采用缓存:

docker学习-镜像(三)

 

 

查看镜像的构建过程

docker history 镜像名

docker学习-镜像(三)

 

修改镜像的tag

docker tag 镜像id 镜像名/新tag

推送镜像

上传镜像到远程注册仓库,推送前需要先登录

docker push 镜像名

 

docker学习-镜像(三)

 

导入导出镜像

本地系统导入

cat 下载的镜像文件 | docker import - 新的镜像名:新的tag名

导出镜像

docker save -o 导出的文件名称  镜像名:tag名

docker学习-镜像(三)

导入镜像

docker load < 导入的文件名称

docker学习-镜像(三)

删除镜像

删除单个镜像

docker rmi 镜像名:tag名

docker学习-镜像(三)

 

删除所有镜像

docker rmi `docker images -q`