Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。
公有仓库
Docker官方的一个公共仓库Docker Hub
可以注册登录,去进行仓库的管理。也可以通过命令行的交互方式进行登录管理。
私有仓库
Dockers不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库。
‘docker-registry’是官方提供的工具,可以用于构建私有的镜像仓库。
安装运行docker-registry
下载resistry镜像
1
2
3
4
5
6
7
8
9
10docker@default:~$ docker image pull registry
Using default tag: latest
latest: Pulling from library/registry
ab7e51e37a18: Pull complete
c8ad8919ce25: Pull complete
5808405bc62f: Pull complete
f6000d7b276c: Pull complete
f792fdcd8ff6: Pull complete
Digest: sha256:9d295999d330eba2552f9c78c9f59828af5c9a9c15a3fbd1351df03eaad04c6a
Status: Downloaded newer image for registry:latest启动容器
1
2
3
4
5docker@default:~$ docker container run -d -p 5000:5000 registry
36eddf7acb88e4cc3972c7070ef00d444930ff099dce6e150e504849a429e595
docker@default:~$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
36eddf7acb88 registry "/entrypoint.sh /e..." 15 seconds ago Up 14 seconds 0.0.0.0:5000->5000/tcp nifty_jackson
默认情况下,会将仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,如下:1
docker container run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
私有仓库管理
上传
a. 这里用’hello-world’做例子(已经下载了在本地)。
b. 接着修改一下此镜像的Tag(格式:docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]
):
在一个Server上做的测试,所以Host是本机1
2
3
4
5docker@default:~$ docker image tag hello-world 127.0.0.1:5000/hello-world:v5
docker@default:~$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
127.0.0.1:5000/hello-world v5 f2a91732366c 2 weeks ago 1.85kB
hello-world latest f2a91732366c 2 weeks ago 1.85kBc. 接下来把打了tag的镜像上传到私有仓库。
1
2
3
4docker@default:~$ docker image push 127.0.0.1:5000/hello-world
The push refers to a repository [127.0.0.1:5000/hello-world]
f999ae22f308: Pushed
v5: digest: sha256:8072a54ebb3bc136150e2f2860f00a7bf45f13eeb917cca2430fcd0054c8e51b size: 524搜索
在Private Registry2中查看或检索Repository或images,将不能用docker search,会报下边的错误1
2docker@default:~$ docker search 127.0.0.1:5000/hello-world
Error response from daemon: Unexpected status code 404但通过v2版本的API,我们可以实现相同目的,必须按照
IP:port/v2/_catalog
格式:1
2docker@default:~$ curl 127.0.0.1:5000/v2/_catalog
{"repositories":["hello-world"]}下载
a. 先删除已有镜像1
2
3
4
5
6docker@default:~$ docker image rm 127.0.0.1:5000/hello-world:v5
Untagged: 127.0.0.1:5000/hello-world:v5
Untagged: 127.0.0.1:5000/hello-world@sha256:8072a54ebb3bc136150e2f2860f00a7bf45f13eeb917cca2430fcd0054c8e51b
docker@default:~$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest f2a91732366c 2 weeks ago 1.85kBb. 再pull验证
1
2
3
4
5
6
7
8ocker@default:~$ docker image pull 127.0.0.1:5000/hello-world:v5
v5: Pulling from hello-world
Digest: sha256:8072a54ebb3bc136150e2f2860f00a7bf45f13eeb917cca2430fcd0054c8e51b
Status: Downloaded newer image for 127.0.0.1:5000/hello-world:v5
docker@default:~$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
127.0.0.1:5000/hello-world v5 f2a91732366c 2 weeks ago 1.85kB
hello-world latest f2a91732366c 2 weeks ago 1.85kB