当前位置: 首页 > news >正文

docker如何建立本地私有仓库,并将docker镜像推到私有仓库

在 Docker 中,您可以通过 Docker Registry 创建本地私有仓库,并将 Docker 镜像推送到这个私有仓库。以下是具体步骤:

步骤 1:启动一个本地 Docker 私有仓库

  1. 拉取 registry 镜像
    Docker 官方提供了一个 registry 镜像,可以用来运行私有仓库。首先,您需要从 Docker Hub 拉取这个镜像:

    docker pull registry
    
  2. 启动私有仓库容器
    使用 docker run 启动 registry 容器,映射到主机的 5000 端口:

    docker run -d -p 5000:5000 --name my-private-registry registry
    

    这将启动一个 Docker 容器,在本地的 5000 端口上运行私有仓库。

步骤 2:构建或标记 Docker 镜像

  1. 构建 Docker 镜像
    如果您还没有 Docker 镜像,可以通过 Dockerfile 构建镜像:

    docker build -t my-app:1.0 .
    
  2. 为镜像打标签
    Docker 需要通过特定的 URL 格式来识别私有仓库,因此您需要为镜像打上私有仓库的标签。格式为:<registry-ip>:<port>/<image-name>:<tag>

    假设私有仓库在本地运行,标签可以像这样:

    docker tag my-app:1.0 localhost:5000/my-app:1.0
    

步骤 3:推送镜像到私有仓库

  1. 推送镜像
    将打过标签的镜像推送到本地私有仓库:

    docker push localhost:5000/my-app:1.0
    
  2. 查看仓库中的镜像
    您可以通过以下命令验证仓库中是否有刚推送的镜像:

    curl http://localhost:5000/v2/_catalog
    

    这会列出当前私有仓库中所有可用的镜像。

步骤 4:从私有仓库拉取镜像

  1. 从私有仓库拉取镜像
    在其他机器或本地的 Docker 环境中,您可以使用以下命令从私有仓库拉取镜像:

    docker pull localhost:5000/my-app:1.0
    

步骤 5:配置仓库的持久化存储(可选)

如果您想让仓库中的镜像持久化存储在磁盘上,可以通过挂载主机目录到容器中实现:

docker run -d -p 5000:5000 --name my-private-registry \-v /path/to/your/local/storage:/var/lib/registry \registry

这样,所有推送到私有仓库的镜像将保存在 /path/to/your/local/storage 目录中。

步骤 6:配置 HTTPS(可选)

为了确保私有仓库的安全性,建议配置 HTTPS。简要步骤如下:

  1. 使用证书管理工具(如 openssl)生成 SSL 证书。

  2. 修改 registry 容器启动命令,挂载证书文件并启用 HTTPS:

    docker run -d -p 5000:5000 --name my-private-registry \
    -v /path/to/your/certs:/certs \
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
    -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
    registry
    

此时,您可以通过 HTTPS 推送和拉取镜像。

总结

  1. 启动本地私有仓库 docker run -d -p 5000:5000 --name my-private-registry registry
  2. 为镜像打标签 docker tag my-app:1.0 localhost:5000/my-app:1.0
  3. 将镜像推送到仓库 docker push localhost:5000/my-app:1.0
  4. 从私有仓库拉取镜像 docker pull localhost:5000/my-app:1.0

这就完成了创建本地私有 Docker 仓库并推送镜像的流程。

http://www.lryc.cn/news/465180.html

相关文章:

  • vllm启动大语言模型时指定chat_template
  • 网络相关(HTTP/TCP/UDP/IP)
  • TF卡长期不用会丢失数据吗?TF卡数据恢复容易吗?
  • Flink状态一致性保证
  • 前端一键复制解决方案分享
  • 麒麟操作系统swap使用率过高的排查思路
  • 爬虫python=豆瓣Top250电影
  • 【Eclipse系列】解决Eclipse中xxx.properties文件中文乱码问题
  • mysql主从复制及故障修复
  • 基于springboot的网上服装购物商城系统
  • aws(学习笔记第六课) AWS的虚拟私有,共有子网以及ACL,定义公网碉堡主机子网以及varnish反向代理
  • 接口测试(三)jmeter——连接mysql数据库
  • 双十一购物节有哪些好物值得入手?2024双十一好物清单合集分享
  • jmeter中请求参数:Parameters、Body Data的区别
  • Docker安装ActiveMQ镜像以及通过Java生产消费activemq示例
  • 迅为RK3562开发板/核心板240PIN引脚全部引出,产品升级自如
  • C++实现顺序栈和链栈操作(实验3--作业)
  • 龙兴物联一体机:设备监测的智能先锋
  • KinectDK相机SDK封装Dll出现k4abt_tracker_create()创建追踪器失败的问题
  • Linux 命令—— ping、telnet、curl、wget(网络连接相关命令)
  • 高速缓冲存储器Cache是如何工作的、主要功能、高速缓冲存储器Cache和主存有哪些区别
  • 极简版Java敏感词检测SDK
  • H3C路由器交换机操作系统介绍
  • 【项目案例】-音乐播放器-Android前端实现-Java后端实现
  • EasyX图形库的安装
  • 数据结构 - 队列
  • 基于springboot美食推荐商城的设计与实现
  • React开发一个WebSocket
  • Oracle DECODE 丢失时间精度的原因与解决方案
  • 如何用示波器检测次级点火系统(一)