docker私有仓库搭建

搭建环境

私有仓库机:192.168.100.21

生产环境:192.168.100.22

 

搭建私有仓库

  在21机器上下载registry镜像

# docker pull registry  

  先启动容器(容器内/var/lib/registry是存放镜像的,所有挂载一个本地目录上去放在容器被删除,容器内具体位置自己查看)

# docker run -d -p 5000:5000 --name sonfer -v /tmp/registry:/var/lib/registry f32a97de94e1

  在容器找镜像地址

# docker exec -it sonfer sh
/ # ls /tmp
/ # 
/ # find / -name registry
/var/lib/registry
/var/lib/registry/docker/registry
/bin/registry
/etc/docker/registry
/ # 
/ # exit

  我们重新启动下 registry

# docker run -d -p 5000:5000 -v /tmp/registry:/var/lib/registry  -v /data/config.yml:/etc/docker/registry/config.yml  sonfer

// /data/config.yml 这个是什么呢?我们在下面删除仓库镜像介绍

// 这里需要说明一点,在启动仓库时,需在配置文件中的storage配置中增加delete=true配置项,允许删除镜像。默认的镜像是没有这个参数

  可以看到我们启动了一个容器,地址为:192.168.100.21:5000

 

测试

  接下来我们就要操作把一个本地镜像push到私有仓库中。首先在21机器下pull一个比较小的镜像来测试(此处使用的是nginx)。

docker pull nginx

  修改镜像tag(这里我使用云服务器搭建,使用localhost比较快;其他在局域网中写IP比较明了

# docker tag nginx:latest 192.168.100.21:5000/nginx:v1

  上传到私有仓库

# docker push 192.168.100.21:5000/nginx:v1

  可以看到 push 失败:

 Error: Invalid registry endpoint https://192.168.0.153:5000/v1/: Get https://192.168.0.153:5000/v1/_ping: dial tcp 192.168.0.153:5000: connection refused. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry 192.168.112.136: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/192.168.0.153:5000/ca.crt 

  因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。修改docker启动配置文件:

vim  /usr/lib/systemd/system/docker.service 
找到 ExecStart
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.153:5000

  红色字体是添加的

  

  或者在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:

{ "insecure-registries":["192.168.1.100:5000"] }

  

{
  "registry-mirrors": ["https://75ssp5b7.mirror.aliyuncs.com"],
  "insecure-registries":["192.168.0.189:5000"]
}

  

 

  重启docker

systemctl daemon-reload
systemctl restart docker

  重启完之后我们再次运行推送命令,把本地镜像推送到私有服务器上。

# docker push 192.168.100.21:5000/nginx:v1

  接下来我们从私有仓库中pull下来该镜像。

docker pull 192.168.100.21:5000/nginx:v1

  查看镜像

# curl -XGET http://192.168.100.21:5000/v2/_catalog
{"repositories":["centos","mysql","nginx"]}


# curl -XGET http://192.168.100.21:5000/v2/image_name/tags/list
{"errors":[{"code":"NAME_UNKNOWN","message":"repository name not known to registry","detail":{"name":"image_name"}}]}

  

  

posted @ 2019-03-08 17:50  枯藤老艹树  阅读(543)  评论(0编辑  收藏  举报