搭建Docker Registry私服
重复一次之前的动作,搞一个服务器,在Docker Hub https://hub.docker.com 上搜 Registry ,第一个也是标星最多的那个就是了。拖进Docker docker pull registry
。然后新建/usr/local/docker/registry/docker-compose.yml ,写入:
version: '3.1'
services:
registry:
image: registry
restart: always
container_name: registry
ports:
- 5000:5000
volumes:
- /usr/local/docker/registry/data:/var/lib/registry
然后dicker-compose up
,为喜欢看一眼后台跑起来的样子,就不-d
了。
后台跑起来之后,浏览器试一下 http://192.168.111.133:5000/v2/ ,这是出现了
说明Registry私服就搭建好了,因为还没有往上推镜像,所以里面没有内容。
搭建好之后,还需要配置一下,目的是再往docker里拖镜像的时候先从自己搭建的Registry私服里找。找到之前配置docker国内加速的/etc/docker/daemon.json文件,修改为如下:
{
"registry-mirrors": [
"https://registry.docker-cn.com"
],
"insecure-registries": [
"192.168.111.133:5000"
]
}
然后重启服务,
sudo systemctl daemon-reload
sudo systemctl restart docker
重启后看一看配置成功里没有,输入docker info
,有这一项,说明行了。
至此,Registry私服就搭建好也能用了,如果有需要,还可以再部署docker-registry-frontend 或 docker-registry-web等浏览器图像界面。
************************************昏割一下****
现在开始试一试,往私服里推拖镜像。
先往docker里拖一个hello-world镜像docker pull hello-world
。
docker images
看到hello-world已经有了。
然后要用到命令 “docker tag : 标记本地镜像,将其归入某一仓库” ,语法规则为
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
IMAGE[:TAG]
就是 hello-world:latest ,
[REGISTRYHOST/]
就是 192.168.111.133:5000/ ,
[USERNAME/]
就是 creolophuth/ ,
NAME
别变了,还是 hello-world ,
[:TAG]
版本号,指定为 :1.0.0 ,
完整的命令就是
docker tag hello-world:latest 192.168.111.133:5000/creolophuth/hello-world:1.0.0
标记好之后,docker images
一下,看到镜像已经有了,然后推到Registry私服上:
docker push 192.168.111.133:5000/creolophuth/hello-world
显示已推
查看全部镜像
curl -XGET http://192.168.111.133:5000/v2/_catalog
如果库里镜像太多,可以查看指定镜像
curl -XGET http://192.168.111.133:5000/v2/creolophuth/hello-world/tags/list
两个命令都试一下,都能找到,说明镜像已经推到私服库里了
现在已经推上去了,接下来试试往docker里拖,拖之前先把docker里的镜像先删掉
docker rmi hello-world
docker rmi 192.168.111.133:5000/creolophuth/hello-world
输第二条命令后报错了Error: No such image: 192.168.111.133:5000/creolophuth/hello-world
,可能因为两个镜像hello-world和192.168.111.133:5000/creolophuth/hello-world的id是一样的,但是docker images
后192.168.111.133:5000/creolophuth/hello-world还在那没有变成虚悬镜像。
那么直接用id删除试试
docker rmi fce289e99eb9
控制台显示成功了,docker images
后也干净了。
现在从私服库往docker拖hello-world镜像
docker pull 192.168.111.133:5000/creolophuth/hello-world:1.0.0
显示成功 Pull complete
。docker images
后发现镜像已经进去了,需要注意的是,如果不输入版本号,docker默认会去找latest版本,而我没有把1.0.0指定为latest,库里也没有latest,会导致拖镜像失败。
至此,开发前的准备工作就算做完了有了Gitlab、Nexus、Registry的私服,在不连外网的条件下也能完成开发了(但是库里得有东西)。