一、Docker搭建registry 私人仓库简易版
docker run --restart=always --name=registry2.3 -v /home/registry/data:/var/lib/registry -d -p 5000:5000 registry:2.3
说明: -v /home/registry/data:/var/lib/registry 是把镜像存储目录挂载到宿主机,才不会删容器导致数据丢失
这样就可以运行使用registry:2.3,但是这是对所有人开放,并不安全,更好的方案是结合第三方存储服务,如阿里云OSS,并且需要给registry加上登录验证,以及一些权限的限制。
二、Docker搭建registry 私人仓库进化版
使用docker-compose 来进行部署,废话不多说直接来操作。
首先切换到/home 目录(我一般是使用centos 7 , home目录为基础使用目录,具体看个人)
-
未结合OSS版
在/home目录创建一个registry目录并进入该目录:
mkdir registry && cd registry
在当前目录创建docker-compose.yml:
registry:
restart: always
image: "registry:2.3"
ports:
- 5000:5000
environment:
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
volumes:
- ./auth:/auth
- ./data:/var/lib/registry
在启动 Registry 服务时,需要用到以下两个目录
(1)auth 目录用于存放 docker login 时的账号和密码
(2)data 目录用于存放 docker push 时上传上来的文件
执行以下命令新建这两个目录:
mkdir auth && mkdir data
然后,创建一个测试账号(用户名: admin ,密码: 123456 )并保存到 auth/htpasswd 中:
htpasswd -Bbn test 123456 > auth/htpasswd
最后就可以来启动 Registry 服务:
docker-compose up -d
docker ps 可以看到已经run起来的容器:
[root@myali1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26895a32e59a registry:2.3 "/bin/registry /etc/d" 8 hours ago Up 8 hours 0.0.0.0:5000->5000/tcp registry_registry_1
简单示例 push 镜像到私人仓库
执行以下命令创建一个新镜像:
docker tag docker.io/busybox 127.0.0.1:5000/test/busybox
说明:镜像名为 127.0.0.1:5000/test/busybox ,其中 127.0.0.1:5000 表示服务器地址, test/busybox 表示镜像名。
上传之前要先登录:
docker login 127.0.0.1:5000
根据提示输入账号密码或者一步到位:
docker login -u admin -p 123456 127.0.0.1:5000
登陆成功后,执行以下命令即可上传
docker push 127.0.0.1:5000/test/busybox
最后通过浏览器访问 : http://ip:5000/v2/_catalog 会提示输入账号密码,输入账号密码之后你就可以看到刚刚push上来的镜像。
{
"repositories": [
"test/busybox"
]
}
-
结合阿里云 OSS
将文件 docker-compose.yml 改为以下内容:
registry:
restart: always
image: "registry:2.3"
ports:
- 5000:5000
environment:
- REGISTRY_AUTH=htpasswd
- REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm
- REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
- REGISTRY_STORAGE=oss
- REGISTRY_STORAGE_OSS_ACCESSKEYID=你的ACCESSKEYID
- REGISTRY_STORAGE_OSS_ACCESSKEYSECRET=你的ACCESSKEYSECRET
- REGISTRY_STORAGE_OSS_REGION=你的OSS所属地域
- REGISTRY_STORAGE_OSS_BUCKET=你的BUCKET名称
- REGISTRY_STORAGE_OSS_INTERNAL=false #是否走内网
- REGISTRY_STORAGE_OSS_SECURE=false
- REGISTRY_STORAGE_DELETE_ENABLED=true
volumes:
- ./auth:/auth
说明:由于使用阿里云 OSS 作为存储引擎,所以不需要再将文件存储到本地,因此将 volumes 中的 data 目录配置去掉; environment 新增了一些配置参数,需根据具体情况进行修改
删除 data 目录和就镜像并重新启动服务:
docker rm -fv registry_registry_1 && rm -Rf data && docker-compose up
重新push 镜像然后去OSS控制台查看镜像是否正常存储到OSS服务
网友评论