Docker镜像仓库(Repository)负责镜像文件的存储和分发的工作,也被称为registry;Docker客户端执行pull和push操作时与Docker仓库进行镜像交互。Docker的官方镜像仓库https://index.docker.io/v1/ 。在Docker客户端,执行docker info命令,查询docker配置的镜像仓库地址;
Docker私有镜像仓库主流的软件有Docker registry(Distribution), Harbor和Nexus。
Docker Registry搭建
1,下载registry image
代码语言:javascript复制docker pull registry
官方的 registry 镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。通过 -v 参数来将镜像文件存放在本地的指定路径
2,创建镜像本地存储目录 /usr/local/registry
代码语言:javascript复制mkdir -p /usr/local/registry
docker run 运行 registry
代码语言:javascript复制docker run -d
-p 5000:5000
-v /usr/local/registry:/var/lib/registry
registry
查看容器端口映射
代码语言:javascript复制docker port gallant_pare
5000/tcp -> 0.0.0.0:5000
5000/tcp -> :::5000
3,配置连接私有仓库(修改/etc/docker/daemon.json文件)
vim /etc/docker/daemon.json
代码语言:javascript复制{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"insecure-registries": ["http://192.168.100.221:5000"]
}
4,私有仓库上传、搜索、下载镜像
创建好私有仓库之后,使用 docker tag 来标记镜像,然后推送它到仓库。私有仓库地址为 127.0.0.1:5000
查看本地镜像
代码语言:javascript复制docker image ls
5,镜像标记
命令格式
docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]
标记nginx镜像
代码语言:javascript复制docker tag nginx 192.168.100.221:5000/nginx:v1.0
6,上传镜像
代码语言:javascript复制docker push 192.168.100.221:5000/nginx:v1.0
7,curl 查看仓库中的镜像
代码语言:javascript复制[root@docker01 /]# curl http://192.168.100.221:5000/v2/_catalog
8,删除本地image
代码语言:javascript复制docker rmi 192.168.100.221:5000/nginx:v1.0
9,镜像存储目录查看镜像文件
代码语言:javascript复制[root@docker01 v2]# cd /usr/local/registry/docker/registry/v2
[root@docker01 v2]# ls
blobs repositories
10,拉取私有仓库镜像
代码语言:javascript复制docker pull 192.168.100.221:5000/nginx:v1.0
Docker私有仓库Registry服务器开启认证配置
1,创建用户认证密码文件
用户:useradmin 密码:userpassword
创建用户账户存储目录
代码语言:javascript复制mkdir auth
docker创建密码文件
代码语言:javascript复制docker run
--entrypoint htpasswd
httpd:2 -Bbn useradmin userpassword > auth/htpasswd
系统命令创建密码文件
代码语言:javascript复制yum install -y httpd-tools
#
mkdir auth
#
htpasswd -Bbn admin admin123 >> auth/htpasswd
2,启动registry
代码语言:javascript复制docker run -d
-p 5000:5000
--restart=always
--name registry
-v "$(pwd)"/auth:/auth
-v /var/lib/registry:/var/lib/registry
-e "REGISTRY_AUTH=htpasswd"
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
registry:2
-v "$(pwd)" 当前工作目录
--restart=always,在容器退出时总是重启容器
查看容器日志
代码语言:javascript复制docker logs -f --tail 20 registry
3,通过浏览器验证
代码语言:javascript复制访问http://ip:5000/v2/_catalog
4,使用docker login登录私有仓库
代码语言:javascript复制docker login http://192.168.100.221:5000
Username: admin
Password:
Login Succeeded
用户名和密码存储在/root/.docker/config.json文件,可编辑该文件
登录:docker login -u username -p userpasswd http://192.168.100.221:5000
退出:docker logout http://192.168.100.221:5000
5,标记 registry镜像
代码语言:javascript复制docker image tag registry 192.168.100.221:5000/registry:v202211
#查看本地image
docker image ls
6,推送本地 imgae 到私有仓库
代码语言:javascript复制docker image push 192.168.100.221:5000/registry:v202211
7,curl访问验证
代码语言:javascript复制[root@docker01 /]# curl -u admin http://192.168.100.221:5000/v2/_catalog
Enter host password for user 'admin':
{"repositories":["nginx","registry"]}
8,删除本地 registry:v202211 镜像
代码语言:javascript复制docker image rm 192.168.100.221:5000/registry:v202211
9,私有仓库下载镜像测试
代码语言:javascript复制docker pull 192.168.100.221:5000/registry:v202211