微服务的镜像会上传到 Docker 仓库保存,常用的公网 Docker 仓库有阿里云,网易云等,在企业局域网也可以搭建自己的 Docker 私有仓库,本教程使用 Docker 提供的私有仓库 registry。
1. 拉取私有仓库镜像
docker pull registry
2. 创建启动私有仓库容器
docker run -dit -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name docker-registry registry
参数说明
- -dit:在容器中打开一个伪终端进行交互操作, 并在后台运行
- -v:把宿主机的 /data/registry 目录挂载到容器 /var/lib/registry 目录(这个目录是 registry 容器中存放镜像文件的目录), 来实现数据的持久化
- -p:映射端口, 访问宿主机的 5000 端口就访问到 registry 容器的服务了
- –restart=always:这是重启的策略, 假如这个容器异常退出会自动重启容器
- –name docker-registry:创建容器命名为 docker-registry, 你可以随便命名
- registry:pull 下来的镜像
上边显示 registry 镜像已经创建,并且 docker-registry 容器已经启动成功。访问:http://139.9.40.41:5000/v2/_catalog,响应结果如下:
{"repositories":[]}
上边的响应结果说明在 docker 私有仓库中还没有镜像。
默认 docker-registry 只允许 https 提交镜像,如下配置使 docker-registry 支持 http,在 /etc/docker 下,创建 daemon.json 文件,写入:
{"insecure-registries": [ "139.9.40.41:5000"]
}
3. 重启 docker
systemctl restart docker
4. 镜像上传至私有仓库
标记此镜像为私有仓库的镜像
docker tag docker.io/hello-world 139.9.40.41:5000/hello-world:v1
上传标记的镜像
docker push 139.9.40.41:5000/hello-world:v1
列出所有镜像
[root@2 docker]# curl http://139.9.40.41:5000/v2/_catalog
{“repositories”:[“hello-world”]}