# 5. Docker倉庫
一個容易混淆的概念是注冊服務器(Registry)。 實際上注冊服務器是管理倉庫的具體服務器,每個服務器上可以有多個倉庫,而每個倉庫下面有多個鏡像。從這方面來說, 倉庫可以被認為是一個具體的項目或目錄。例如對于倉庫地址`registry.hub.docker.com/ubuntu` 來說,`registry.hub.docker.com`是注冊服務器地址,`ubuntu`是倉庫名。大部分時候,并不需要嚴格區分這兩者的概念。
## 5.1. Docker Hub
目前 Docker 官方維護了一個公共倉庫 Docker Hub:[https://hub.docker.com](https://hub.docker.com/)
我們可以在 Docker Hub 上完成注冊。這樣就可以使用 Docker Hub 來托管我們的鏡像了。
通過`docker search`命令來查找官方倉庫中的鏡像,并利用`docker pull` 命令來將它下載到本地。
```text
$ docker search alpine
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
alpine A minimal Docker image based on Alpine Linux… 7869 [OK]
mhart/alpine-node Minimal Node.js built on Alpine Linux 483
anapsix/alpine-java Oracle Java 8 (and 7) with GLIBC 2.28 over A… 473 [OK]
frolvlad/alpine-glibc Alpine Docker image with glibc (~12MB) 268 [OK]
alpine/git A simple git container running in alpine li… 191 [OK]
```
## 5.2. 使用國內鏡像
參考地址:[https://www.docker-cn.com/registry-mirror](https://www.docker-cn.com/registry-mirror)
臨時性的使用:
```text
$ docker pull registry.docker-cn.com/library/alpine:3.13.6
3.13.6: Pulling from library/alpine
4e9f2cdf4387: Pull complete
Digest: sha256:2582893dec6f12fd499d3a709477f2c0c0c1dfcd28024c93f1f0626b9e3540c8
Status: Downloaded newer image for alpine:3.13.6
docker.io/library/alpine:3.13.6
```
永久性的使用:
修改 `/etc/docker/daemon.json` 文件(沒有的話可以手動創建,需要通過`root`用戶操作)并添加上 registry-mirrors 鍵值。
```javascript
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
```
修改保存后重啟 Docker 服務以使配置生效。
```text
$ systemctl restart docker
1
```
## 5.3. Docker 私有倉庫搭建
### 5.3.4
```text
$ curl -XGET http://registry:5000/v2/_catalog
$ curl -XGET http://registry:5000/v2/image_name/tags/list
```