docker运行容器前(docker run...命令运行容器)需要本地存在对应的镜像,如果镜像在本地不存在,docker会尝试先从默认镜像仓库下载(默认使用docker hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义地镜像仓库。
1、获取镜像
docker pull IMAGE[:TAG]
如果不显示地指定TAG,则默认会选择latest标签,即下载仓库中最新版本的镜像。例如pull ubuntu镜像,IMAGE默认的全名为registry.hub.docker.com/ubuntu:latest,即从默认的服务器registry.hub.docker.com中的ubuntu仓库来下载标记为latest的镜像。
用户也可以选择从其他注册服务器的仓库下载,此时,需要在仓库名称前指定完整让的仓库注册服务器地址。例如从DockerPool社区的镜像源dl.dockerpool.com下载最新的ubuntu镜像:docker pull dl.dockerpool.com:5000/ubuntu
2、查看镜像信息
docker images :列出本地主机上已有的镜像信息
- repository:来自于哪个仓库,比如ubuntu仓库
- tag:镜像的标签信息,比如14.04
- image id:镜像的唯一ID号
- created:创建时间
- virtual size:镜像大小
docker tag:为本地镜像添加新的标签。例如添加一个属于我的ubuntu标签
docker tag dl.dockerpool.com:5000/ubuntu:latest ubuntu:bamu
3、搜寻镜像
docker search TERM:搜索远端仓库中共享的镜像,默认搜索Docker Hub官方仓库中的镜像。
支持的参数如下:
--automated=false 仅显示自动创建的镜像
--no-trunc=false 输出信息不截断显示
-s, --stars=0 指定仅显示评价为指定星级以上的镜像
可以看到返回了很多包含mysql关键字的镜像,输出的结果按照星级评价进行排序。其中包括镜像名字、描述、星级、是否官方创建、是否自动创建等。官方的镜像说明该镜像是由官方项目组创建和维护的,automated资源则允许用户验证镜像的来源和用途。
4、删除镜像
docker rmi
docker rmi IMAGE [IMAGE...],其中IMAGE可以为标签或ID
- 使用镜像标签删除镜像:docker rmi命令只是删除了该镜像多个标签中的指定标签而已,并不影响镜像文件。当镜像只剩下一个标签的时候就要小心了,此时再使用docker rmi命令会彻底删除该镜像文件。
- 使用镜像ID删除镜像:会先尝试删除所有指向该镜像的标签,然后删除镜像文件本身。
注意:当有该镜像创建的容器存在时(无论该容器正在运行中还是已经停止),镜像文件默认是无法被删除的。
如果想要强行删除镜像,可以使用-f参数:docker rmi -f ubuntu。但不推荐使用-f参数强制删除,因为这样往往会造成一些遗留问题。假设我们使用-f参数强制删除,再次使用docker images命令查看本地镜像情况,会发现一个标签为<none>的临时镜像,原来刚才被强制删除的镜像换了新的ID继续存在系统中。
因此,正确的做法是,先删除依赖该镜像的所有容器,再删除该镜像。
5、创建镜像
创建镜像的方式有三种:
- 基于已有镜像的容器创建
- 基于本地模板导入
- 基于Dockerfile创建
本节介绍前两种,第三种方式在将来的文章中详细讲解。
基于已有的容器创建
该方法使用docker commit 命令,格式为:docker commit [OPTIONS] CONTAINERS [REPOSITORY[:TAG]],参数信息如下:
- -a, --author="" 作者信息
- -m,--message="" 提交消息
- -p,--pause=true 提交时暂停容器运行
实践一下:
1)启动容器并新建文件:
docker run -ti ubuntu /bin/bash
touch test
exit
此时该容器跟原镜像启动的容器相比,已经发生改变。可以使用docker commit 命令来提交为一个新的镜像,提交时可以使用ID或名称来指定容器。
2)创建新的镜像
docker commit -m "new image" -a "bamu" container01 ubuntu_bamu
3)查看本地镜像列表,即可看到新创建的镜像
docker images
本地模板导入
也可以直接从一个操作系统模板文件导入一个镜像,推荐使用OpenVZ提供的模板来创建。OpenVZ模板的下载地址为:https://openvz.org/Download/templates/precreated,通过该地址下载了一个ubuntu-14.04模板压缩包后,可以使用如下命令导入:
cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
然后查看新导入的镜像,已经在本地存在了。
6、存出和载入镜像
可以使用docker save和docker load命令来存出和载入镜像
存出镜像
存出本地的ubuntu:14.04镜像为文件ubuntu_14.04.tar:docker save -o ubuntu_14.04.tar ubuntu:14.04
载入镜像
将文件ubuntu_14.04.tar导入镜像到本地镜像列表:docker load --input ubuntu_14.04.tar 或 docker load < ubuntu_14.04.tar
这将导入镜像以及其相关的元数据信息(包括标签等),可以使用docker images命令查看。
上传镜像
默认上传至DockerHub官方仓库(需要登录),命令格式为docker push NAME[:TAG]
用户在DockerHub网站注册后,即可上传自制的镜像,例如用户user上传本地镜像test:latest镜像,可以先添加标签user/test:latest,然后用docker push 命令上传镜像。
docker tag test:latest user/test:latest
docker push user/test:latest