Docker-镜像迁移的三种方式=>备份恢复公有仓库私有仓库

制作好的镜像要被别人使用,有三种方式:
1.先备份镜像,别人通过u盘或者其它方式拷贝后,再恢复镜像,这种方式比较麻烦
2.将制作的镜像上传到公共镜像仓库,被别人拉取后使用,但可能存在网络不通畅或者安全性问题
3.将制作的镜像上传到私有镜像仓库,被内部人员拉取后使用

下面我将介绍下这三种的具体操作步骤

文章目录

  • 镜像备份,再恢复
    • 第一步:镜像备份
    • 第二步:镜像恢复
  • 公共仓库上传再拉取
    • 注册docker hub仓库
    • 创建仓库repository
    • 上传镜像到仓库
    • 验证上传的镜像
    • 退出登录
  • 私有仓库上传再拉取
    • 拉取私有仓库镜像
    • 修改配置
    • 重新加载配置信息以及重启docker服务
    • 创建私有仓库的容器
    • 推送镜像到私有仓库
    • 配置私有仓库认证
      • 创建证书存储目录
      • 生成自签名证书命令
      • 生成鉴权文件
      • 创建私有仓库容器
      • 验证是否添加认证成功
      • 登录私有仓库
      • 上传镜像
      • 登出私有仓库
  • 总结

镜像备份,再恢复

镜像迁移涉及到两个步骤,备份和恢复。
我们可以将任何一个Docker镜像从一台机器迁移到另一台机器。在迁移的过程中,首先我们把容器构建为Docker镜像。然后,该Docker镜像被作为tar包文件保存到本地。此时只需要拷贝或移动该镜像到我们想要的机器上,恢复该镜像并运行容器即可

第一步:镜像备份

使用 docker save将指定的镜像保存成tar归档文件
docker save [OPTIONS] IMAGE [IMAGE…]
docker save -o /root/mycentos7.tar mycentos:7
-o:镜像打包后的归档文件输出的目录

第二步:镜像恢复

使用docker load导入docker save命令导出的镜像归档的文件
docker load [OPTIONS]
docker load -i mycentos7.tar

–input,-i:指定导入的文件
–quiet,-q:精简输出信息

公共仓库上传再拉取

注册docker hub仓库

登录https://hub.docker.com/signup上注册
在这里插入图片描述

创建仓库repository

注册登录后,点击repositories选项选择创建仓库
在这里插入图片描述
到创建仓库页面,主要输入仓库名称即可
在这里插入图片描述
待创建好以后到转到自己创建好的仓库内,里面已经为我们写好上传镜像的指令
docker push cyl01/test-cyl:tagname
在这里插入图片描述

上传镜像到仓库

我将本地的mysql5.7镜像添加到docker hub仓库内,我首先先登录docker hub
输入指令 sudo docker login
在这里插入图片描述
执行指令打标签sudo docker tag mysql:5.7 cyl01/test-cyl:1.0.0
标签打完后再上传 sudo docker push cyl01/test-cyl:1.0.0
在这里插入图片描述

验证上传的镜像

登录到docker hub上查看自己的repository,tags标签页下出现镜像1.0.0即上传成功
在这里插入图片描述

退出登录

通过docker logout命令退出DockerHub

私有仓库上传再拉取

DockerHub为我们提供了官方镜像和我们上传的镜像,我们可以下载机构或者个人提供的镜像,也可以上传我们的本地镜像,但缺点是
1.网络原因,从dockerHub下载和上传镜像速度比较慢
2.安全原因,我们不想被外部人员获取我们的代码和配置信息,只允许内部开发人员下载
为了解决以上问题,docker官方提供了registry的镜像用于搭建本地私有仓库使用。

拉取私有仓库镜像

输入指令docker pull registry 拉取registry镜像

修改配置

etc/docker/daemon.json添加以下内容,用于让docker 信任私有仓库地址,保存退出

{
 # 192.168.0.120私有仓库的ip地址,5000是端口号
 "insecure-registries":["192.168.0.120:5000"]
}

重新加载配置信息以及重启docker服务

# 重新加载某个服务的配置文件
sudo systemctl daemon-reload
# 重新启动docker
sudo systemctl restart docker

创建私有仓库的容器

输入sudo docker run -di --name registry -p 5000:5000 -v /cyl/docker/docker_registry:/var/lib/registry registry

在浏览器输入http://ip:5000/v2/_catalog,出现如下结果即创建成功
在这里插入图片描述

推送镜像到私有仓库

先给镜像设置标签 docker tag local-image:tagname new-repo:tagname
再将镜像推送到私有仓库 docker push new-repo:tagname

例如我要将mysql5.7的镜像推送私有仓库

# 打标签
sudo docker tag mysql:5.7 192.168.0.122:5000/mysql:1.0.0
# 推送
sudo docker push 192.168.0.122:5000/mysql:1.0.0

输入http://ip:5000/v2/_catalog,私有仓库下存在了mysql镜像
在这里插入图片描述

配置私有仓库认证

私有仓库搭建好了,但是要确保仓库的安全性,还需要一个安全认证证书,防止发生意想不到的事情。所以需要在搭建私有仓库的docker主机上生成自签名证书

