docker registry
我们可以使用docker push将自己的image推送到docker hub中进行共享,但是在实际工作中,很多公司的代码不能上传到公开的仓库中,因此我们可以创建自己的镜像仓库。
docker 官网提供了一个docker registry的私有仓库项目,可以方便的通过docker部署。
docker run -d -p 5000:5000 --restart always --name registry registry:2
docker image tag ruoyi-java:4.7.4 localhost:5000/ruoyi-java:4.7.4
docker push localhost:5000/ruoyi-java:4.7.4
docker pull localhost:5000/ruoyi-java:4.7.4
docker push默认使用HTTPS协议,而服务端的registry仓库使用的是HTTP。
解决这个问题,需要修改/etc/docker/daemon.json,加入
"insecure-registries": ["192.168.10.133:5000"]
harbor
habor是一个功能更强大镜像仓库,它具有完整的权限控制和Web界面,更符合我们的实际工作场景。
保存与加载image
当我们处于离线状态,比如在很多内网上不能访问互联网,这时候不能通过镜像仓库的方式共享image,我们可以使用导出和导入功能,手动拷贝镜像。
docker save会包含所有层,以及所有标签 + 版本信息。
docker save alpine:3.15 > alpine-3.15.tar 保存image
docker rmi alpine:3.15 删除本地image
docker load < alpine-3.15.tar 加载image
注意:
不要跟export和import命令混淆
docker save/load IMAGE save和load操作的是镜像
docker export/import CONTAINERexport和import操作对象是容器
image包含多个层,每一层都不可变,save保存的信息包含每个层和所有标签 + 版本信息。
容器运行的时候会创建一个可写入的容器层,所有的更改都写入容器层,export导出的只有容器层,不包含父层和标签信息。
具体搭建流程
一 环境准备
安装docker和docker-compose
docker可选择二进制或yum安装(注意点:这里的如果是二进制安装,切忌不要配置zip,否则无法登录会报500或502错误)
curl -SL https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
##测试
docker-compose version
二 harbor下载
Release 1.2.2 · goharbor/harbor · GitHubhttps://github.com/goharbor/harbor/releases/tag/v1.2.2
v1.2 · Releases · goharbor/harbor (github.com)https://github.com/goharbor/harbor/releases?expanded=true&page=15&q=v1.2输入v1.2-第15页为1.22版本
建议直接下载,使用wget太慢
三 跟着以下文档操作
Docker 私有仓库 harbor 搭建_docker构建harbor-CSDN博客
四 出现问题
这个错误表明在尝试推送镜像时,Docker 发现本地不存在标签为 192.168.10.133/library/photon
的镜像。这可能是因为你尚未在本地构建或拉取过具有该标签的镜像。
1.构建镜像并打上标签:如果你已经有一个本地的镜像,并且希望将其推送到 192.168.10.133/library/photon
这个仓库,需要先为该镜像打上正确的标签,然后再进行推送
2. 推送的镜像于远程仓库中
总结:推送到指定的仓库的项目中,1.了解该项目推送命令 2.给要推送的镜像指定正确项目标签 3.推送
五、从A服务器推送镜像到安装harbor的B服务器
请参考 https://www.cnblogs.com/zhengwei-cq/p/16361213.html
要在/etc/docker/daemon.json中配置 insecure-registries字段
insecure-registries
是 Docker 配置文件中的一个字段,用于指定 Docker 客户端信任的不安全的容器注册表(或称为镜像仓库)的地址。当 Docker 客户端尝试与容器注册表建立连接时,如果注册表的地址匹配 insecure-registries
中指定的地址,则 Docker 客户端会允许与该注册表建立非安全的连接,即允许使用 HTTP 或未经验证的 HTTPS 连接。
默认情况下,Docker 客户端只信任使用 HTTPS 协议连接的容器注册表,而拒绝使用 HTTP 或未经验证的 HTTPS 连接。这是为了保证传输数据的安全性和完整性。但是,在一些情况下,如使用自签名证书、内部环境或者测试环境,你可能需要连接到不安全的容器注册表。