
[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官方提供的鏡像,安全性穩定性都是有保證的。

* 第二種方式可以使用`docker search`來搜索鏡像,
我們也可以使用 命令來搜索鏡像。比如我們需要一個tomcat的鏡像來作為我們的web服務。我們可以通
過 docker search 命令搜索tomcat來尋找適合我們的鏡像。
```
docker search redis
```
OFFICIAL字段值為OK的那一條記錄為官方的鏡像。

## 四、拉取鏡像
從 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
```

* REPOSITORY:倉庫及鏡像名稱
* TAG:標簽及版本號
* IMAGE ID:鏡像ID,鏡像的唯一標識
* CREATED:該鏡像的構建時間
* SIZE: 該鏡像文件的大小
## 六、虛懸鏡像
在鏡像列表中,可能會存在一種特殊的鏡像,該鏡像既沒有倉庫名/鏡像名稱,也沒有標簽/版本號,這兩個位置均顯示`<none>`,這種鏡像通常被稱為**虛懸鏡像**,如下入所示。

**虛懸鏡像產生的原因是什么?**
其實虛懸鏡像最開始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微服務從青銅到王者