创建证书存储目录

sudo mkdir -p /usr/local/registry/certs

生成自签名证书命令

sudo openssl req -newkey rsa:2048 -nodes -sha256 -keyout /usr/local/registry/certs/domain.key -x509 -days 365 -out /usr/local/registry/certs/domain.crt
  • openssl req:创建证书签名请求等功能;
    -newkey:创建 CSR 证书签名文件和 RSA 私钥文件;
    rsa:2048:指定创建的 RSA 私钥长度为 2048;
  • -nodes:对私钥不进行加密;
  • -sha256:使用 SHA256 算法;
  • -keyout:创建的私钥文件名称及位置;
  • -x509:自签发证书格式;
  • -days:证书有效期;
  • -out:指定 CSR 输出文件名称及位置;
    通过 openssl 先生成自签名证书,运行命令以后需要填写一些证书信息,里面最关键的部分是:Common Name (eg, your name or your server's hostname) []:192.168.0.122,这里填写的是私有仓库的地址。
    在这里插入图片描述

生成鉴权文件

# 创建存储鉴权密码文件目录
sudo mkdir -p /usr/local/registry/auth
# 如果没有 htpasswd 功能需要安装 httpd
sudo yum install -y httpd
# 创建用户和密码,-c创建文件,-b使用命令行中的密码,而不是提示输入密码,-B强制bcrypt加密密码(非常安全)
# 第一次生成时使用-c参数创建用户及密码文件,下次再生成时无需使用-c参数会追加至文件
sudo htpasswd -cbB /usr/local/registry/auth/htpasswd root root

htpasswd 是 apache http 的基本认证文件,使用 htpasswd 命令可以生成用户及密码文件

创建私有仓库容器

docker run -di --name registry -p 5000:5000 \
   -v /mydata/docker_registry:/var/lib/registry \
   -v /usr/local/registry/certs:/certs \
   -v /usr/local/registry/auth:/auth \
   -e "REGISTRY_AUTH=htpasswd" \
   -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
   -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
   -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
   -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
   registry

验证是否添加认证成功

此时在浏览器中输入https:私有仓库地址:5000/v2/_catalog,需要输入用户名和密码,均为root
在这里插入图片描述
此时上传镜像时需要先登录,否则会出现no basic auth credentials异常
在这里插入图片描述

登录私有仓库

登录时使用指令sudo docker login -u root -p root ip:5000
注意必须指定私有仓库地址,否则默认登陆的是docker hub
在这里插入图片描述

上传镜像

登陆成功后,先打标签,再上传
sudo docker tag mysql:5.7 192.168.0.122:5000/mysql:1.0.0
sudo docker push 192.168.0.122:5000/mysql:1.0.0
登陆私有仓库现在有mysql这个镜像了
在这里插入图片描述

登出私有仓库

通过docker logout命令退出私有仓库

总结

本文主要讲解了镜像迁移的三种方式,镜像的备份和恢复不好管理且不利于合作开发,公共镜像仓库方式由于有网络和安全方面问题,企业级项目一般不使用,通常企业内一般会自己设置私有仓库,安全且上传或下载的速度也比较快。不过使用私有仓库时也需要进行安全认证,防止意想不到的事情发生

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/643298.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵩山为什么称为三水之源

三水指黄河、淮河、济河,这三条河流环绕在嵩山周边。 黄河横亘在嵩山北部,其支流伊洛河从西南方环绕嵩山,然后汇入黄河。济河,古称济水,源自济源王屋山,自身河道在东晋时代被黄河夺占,从此消失。…

【Spring MVC】_SpringMVC项目返回数据

目录 1. 注解使用示例 1.1 使用Controller注解 1.2 使用RestController注解 1.3 使用Controller与ResponseBody注解 2. 关于ResponseBody注解 前文已经介绍过使用Controller注解向前端返回一个HTML页面,接下来将介绍向前端返回数据。 关于Controller和RestCon…

算法金 | Dask,一个超强的 python 库

本文来源公众号“算法金”,仅用于学术分享,侵权删,干货满满。 原文链接:Dask,一个超强的 python 库 1 Dask 概览 在数据科学和大数据处理的领域,高效处理海量数据一直是一项挑战。 为了应对这一挑战&am…

初学者都能掌握的操作符(中)

(1)位操作符(& | ^) &:(按二进制位“与”) 也就是两个数的每一位二进制数按照 “与” 的算法,如下: int a 3 ,b 5 ; c a & b; 我们首先写出a和b的二进…

Java面试八股之Synchronized和ReentrantLock的区别

Synchronized和ReentrantLock的区别 实现级别: synchronized是Java的一个关键字,属于JVM层面的原生支持,它通过监视器锁(Monitor)来实现同步控制,无需手动获取和释放锁。 ReentrantLock是java.util.conc…

【Linux网络编程】传输层中的TCP和UDP(TCP篇)

【Linux网络编程】传输层中的TCP和UDP(TCP篇) 目录 【Linux网络编程】传输层中的TCP和UDP(TCP篇)TCP协议TCP协议段格式确认应答(ACK)机制(保证可靠性)超时重传机制连接管理机制理解T…

aws msk加密方式和问控制连接方式

msk加密方式 msk提供了两种加密方式 静态加密传输中加密 创建集群时可以指定加密方式,参数如下 aws kafka create-cluster --cluster-name "ExampleClusterName" --broker-node-group-info file://brokernodegroupinfo.json --encryption-info file:/…

ASP+ACCESS公司门户网站建设

【摘 要】随着计算机科学的发展,数据库技术在Internet中的应用越来越广泛,为广大网络用户提供了更加周到和人性化的服务。本文讲解了一个公司的网站的建设,它基于数据关联规则的公司个性化页面及动态数据生成案例,在网页方面&…

Kubeadm安装部署k8s集群、踩坑日常

背景 ​ Docker是一个非常流行的容器化平台,它可以让我们方便构建、打包、发布和运行容器化应用程序。但是,在生产环境中,我们可能需要处理成百上千个容器,需要更好的管理这些容器,这就是Kubernetes(K8S)的用武之地。…

利用大语言模型增强网络抓取:一种现代化的方法

本文将探讨大语言模型(LLMs)与网络抓取的集成,以及如何利用LLMs高效地将复杂的HTML转换为结构化的JSON。 作为一名数据工程师,我的职业生涯可以追溯到2016年。那时,我的主要职责是利用自动化工具从不同网站上获取海量数据,这个过…

网络模型-策略路由配置

在实际网络应用中,策略路由也是一种重要的技术手段。尽管在考试并不注重策略路由,但是实际上应用较多建议考生除了掌握基本的静态路由协议IP route-static,动态路由协议RIP、还要掌握如何配置策略路由。策略路由的基本原理:根据ACL定义的不同…

云界洞见:移动云服务开启技术创新与问题解决的新篇章

一、什么是移动云 移动云以“央企保障、安全智慧、算网一体、属地服务”为品牌支撑,聚焦智能算力建设,打造一朵智能、智慧、安全可信可控的云,提供更优质的算力服务,引领云计算产业发展。 那么下面博主带领大家了解移动云的优势所…

Golang单元测试

文章目录 传统测试方法基本介绍主要缺点 单元测试基本介绍测试函数基准测试示例函数 传统测试方法 基本介绍 基本介绍 代码测试是软件开发中的一项重要实践,用于验证代码的正确性、可靠性和预期行为。通过代码测试,开发者可以发现和修复潜在的错误、确保…

【vue-cli搭建vue项目的过程2.x】

vue-cli搭建vue项目 vue-cli搭建vue项目安装node安装vue-cli脚手架并创建项目安装 Ant Design Vue或element-ui(笔者使用Ant-design-vue组件,并全局引入)开发安装三方库包1、Package.json文件---引入如下package.json文件执行npm i或npm install命令即可下载如下依赖…

Cloudflare Worker 部署bingai

Cloudflare Worker 部署 1. 注册 Cloudflare 账号 2. 一键部署 登录账户后, 点击下面链接 https://deploy.workers.cloudflare.com/?urlhttps://github.com/Harry-zklcdc/go-proxy-bingai 点击「Authorize Workers」, 登录 Github 账号授权 Cloudflare 点击「I have a ac…

输入输出(3)——C++的标准输入流

目录 一、cin 流 二、成员函数 get 获取一个字符 (一)无参数的get函数。 (二)有一个参数的get函数。 (三)有3个参数的get函数 (四)用成员函数 getline 函数读取一行字符 (五)用成员函数 read 读取一串字符 (六)istream 类…

【Basic】Upload-Labs-Linux

文章目录 前言Pass-01Pass-02Pass-03Pass-04Pass-05Pass-06Pass-07Pass-08Pass-09Pass-10Pass-11Pass-12Pass-13Pass-14Pass-15Pass-16解题感悟 前言 美好的一天从刷题开始 Pass-01 我淦20道题???一道一道来吧 先看第一道题 先在home里搞一…

蜂窝物联四情监测:助力农业升级,科技赋能打造丰收新篇章!

农业四情指的是田间的虫情、作物的苗情、气候的灾情和土壤墒情。“四情”监测预警系统的组成包括管式土壤墒情监测站、虫情测报灯、气象站、农情监测摄像机,可实时监测基地状况,可以提高监测的效率和准确性,为农业生产提供及时、科学的数据支持&#xff…

碌时刻必备!微信自动回复让你告别消息堆积

在忙碌的时候,我们往往会面临消息堆积如山的情况。无法及时回复消息不仅容易造成交流障碍,还可能错过重要的机会。 但是现在,有一个神奇的工具——个微管理系统,可以帮助我们轻松应对这个问题 ,实现微信自动回复。 首…

基于YOLOv8+PySide6的快递分类管理系统

1、背景 随着电子商务的飞速发展,快递行业所承受的数据处理需求愈发庞大。在这样的背景下,传统的手工分类方法已经显得力不从心,因其不仅耗时耗力,还存在着易出错的隐患。因此,迫切需要研发出一套高效而准确的自动化系…