![](https://cdn.zimug.com/wx-zimug.png)
[TOC]
## 一、国内Docker镜像仓库
由于大家都知道的原因,从国外的docker 仓库中pull镜像的下载速度实际上是很慢的。国内的一些一线厂商以及docker官方都在国内免费提供了一些docker镜像仓库,使用国内的镜像仓库下载速度会有很大的提升。例如:
* Docker 官方提供的中国 registry mirror
* 阿里云加速器
* DaoCloud 加速器
我们以Docker官方提供的中国 registry mirror为例,来讲解国内镜像仓库源的配置方式。将 `/etc/docker/daemon.json`文件内容修改为如下内容,如果该文件不存在就新建一个
```
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
```
配置完成之后,重启docker服务
```
sudo systemctl restart docker
```
再去下载pull镜像,会发现比以前快了很多。就这么简单!
## 三、搜索镜像
[Docker Hub](https://hub.docker.com/)上有很多的官方镜像以及第三方上传的高质量镜像,下面就为大家介绍如何搜索并获取这些镜像。
* 第一种方式就是在Dcoker hub上直接搜索镜像,比如我搜索redis镜像,下方出现绿色盾牌标志的就是redis官方提供的镜像,安全性稳定性都是有保证的。
![](http://cdn.zimug.com/0729bbd2d5a4742cfb9ec20539893319)
* 第二种方式可以使用`docker search`来搜索镜像,
我们也可以使用 命令来搜索镜像。比如我们需要一个tomcat的镜像来作为我们的web服务。我们可以通
过 docker search 命令搜索tomcat来寻找适合我们的镜像。
```
docker search redis
```
OFFICIAL字段值为OK的那一条记录为官方的镜像。
![](http://cdn.zimug.com/37b869538adcf7f0131c243fa3f40ac7)
## 四、拉取镜像
从 Docker 镜像仓库获取镜像的命令是 docker pull其命令格式为:
```
docker pull [选项] [Docker Registey 地址[:端口号]/] 镜像名[:标签]
```
具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。
* Docker 镜像仓库地址: 地址的格式一般是 `<域名/IP>[:端口号]`。如果使用默认镜像仓库,是不用写仓库地址的,如本文第一小节的配置。
* 镜像名称:镜像名称包含两部分 `<用户名>/<软件名>`。一般来说,软件官方提供的镜像一般都是没有用户名的。
示例:通过 docker pull获取redis最新版本的镜像
```
docker pull redis:latest
```
等同于
~~~
docker pull redis
~~~
## 五、列出镜像
要想列出已经下载下来的镜像,可以使用 docker image ls 命令。
```
docker images //等同于docker image ls
```
![](http://cdn.zimug.com/530aab075d6d23bbabb7997ed337cba5)
* REPOSITORY:仓库及镜像名称
* TAG:标签及版本号
* IMAGE ID:镜像ID,镜像的唯一标识
* CREATED:该镜像的构建时间
* SIZE: 该镜像文件的大小
## 六、虚悬镜像
在镜像列表中,可能会存在一种特殊的镜像,该镜像既没有仓库名/镜像名称,也没有标签/版本号,这两个位置均显示`<none>`,这种镜像通常被称为**虚悬镜像**,如下入所示。
![](http://cdn.zimug.com/200668033efb918c826b0b07579b4243)
**虚悬镜像产生的原因是什么?**
其实虚悬镜像最开始pull下载的时候是有镜像名称和标签版本号名称的,比如redis官方发布了一个docker镜像6.0版本,过了一段时间发现6.0版本的镜像有可能存在安全问题,所以重新构建了一个6.0版本的镜像。
镜像名称redis和6.0的TAG都被新发布的镜像占用了,旧版本的镜像就丢失了镜像名称和标签,变成了虚悬镜像。
一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,使用下面的命令删除:
```
docker image prune
```
## 七、删除本地镜像
下面的两种语法都可以完成镜像删除的操作:
```
docker rmi [选项] <镜像1> [<镜像2>.....]
docker image rm <镜像1> [<镜像2>.....]
```
上文语法中可以使用 镜像ID、镜像名作为镜像的唯一标识用来删除镜像。常用的[选项]是`-f`表示强制删除,有的时候同一个镜像上传到多个仓库,此时镜像ID就不再是唯一标识,需要使用`-f`强制删除才能删除镜像(具有同一个镜像ID的所有本地镜像全部删除)。
> 需要注意的是:删除镜像之前必须确认被删除的镜像,没有被任何容器使用,否则无法删除。
如下所示,删除hello-world镜像的响应结果。
~~~
# docker rmi hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359
~~~
## 八、镜像的导入导出
用 save 子命令将本地仓库的镜像保存为当前目录下的tar文件。
```
docker save -o <自定义包名>.tar <镜像名称>
```
如下面的命令将 hello-world镜像导出为一个helloworld.tar存放在当前目录
~~~
docker save -o helloworld.tar hello-world
~~~
我们可以在另一台服务器上,将hello-world镜像导入,导入方法如下:
**导入方式一(不输出详细信息)**:
~~~
# docker load -i helloworld.tar
~~~
**导入方式二(输出详细信息)**:
~~~
# docker load < helloworld.tar
~~~
镜像导出导入功能可以用于镜像备份,在没有镜像仓库的公司中也可以使用这种tar包的方式传递镜像文件。
- 文档概要
- 第一章 docker基础
- docker介绍
- CentOS7安装docker
- 基础概念介绍
- 示例-docker安装nginx
- 镜像管理详解
- 容器管理详解
- 容器自启动与保活
- 使用IDEA工具远程管理
- 第二章 制作与管理镜像
- 镜像分层原理
- Dockerfile语法解析
- 使用Dockerfile构建镜像
- 制作Springboot镜像
- registry v2镜像仓库搭建
- 第三章 docker数据管理
- docker存储驱动
- 数据管理-Bind mounts
- 数据管理-Volumes
- 容器间数据共享
- 第四章 Docker容器安全
- 用户提权问题实验
- 非root用户安装使用Docker
- API认证接口使用HTTPS
- 资源配额限制
- 第五章 Docker网络基础
- docker网络基础概念
- docker基础网络模式
- overlay跨宿主机通信
- 配置DNS服务
- 第六章 DockerCompose
- 安装与入门
- 一键部署wordpress
- Harbor的搭建与使用
- YAML配置文件详解
- 第七章 Docker Swarm
- 几乎没人用就不写了
- 附录
- CentOS7内核升级
- docker引擎及容器日志
- 离线挂载yum源
- 笔者其他作品推荐
- vue深入浅出系列
- 手摸手教你Spring Boot2.0
- Spring Security-JWT-OAuth2一本通
- 实战前后端分离RBAC权限管理系统
- 实战SpringCloud微服务从青铜到王者