Docker - Repository

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

公有仓库

Docker官方的一个公共仓库Docker Hub

可以注册登录,去进行仓库的管理。也可以通过命令行的交互方式进行登录管理。

私有仓库

Dockers不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库。
‘docker-registry’是官方提供的工具,可以用于构建私有的镜像仓库。

安装运行docker-registry

  1. 下载resistry镜像

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    docker@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
  2. 启动容器

    1
    2
    3
    4
    5
    docker@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

私有仓库管理

  1. 上传
    a. 这里用’hello-world’做例子(已经下载了在本地)。
    b. 接着修改一下此镜像的Tag(格式:docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]):
    在一个Server上做的测试,所以Host是本机

    1
    2
    3
    4
    5
    docker@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.85kB

    c. 接下来把打了tag的镜像上传到私有仓库。

    1
    2
    3
    4
    docker@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
  2. 搜索
    在Private Registry2中查看或检索Repository或images,将不能用docker search,会报下边的错误

    1
    2
    docker@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
    2
    docker@default:~$ curl 127.0.0.1:5000/v2/_catalog
    {"repositories":["hello-world"]}
  3. 下载
    a. 先删除已有镜像

    1
    2
    3
    4
    5
    6
    docker@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.85kB

    b. 再pull验证

    1
    2
    3
    4
    5
    6
    7
    8
    ocker@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
唐胡璐 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
分享创造价值,您的支持将鼓励我继续前行!