docker-本地镜像发布到私有库

本地镜像发布到私有库

本地镜像发布到私有库流程

官方Docker Hub地址:https://hub.docker.com/ 中国大陆访问太慢了且准备被阿里云取代的趋势,不太主流。

Dockerhub、阿里云这样的公共镜像仓库可能不太方便,涉及机密的公司不可能提供镜像给公网,所以需要创建一个本地私人仓库供给团队使用,基于公司内部项目构建镜像。Docker Registry是官方提供的工具,可以用于构建私有镜像仓库

  • Docker Registry

将本地镜像推送到私有库

下载镜像Docker Registry

1
docker pull registry

运行私有库Registry,相当于本地有个私有Docker hub

1
docker run -d -p 5000:5000  -v d:/ives/myregistry/:/tmp/registry --privileged=true registry

默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便于宿主机联调

案例演示创建一个新镜像,ubuntu安装ifconfig命令

从Hub上下载ubuntu镜像到本地并成功运行

1
docker run -it ubuntu /bin/bash

原始的Ubuntu镜像是不带着ifconfig命令的

外网连通的情况下,安装ifconfig命令并测试通过

docker容器内执行上述两条命令:

1
2
apt-get update
apt-get install net-tools

安装完成后,commit我们自己的新镜像

1
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]

命令:在容器外执行,记得

1
docker commit -m="ifconfig cmd add" -a="ives" 592ed124af78 ifconfigubuntu:1.2

官网是默认下载的Ubuntu没有ifconfig命令

我们自己commit构建的新镜像,新增加了ifconfig功能,可以成功使用。

查看一下commit有没有成功

1
2
3
docker images

ifconfigubuntu 1.2 2cc733cce37f 7 seconds ago 116MB

curl验证私服库上有什么镜像

curl http://127.0.0.1:5000/v2/_catalog

curl http://172.22.0.27:5000/v2/_catalog

可以看到,目前私服库没有任何镜像上传过。。。。。。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
StatusCode        : 200
StatusDescription : OK
Content : {"repositories":[]}

RawContent : HTTP/1.1 200 OK
Docker-Distribution-Api-Version: registry/2.0
X-Content-Type-Options: nosniff
Content-Length: 20
Content-Type: application/json; charset=utf-8
Date: Thu, 20 Apr 2023 01:41:09 GMT...
Forms : {}
Headers : {[Docker-Distribution-Api-Version, registry/2.0], [X-Content-Type-Options, nosniff], [Content-Lengt
h, 20], [Content-Type, application/json; charset=utf-8]...}
Images : {}
InputFields : {}
Links : {}
ParsedHtml : System.__ComObject
RawContentLength : 20

将新镜像ifconfigubuntu:1.2修改符合私服规范的Tag

1
docker   tag   镜像:Tag   Host:Port/Repository:Tag

使用命令

1
docker tag ifconfigubuntu:1.2 127.0.0.1:5000/ifconfigubuntu:1.2

查看是否成功 docker images

1
127.0.0.1:5000/ifconfigubuntu                       1.2             2cc733cce37f   About a minute ago   116MB

修改配置文件使之支持http

这一步看情况,新版本有可能已经不用

1
2
3
{
"insecure-registries":["172.22.0.27","127.0.0.1"]
}

push推送到私服库

docker push 127.0.0.1:5000/ifconfigubuntu:1.2

curl验证私服库上有什么镜像

curl http://127.0.0.1:5000/v2/_catalog

pull到本地并运行

删除所有的

1
docker rmi -f 

重新拉

1
docker pull 127.0.0.1:5000/ifconfigubuntu:1.2
1
docker run -it 镜像ID /bin/bash