Skip to content
On this page

docker005 registry 仓库

官方文档: https://docs.docker.com/registry/configuration/

搭建私有仓库

从官方提供的registry镜像简单搭建一套本地私有仓库.

bash
# Step 1: 搭建仓库
# mkdir -pv /opt/data/registry # 没有的目录, docker会创建
docker run -d -p 5000:5000 \
    --restart=always \
    --privileged=true \
    -v /data/registry:/var/lib/registry \
    --name='registry' \
    registry:2

# 参数说明:
# -v /opt/data/registry:/tmp/registry 
#     默认情况下,会将仓库存放于容器内的/tmp/registry目录下,指定本地目录挂载到容器
# --privileged=true
#     CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,
#     不加上传镜像会报权限错误(OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary’)
#     或者(Received unexpected HTTP status: 500 Internal Server Error)错误

上传镜像到私有仓库

https://docs.docker.com/engine/reference/commandline/commit/

bash
registry_ip='10.10.10.101'
# Step 2:
# 对镜像做一些修改
docker run -it ubuntu bash
# 修改国内源,装vim net-tools等

# Step 3: 
# docker commit 镜像
docker commit -m="add mirrors, install vim net-tools" -a='okeyear@163.com' 2263bed44655 myubuntu:1.0
docker images
# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# OPTIONS说明:
#     -a :提交的镜像作者;
#     -c :提交时候执行的Dockerfile指令;
#     -m :提交时的说明文字;
#     -p :在commit时,将容器暂停。


# Step 4: 
# tag标记, 修改成符合私服规范的tag;   
# 如果已经打了tag, 可省略
# docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
docker tag myubuntu:1.0 ${registry_ip}:5000/myubuntu:1.0

# Step 5: 
# 修改docker配置文件/etc/docker/daemon.json, 允许http方式传输
# 因为是json格式, 这个粘贴进去之后,注意前后是否要加逗号
# "insecure-registries": ["${registry_ip}:5000"] ,
#	"insecure-registries": [
#		"10.10.10.10:5000"
#	]
    
service docker restart

# Step 6: 
# 上传前查看
curl -XGET http://${registry_ip}:5000/v2/_catalog
# push上传
docker push ${registry_ip}:5000/myubuntu:1.0
# 上传后查看
curl -XGET http://${registry_ip}:5000/v2/_catalog
# 查看所有的image和tag
for i in $(curl -XGET http://${registry_ip}:5000/v2/_catalog | jq '.repositories[] | tostring')
do 
    curl -s -XGET http://${registry_ip}:5000/v2/${i//\"/}/tags/list
done

从私有仓库下载镜像

bash
# Step 7: 
# pull下载, 在其他地方使用
# 需要在/etc/docker/daemon.json中registry-mirrors配置私有仓库地址
# 先删除本地的images
docker rmi ${registry_ip}:5000/myubuntu:1.0 myubuntu:1.0
# 从仓库pull一个
docker pull ${registry_ip}:5000/myubuntu:1.0
docker images

Last updated:

Released under the MIT License.