您的位置:首页 > 运维架构 > Docker

docker-5-搭建docker本地镜像仓库

2018-01-07 10:26 791 查看
拉官方的镜像比较慢,save或export的文件需要传来传去,搭建一个私人仓库就啥问题都没有了。

前提:安装好了docker-ce并能够正常使用
注意:本文中的client是我的hostname,请自行调整

搭建docker本地镜像仓库

先获取并运行docker官方的repository镜像
docker run -d -p 5000:5000 --restart always --name registry registry:2

--restart选项是在docker-ce启动时会自动启动,always是级别,stop掉了会不自动重启。

修改daemon.json文件(如果没有就创建)
vim /etc/docker/daemon.json
{
"insecure-registries": [
"repository:5000"
]
}

repository是主机名,可以使用ip,5000是运行registry时指定的端口,可以指定多个本地仓库,用,间隔

重启docker
systemctl restart docker

查看本地镜像



给本地镜像打标签
docker tag centos repository:5000/centos

repository:5000是本地仓库的地址
将本地镜像上传到本地镜像仓库
docker push repository:5000/centos

查看本地镜像仓库中镜像
curl -4 http://localhost:5000/v2/_catalog


获取镜像
docker pull repository:5000/centos

SSL所有仓库搭建

准备ssl证书,放哪都可以,只要你记得住

mkdir -p /data/registry
cd /data/registry
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ${HOSTNAME}.key -x509 -days 365 -out ${HOSTNAME}.crt
一路回车即可,会生成两个文件



准备docker-compose.yml文件(注意修改下面的${HOSTNAME},不要用变量)

version: '3'
services:
registry:
image: registry:2.6.1
hostname: registry
deploy:
restart_policy:
condition: on-failure
ports:
- 443:5000/tcp
networks:
registry:
aliases:
- registry
volumes:
- /var/lib/registry:/var/lib/registry:rw
- /data/registry:/certs
environment:
- REGISTRY_HTTP_TLS_KEY=/certs/${HOSTNAME}.key
- REGISTRY_HTTP_TLS_CERTIFICATE=/certs/${HOSTNAME}.crt
networks:
registry:
external: true


启动registry容器
docker-compose -p my up -d

这里可能会报错,要你手动创建网络,如果有了就不用管



docker network create registry

注:如果docker-compose之后镜像创建了,但是起不来,请用docker logs <images>查看日志,解决错误
连接测试
[root@client registry]# curl -k https://127.0.0.1/v2/_catalog {"repositories":[]}

配置客户端:
mkdir -p /etc/docker/certs.d/client
cp /data/registry/client.crt /etc/docker/certs.d/client/
systemctl restart docker
因为没有设置自动启动,需要手动启动
docker start my_registry_1
查看状态


用其他机器连接测试



上传镜像
docker tag centos:latest client:443/centos:latest

docker push client:443/centos:latest
报错
denied: requested access to the resource is denied
上传被拒绝
排查:
一、/etc/docker/daemon.json文件中是否指定私有仓库,指定的hostname和端口是否正确
"insecure-registries": [
"client:443"
]
二、私有仓库是否启动,防火墙是否开放其端口
三、daemon.json文件修改后是否生效(重启docker即可)
systemctl restart docker
四、上传的镜像名称是否正确(格式 hostname:port/image:version)

certificate is not valid for any names, but wanted to match repository

证书无效
解决方法:重启docker,重启repository容器

[参考:[官方文档](https://docs.docker.com/samples/library/registry/)
布小沫Docker入门级简易手册:https://github.com/buxiaomo/MarkdownBooks
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息