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 镜像名称:版本
记录一下搭建的过程,如有错误或不妥之处,还望指出