docker学习-镜像(三)
搜索镜像
docker search 镜像名
--automated=false 是否为自动构建
--no-trunc 返回完整的镜像id
-s N :显示欢迎程度为N即以上的镜像
最多返回25个结果
返回结果:
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
REPOSITORY:来自于哪个仓库,即仓库名
TAG:镜像标记,可以理解为同一个镜像的不同版本,latest为最新的tag
IMAGE ID:镜像唯一ID
CREATED:镜像创建时间
SIZE:镜像大小
参数:
-
-a:显示所有镜像,包括中间层镜像-f
-
- -no-trunc 区别在于显示完整的镜像id
-
-q:仅仅所有镜像的id
修改(构建)镜像
方式1(命令方式):通过docker commit命令来生成新的镜像
-
通过镜像启动容器
-
在容器内做修改并退出
-
通过commit命令生成新的镜像
docker commit -m “注释信息” -a “更新的用户信息” 容器id 生成的镜像名称
-a:作者信息
-m:注释信息
示例:
-
查看镜像
-
创建容器并进入容器
-
在容器内安装vim命令
-
退出容器
-
将容器提交并生成新的镜像
方式二(dockerfile):通过docker build来构建一个新的镜像
-
编写dockerfile
#this is test dockerfile
FROM centos:7
MAINTAINER wujian [email protected]
RUN yum -y install vim
#:注释信息
FROM:以哪个镜像作为基础镜像
MAINTAINER:维护者信息
RUN:在容器创建时会运行的命令
ADD:复制本地文件到镜像
EXPOSE :向外部开放端口
CMD:容器启动后运行的程序
-
docker build命令生成新的镜像
-t:镜像名称:tag名
.(点):代表Dockerfile的路径
-
查看生成的镜像
注意:通过dockerfile创建的镜像,文件中的每一行命令都会创建一个新的容器,在容器中执行指令并提交修改,即docker commit来生成一个新的容器,最终返回一个新的镜像id,中间步骤的所有容器都被删除和清理掉,一个镜像不能超过127层。
Dockerfile构建镜像原理:
-
从基础镜像运行一个容器
-
执行一个指令,对容器进行修改
-
执行类似docker commit操作,提交一个新的镜像层,并删除产生的容器
-
再基于刚提交的镜像运行一个新的容器
-
指定Dockerfile的下一条指令,直至所有指令执行完毕
dockerfile在构建过程中会产生多个镜像,docker保留了这些镜像,所以dockerfile再一次构建时,会采用缓存机制来提高构建效率,如果不需要缓存,可以用
docker build --no-cache ...
来重新构建镜像。
采用了缓存:
不采用缓存:
查看镜像的构建过程
docker history 镜像名
修改镜像的tag
docker tag 镜像id 镜像名/新tag
推送镜像
上传镜像到远程注册仓库,推送前需要先登录
docker push 镜像名
导入导出镜像
本地系统导入
cat 下载的镜像文件 | docker import - 新的镜像名:新的tag名
导出镜像
docker save -o 导出的文件名称 镜像名:tag名
导入镜像
docker load < 导入的文件名称
删除镜像
删除单个镜像
docker rmi 镜像名:tag名
删除所有镜像
docker rmi `docker images -q`