docker创建私有仓库及存储image

       Docker官方的Docker hub虽然提供了有很多image,也基本上包含了我们需要使用的,但是其访问起来比较慢,如果自己要定制image,多台服务器之间的共享使用此image非常不方便。这个时候我们就迫切需要一个本地的私有仓库了。下面的图说明了Docker私有仓库的作用。


      Docker私有仓库可以通过docker-registry项目来实现,通过http服务来上传下载。docker-registry在Docker hub上已有现成的image。

  $ docker search registry

     选择第1个,将其从Docker hub上down下来(最好带tag,不然会将所有的tag都down下来)。

  $ docker pull registry
     这个下载的过程有点长,耐心等待一下,O(∩_∩)O哈哈~。

  $ docker images
     registry镜像下下来后,通过下面的命令启动,并将registry的容器存储images的目录映射到宿主服务器的/opt/docker/registry目录。
  $ docker run -d -p 5000:5000 -v /opt/docker/registry:/tmp/registry registry

     启动以后在浏览器中输入http://主机IP:5000或者http://主机IP:5000/v1/search,如果有显示就说明Docker私有仓库已经建好了。下一步将本地的images push到Docker私有仓库

     现将本地的image打一个tag,新image名称必须带有"主机IP:5000",如下(我这里用127.0.0.1只是举例)。

REPOSITORY               TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry                 latest              5562556b14f9        8 days ago          422.9 MB
127.0.0.1:5000/registry  latest              5562556b14f9        8 days ago          422.9 MB
     如果缺少上面这一步,直接push image,会出现如下错误。

[docker@docker1 ~]$ docker push registry
The push refers to a repository [registry] (len: 1)
Sending image list
2014/10/27 15:48:25 Error: Status 403 trying to push repository registry: Account is not Active

       执行如下push命令后,可以在http://主机IP:5000/v1/search看到存储到Docker私有仓库的信息。

  $ docker push 127.0.0.1:5000/registry
       下次可以通过pull命令下载到其他服务器上,那可就快多了。pull的时候记得带"主机IP:5000",不然还是去Docker hub上下载而不是私有仓库下载,如下命令。

  $ docker pull 127.0.0.1:5000/registry

      到此,私有仓库存取image就可以了。


      如果是save/load的image,会出现下面的错误,对于这样的image,最好重新build相应的Dockerfile。

[docker@docker1 ~] $docker push 127.0.0.1:5000/nexus
The push refers to a repository [127.0.0.1:5000/nexus] (len: 1)
Sending image list
Pushing repository 127.0.0.1:5000/nexus (1 tags)

2014/10/27 14:50:37 HTTP code 400 while uploading metadata: {"error": "Missing key `id' in JSON"}


      docker1.3.0以后的版本,加入了认证机制,docker pull & push会报如下错误:

[docker@docker1 ~]$ docker push 127.0.0.1:5000/registry
2014/12/02 11:33:04 Error: Invalid registry endpoint https://127.0.0.1:5000/v1/: Get https://127.0.0.1:5000/v1/_ping: EOF. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 127.0.0.1:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/127.0.0.1:5000/ca.crt
      使用registry的服务器和客户端启动docker时都需要加上"--insecure-registry"参数,pull和push才可正常操作。如下命令(ip都是registry所在服务器的ip地址)。

[docker@docker1 ~]$ service docker stop
[docker@docker1 ~]$ nohup docker -H unix:///var/run/docker.sock --insecure-registry 127.0.0.1:5000 -d &
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建一个私有Docker 镜像仓库,你可以使用 Docker Registry。Docker Registry 是一个开源的镜像存储和分发的服务器端应用程序,可以用于存储和管理 Docker 镜像。以下是创建私有 Docker Registry 的步骤: 1. 安装 Docker Registry:首先,你需要在服务器上安装 Docker Registry。你可以通过运行以下命令来获取官方的 Docker Registry 镜像: ``` docker pull registry ``` 2. 启动 Docker Registry:运行以下命令来启动 Docker Registry 容器: ``` docker run -d -p 5000:5000 --restart=always --name registry registry ``` 这将在本地的 5000 端口上启动 Docker Registry。 3. 配置 Docker 客户端:要使用私有Docker Registry,你需要配置 Docker 客户端来允许连接到私有 Registry。编辑 Docker 配置文件 `/etc/docker/daemon.json`(Linux)或 `%USERPROFILE%\.docker\config.json`(Windows),并添加以下内容: ``` { "insecure-registries": ["your-private-registry-domain:5000"] } ``` 将 `your-private-registry-domain` 替换为你的私有 Registry 的域名或 IP 地址。 4. 重启 Docker 服务:重启 Docker 服务以使配置更改生效。 ``` sudo systemctl restart docker # Linux ``` 5. 推送和拉取镜像:现在,你可以使用 `docker push` 命令将本地的镜像推送到私有 Registry,或使用 `docker pull` 命令从私有 Registry 拉取镜像。 ``` docker push your-private-registry-domain:5000/your-image:tag docker pull your-private-registry-domain:5000/your-image:tag ``` 将 `your-image` 替换为你的镜像名称,`tag` 替换为你的标签。 这样,你就可以创建和使用私有Docker 镜像仓库了。请记住,私有 Registry 的访问权限需要进行适当的配置和管理,以确保只有授权的用户可以访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值