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命令退出私有仓库

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【零基础C语言】内存函数

前言: 我们之前学过strcpy,strcmp等等函数,他们可以拷贝字符串和比较字符串等等,那么有没有什么函数不光可以拷贝字符串还可以拷贝其他的数据呢,答案就是内存函数。 相较于字符串函数,内存函数可以拷贝的…

赎金信[简单]

优质博文:IT-BLOG-CN 一、题目 给你两个字符串:ransomNote和magazine,判断ransomNote能不能由magazine里面的字符构成。如果可以,返回true;否则返回false。magazine中的每个字符只能在ransomNote中使用一次。 示例 …

DPDK实践之(1)dpdk基础使用

DPDK实践之(1)dpdk基础使用 Author: Once Day Date: 2024年5月19日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文档可参考专栏:Linux基础知识_Once…

C语言 | Leetcode C语言题解之第109题有序链表转换二叉搜索树

题目: 题解: int getLength(struct ListNode* head) {int ret 0;while (head ! NULL) {ret, head head->next;}return ret; }struct TreeNode* buildTree(struct ListNode** head, int left, int right) {if (left > right) {return NULL;}int …

Mac维护神器CleanMyMac X成为你的苹果电脑得力助手

在数字化时代,Mac电脑已成为众多用户的首选。然而,随着频繁的使用和数据量的日益增长,许多Mac用户面临着系统杂乱、存储空间不足以及隐私保护等问题。幸运的是,"CleanMyMac X"这款优化和清理工具应运而生,它…

ROCm上情感分析:使用循环神经网络

15.2. 情感分析:使用循环神经网络 — 动手学深度学习 2.0.0 documentation (d2l.ai) 代码 import torch from torch import nn from d2l import torch as d2lbatch_size 64 train_iter, test_iter, vocab d2l.load_data_imdb(batch_size)class BiRNN(nn.Module):…

java抽象类,接口,枚举练习题

第一题: 答案: class Animal{//成员变量protected String name;protected int weight;//构造方法public Animal(){this.name"refer";this.weight50;}public Animal(String name,int weight){this.namename;this.weightweight;}//成员方法publ…

Bugku Crypto 部分题目简单题解(四)

目录 python_jail 简单的rsa 托马斯.杰斐逊 这不是md5 进制转换 affine Crack it rsa python_jail 启动场景 使用虚拟机nc进行连接 输入print(flag) 发现报错,经过测试只能传入10个字符多了就会报错 利用python中help()函数,借报错信息带出flag变…

【力扣刷题笔记第三期】Python 数据结构与算法

先从简单的题型开始刷起,一起加油啊!! 点个关注和收藏呗,一起刷题鸭!! 第一批题目 1.设备编号 给定一个设备编号区间[start, end],包含4或18的编号都不能使用,如:418、…

java抽象类和接口知识总结

一.抽象类 1.啥是抽象类 用专业语言描述就是:如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类 当然这话说的也很抽象,所以我们来用人话来解释一下抽象类 抛开编程语言这些,就以现实举例,我…

每日练习之排序——链表的合并;完全背包—— 兑换零钱

链表的合并 题目描述 运行代码 #include<iostream> #include<algorithm> using namespace std; int main() { int a[31];for(int i 1;i < 30;i)cin>>a[i];sort(a 1,a 1 30);for(int i 1;i < 30;i)cout<<a[i]<<" ";cout&…

Mysql之Innodb存储引擎

1.Innodb数据存储 innodb如今能够做到mysql的默认数据存储引擎&#xff0c;肯定有着其好处的&#xff0c;那么innodb有什么好处呢? 1. 当意外断电或者重启&#xff0c; InnoDB 能够做到奔溃恢复&#xff0c;撤销没有提交的数据 2.InnoDB 存储引擎维护自己的缓冲池&#xff0c…

医院挂号就诊系统的设计与实现

前端使用Vue.js 后端使用SpiringBoot MyBatis 数据使用MySQL 需要项目和论文加企鹅&#xff1a;2583550535 医院挂号就诊系统的设计与实现_哔哩哔哩_bilibili 随着社会的发展&#xff0c;医疗资源分布不均&#xff0c;患者就诊难、排队时间长等问题日益突出&#xff0c;传统的…

Hadoop3:HDFS的Fsimage和Edits文件介绍

一、概念 Fsimage文件&#xff1a;HDFS文件系统元数据的一个永久性的检查点&#xff0c;其中包含HDFS文件系统的所有目 录和文件inode的序列化信息。 Edits文件&#xff1a;存放HDFS文件系统的所有更新操作的路径&#xff0c;文件系统客户端执行的所有写操作首先 会被记录到Ed…

二叉树的链式结构

1.二叉树的遍历 2.二叉树链式结构的实现 3.解决单值二叉树题 1.二叉树的遍历 1.1前序&#xff0c;中序以及后序遍历 二叉树的遍历是按照某种特定的规则&#xff0c;依次对二叉树的结点进行相应的操作&#xff0c;并且每个结点只操作一次。 二叉树的遍历有这些规则&#xff…

主流电商平台商品实时数据采集API接口||抖音电商数据分析实例|可视化

— 1 — 抖音电商数据【抖音电商API数据采集】分析场景 1. 这里&#xff0c;我们选择“伊利”这个品牌作为案例进行分析&#xff0c;在短短的4个月里&#xff0c;从最初每月营收17.07万&#xff0c;到6月份达到了2485.54 万&#xff0c;伊利的牛奶&#xff0c;有点牛&#xff…

Spring 对 Junit4,Junit5 的支持上的运用

1. Spring 对 Junit4,Junit5 的支持上的运用 文章目录 1. Spring 对 Junit4,Junit5 的支持上的运用每博一文案2. Spring对Junit4 的支持3. Spring对Junit5的支持4. 总结&#xff1a;5. 最后&#xff1a; 每博一文案 关于理想主义&#xff0c;在知乎上看到一句话&#xff1a;“…

Xline社区会议Call Up|在 CURP 算法中实现联合共识的安全性

为了更全面地向大家介绍Xline的进展&#xff0c;同时促进Xline社区的发展&#xff0c;我们将于2024年5月31日北京时间11:00 p.m.召开Xline社区会议。 欢迎您届时登陆zoom观看直播&#xff0c;或点击“阅读原文”链接加入会议&#xff1a; 会议号: 832 1086 6737 密码: 41125…

通过cmd命令行使用用3dmax自带的vray渲染

有时调试需要使用vray渲染vrscene文件看效果&#xff0c;只装有3dmax下可以使用自带vray渲染&#xff0c;在3dmax的渲染日志里面看自带引擎路径 使用命令行进入到此目录 执行命令指定vr文件即可看到效果&#xff0c;如&#xff1a;vray.exe -sceneFile“C:\test15\202405241…

Cesium与Three相机同步(2)

之前实现了将Three相机同步到Cesium相机Cesium与Three相机同步(1)-CSDN博客 现在是将Cesium相机同步到Three相机,从而实现了相机双向同步。 <!DOCTYPE html> <html lang="en"><head><title>three.js webgl - orbit controls</title&g…