docker搭建私有仓库
参考资料
CentOS环境下Docker私有仓库搭建
Docker系列三:DockerHub私有仓库的搭建
教你分分钟搞定Docker私有仓库Registry
[Docker] Docker 私有仓库搭建教程(带用户验证)
手把手教你搭建Docker Registry私服
有了docker hub,为什么还要搭建docker私有仓库?
1、性能考虑:docker hub的访问要通过互联网,性能太低。
2、安全性:更多的时候,镜像不想被外部的人获取,虽然可以在docker hub上申请私有repository,但是需要付费。
-
- 安装docker
如下操作是在root用户下
yum -y install docker-io
启动docker
service docker start # 启动docker service docker stop # 停止docker service docker restart # 重启docker
- 搭建docker私有仓库
搭建docker私有仓库也是通过docker,真是就地取材。
1、首先下载registry镜像
docker pull registry:2
说明:
这里下载的是最新版本2。
2、启动registry镜像的容器
docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2
说明:
-d ==> 作为daemon进程启动,也就是后台启动
-v /myregistry:/tmp/registry ==> 默认情况下,会将仓库存放于容器内的/tmp/registry目录下,指定本地目录/myregistry挂载到容器,可以防止容器意外停止后镜像的丢失。
-p 5000:5000 ==> 前一个5000是host的端口,后一个是容器的端口。这里是将容器的5000端口映射到host的5000端口。
3、配置https权限支持
-
第一种(已测试)
-
vim /etc/docker/daemon.json
-
添加
-
{ "insecure-registries":["192.168.1.40:5000"] }重启docker服务
第二种(未测试)修改/etc/sysconfig/docker,我的文件内容如下
# /etc/sysconfig/docker # # Other arguments to pass to the docker daemon process # These will be parsed by the sysv initscript and appended # to the arguments list passed to docker -d other_args="--exec-driver=lxc --selinux-enabled --insecure-registry 100.90.61.14:5000" DOCKER_CERT_PATH=/etc/docker # Resolves: rhbz#1176302 (docker issue #407) DOCKER_NOWARN_KERNEL_VERSION=1 # Location used for temporary files, such as those created by # # docker load and build operations. Default is /var/lib/docker/tmp # # Can be overriden by setting the following environment variable. # # DOCKER_TMPDIR=/var/tmp # curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://2a5b5ce4.m.daocloud.io
说明:
--insecure-registry 100.90.61.14:5000,表示开启5000端口的非安全模式,也就是http模式。
重启docker服务
service docker restart
- 上传镜像到私有registry
先下载一个httpd镜像作为示例
docker pull httpd
修改一下该镜像的tag
# docker tag httpd 100.90.61.14:5000/kangaroo/httpd:v1
说明:
1)我们在镜像前面加上了运行私有registry的ip:port,这是必须的,只有访问docker hub的时候可以忽略ip:port。
2)kangaroo是我的网名,这里加上予以区分用户。
上传
上传镜像到私有registry
# docker push 100.90.61.14:5000/kangaroo/httpd:v1
在私有registry上查看镜像
# curl -XGET http://100.90.61.14:5000/v2/_catalog
{"repositories":["kangaroo/httpd"]}下载
从私有registry上下载镜像
删除本地镜像
docker rmi 100.90.61.14:5000/kangaroo/httpd:v1
从私有registry上下载
docker pull 100.90.61.14:5000/kangaroo/httpd:v1
查看本地镜像,可以看到已经拉下来了。
-
总结,想要使用私用仓库,必须修改http权限
上面搭建的是不需要用户登陆验证的,一般情况在正式项目中都需要用户登陆验证,下面就来创建用户密码
第一步 生成 用户名/密码 访问密钥 (这里设置用户名 abc , 密码 abc123)
2、 设置配置文件,启用删除镜像功能(也可以不启用,看业务需要,修改 storage - delete - enable 为 false 即可)
# mkdir -p /opt/registry-var/config # vim /opt/registry-var/config/config.yml version: 0.1 log: fields: service: registry storage: delete: enabled: true cache: blobdescriptor: inmemory filesystem: rootdirectory: /var/lib/registry http: addr: :5000 headers: X-Content-Type-Options: [nosniff] health: storagedriver: enabled: true interval: 10s threshold: 3
3、启动服务(这里将镜像路径映射到宿主机的 /opt/registry-var/ 文件夹下,可以根据需要修改)
docker run -d -p 5000:5000 --restart=always --name=registry -v /myregistry/config/:/etc/docker/registry/ -v /myregistry/auth/:/auth/ -v /myregistry/:/var/lib/registry/ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry:2
# docker run -d -p 5000:5000 --restart=always --name=registry\ -v /opt/registry-var/config/:/etc/docker/registry/ \ -v /opt/registry-var/auth/:/auth/ \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -v /opt/registry-var/:/var/lib/registry/ \ registry:2.5
4、登陆 docker login 192.168.81.224:5000
5、查看上传的镜像
注意,报下面的错误,可以用浏览器打开 或者
curl -u username:password http://
6、查看镜像详细信息
docker run -d -p 5000:5000 --restart=always --name=registry -v /myregistry/config/:/etc/docker/registry/ -v /myregistry/auth/:/auth/ -v /myregistry/:/var/lib/registry/ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry:2
删除私用仓库镜像:
https://blog.51cto.com/302876016/1966816
1、配置config.yml
2、查看img:v1.2的digest值
3删除
4查看是否删除