Docker提供了官方的公共镜像库,毕竟国外网站,速度很慢

阿里云和网易云也提供了Docker公共镜像库

以上都有一个缺点,就是都暴露在外。而公司自己的镜像一般都是放在公司自己的私有库上

搭建私有镜像库:

有docker基础的直接翻至文章结尾总结那几步即可。

docker search registry   查询registry镜像,这里是从docker官方 docker hub查询。配置了镜像加速器也是如此,加速器只是pull镜像速度快和上传镜像是在加速器上

docker pull registry 拉取registry镜像,本人是阿里云的镜像加速器,具体网上配置很多

运行镜像:docker run --name registry -d -p 5000:5000-v /docker/registry:/tmp/registry registry

-d  后台运行,不会有交互终端  -it运行就会有一个终端,退出容器后,容器也停止并退出了(ctrl+p+q不会)

-p 宿主机访问该容器的端口5000后面那个5000是docker内部运行的端口,自己设定就好

-v 挂载容器卷目录,第一个是宿主机目录/docker/registry  /tmp/registry第二个是docker容器的目录(上传的镜像默认是这个目录),目的为了持久化到宿主机

进入容器查看确认目录:docker exec -it 1e33b26152e1 /bin/sh      1e33b26152e1 为运行的容器ID      -it:以终端形式进入容器

目录无误,如果没有 查找下register目录位置  命令:find / -name registry  找到目录,停止容器,重新更改对应挂载目录运行registry镜像

新建一个文件config.yml放在宿主机的docker/registry目录,这是我自己新建的docker目录啊,不是安装docker的相关目录:

config.yml内容:

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

version: 0.1
log:
  fields:
    service: registry
storage:
  delete:
    enabled: true
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /tmp/registry
http:
  addr: 5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

 

重新运行registry容器,将配置文件挂载进去,配置挂载目录文件这些,是为了以后好修改配置文件和持久化到自己的宿主机

运行之前,把第一次运行的容器registry删了  不然名称重复

--name 取别名  docker rm -f registry 删除registry容器   

删除镜像多个i(images)    docker rmi -f xxxxx

重新运行:

docker run --name registry -d -p 5000:5000 -v /docker/registry:/tmp/registry registry

这样就运行了一个容器,地址为 服务器IP:5000

测试:

pull 一个镜像 docker pull busybox

docker tag busybox IP地址:5000/busybox:8.8      加上版本号的8.8是为了后面区分是自己的私有库还是配置阿里云加速器公有库的镜像,在push到自己私有库之前要给本地镜像打标签tag

push到自己私有库

docker push IP地址:5000/busybox:8.8

报错了:The push refers to repository [120.79.81.103:5000/busybox]
Get https://120.79.81.103:5000/v2/: dial tcp 120.79.81.103:5000: connect: connection refused

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

加上:"insecure-registries":["IP地址:5000"] 

registry-mirrors是自己的阿里云镜像加速器

centos7如果没有daemon.json文件,新建一个即可,docker默认找寻/etc/docker/目录下的daemon.json配置文件 

centos6.5貌似是/usr/lib/systemd/system/docker.service还是/etc/sysconfig/docker     具体忘了,如错误还请指出

操作系统版本不一样,linux内核不一样,配置文件位置也不一样

重启docker

systemctl restart docker       启动命令也分操作系统版本,有些是service docker restart  我的是centOS7 linux内核3.0

docker重启后现在容器已经关闭了。启动容器,docker start registry/容器ID也可以

docker push IP地址:5000/busybox:8.8         

返回以下信息,表示搭建成功。镜像已经推送到私有库

OK,成功

 

不知怎么的,镜像文件是放在了容器的/var/lib/registry/docker/registry这目录下面,应该是什么时候配置错了

删除容器重新运行registry镜像。

总结:

总的来说就几步,上面只是说得很详细而已

创建自己要挂载的宿主机目录和配置文件

1、pull registry镜像 

     docker pull registry

2、运行镜像

     docker run --name registry -d -p 5000:5000 -v /xxxx/xxx:/xxx/xxx/xx registry  自己挂载目录到宿主机

3、给本地镜像打标签

      docker tag xxxx IP地址:5000(端口)/自定义镜像名:版本

4、push到私有库

      docker push IP地址:5000(端口)/自定义镜像名:版本

5、查看挂载目录是否有上传的镜像

     

列出所有的镜像仓库(repositories):

# curl -X GET http://<registry_ip>:<registry_port>/v2/_catalog
curl -X GET http://IP地址:5000/v2/_catalog

或者浏览器访问:http://服务器IP:5000/v2/_catalog

其他服务器直接拉取镜像 docker pull 私有库服务器IP地址:5000 镜像名称:版本

记录一下搭建的过程,如有错误或不妥之处,还望指出

 

 

 

 

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