第二章:docker的镜像
二、docker的镜像
1、镜像是什么:
镜像是docker的三大核心概念之一。
docker运行容器钱需要本地存在对应的镜像,如果不存在本地,docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器的仓
库),用户也可以通过配置,使用自定义的镜像仓库。
镜像是docker运行容器的前提。
2、获取镜像
①、获取镜像
A、docker pull NAME[:TAG]
#:如果不显示地指定TAG,则默认会选择latest标签,即下载仓库中最新版本的镜像
例如:获取Ubuntu镜像
注意:
A、还可以指定版本过去镜像
sudo docker pull ubuntu:14.04
B、还可以选择指定的注册服务器的仓库下载
sudo docker pull d1.dockerpool.com:5000/ubuntu
3、查看镜像信息
①、查看镜像信息
sudo docker images
#使用docker images命令可以列出本地主机上已有的镜像
例如查询镜像:
字段说明:
②、给镜像添加新的标签
sudo docker tag ubuntu:latest ubuntu:lstest
#添加一个新的Ubuntu:latest镜像
例如镜像添加标签:
注意:上图中不同标签的镜像ID是完全一致的,说明他们实际上指向的是用一个镜像文件,只是别名不同而已,标签在这里起到了引用或快捷方式的作用。
③、获取镜像的详细内容
sudo docker inspect 24f760ae67c1
4、搜寻镜像
sudo docker search TERM
#默认搜索Docker Hub官方仓库中的镜像
支持参数包括: -- automated=false 仅显示自定创建的镜像
--no-trunc=false输出信息不截断显示。
-s, --stars=0 指定仅电视评价为指定星级以上的镜像。
例如:搜索待odoo关键字的镜像如下:
5、删除镜像
①、使用镜像的标签删除镜像
sudo docker rmi IMAGE
#IMAGE可以为标签或ID
例如删掉Ubunt镜像:
注意:当同一个镜像拥有多个标签时,删除镜像只会删除指定标签的镜像,不会影响镜像文件。如上图标注。
②、使用镜像ID删除镜像:
sudo docker rmi ID
#镜像ID
注意:当该镜像创建的容器存在时,镜像文件默认是无法被删除的。
例如:
A、创建一个简单容器:
B、删除该镜像:
Error response from daemon: conflict: unable to delete 94e814e2efa8 (must be forced) - image is being used by stopped container 340b0301f5c1
#Docker会提示有容器正在运行,无法删除
解决方案:
①、强行删除:(不推荐使用该方法)
sudo docker rmi -f ID
#不推荐使用-f参数䣂删除一个存在的容器依赖的镜像,会造成很多遗留问题,如再次查看镜像列表会发现一个标签为<none>的临时镜像,原来被强行删除的镜像换了新的ID继续存在系统中。
②、先删除容器在删除镜像:
A、删除容器
sudo docker rm ID(容器ID)
B、在删除容器
在查看镜像,镜像已被删除:
6、创建镜像
创建镜像的方法:
①、基于已有镜像的容器创建:
A、先创建一个新镜像,在启动镜像,并在其中进行修改操作,例如创建一个test文件,之后退出:
注意:一定要记住容器id
此时可以使用docker commit命令提交一个新的镜像,提交时可以使用ID或者名称来指定容器:
sudo docker commit -m "add a new file" -a "Docker Newbee" f43b289edf77 test
②、基于本地模板导入
例如下载一个Ubuntu-14.04的模板压缩包后,可以使用以下命令导入:
sudo cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
7、存出和载入镜像
①、存出镜像
存出镜像到本地,可以使用docker save命令
例如:
即已存在本地home文件目录下。
②、载入镜像:
可以使用docker load从存出的本地文件中在导入到本地镜像库中,例如从文件ubuntu_14.04.tar导入镜像到本地镜像列表,如下所示:
sudo docker load --input ubuntu_14.04.tar
#或者
sudo docker load < ubuntu_14.04.tar
8、上传镜像:
可以将自制的镜像上传到 DockerHub官方仓库(需要登录)
格式如下:
sudo docker push NAME[:TAG]