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

Linux之Docker虚拟化技术(四)

一、基于Docker搭建私有仓库

Docker仓库主要用于存储Docker镜像,Docker 仓库主要分为私有仓库和公有仓库

私有仓库优点

  • 节省带宽,只针对每个镜像无需去docker官网下载
  • 下载Docker镜像从本地私有仓库中下载
  • 组件公司内部私有仓库,方便各部门使用
  • 可以基于git,SVN,jkens,k8s更新本地Docker私有仓库镜像版本

使用的操作流程如下

## 拉取regitry镜像
docker pull registry## 创建容器
docker run -itd --name=jfedu-registry -p 5000:5000 -v /data/registry:/var/lib/registry/ registry:latest## 修改tag名
docker tag nginx:latest 192.168.101.5:5000/nginx:latest## 将镜像上传到私有仓库
docker push nginx:latest## 指定拉取仓库
docker pull nginx:latest## 进入docker配置文件,修改daemon.json文件
"insecure-registries":["192.168.101.5:5000"]## 查看上传的镜像
http://192.168.101.135:5000/v2/_catalog

本地镜像通常会存在此目录

打开网站我们也能发现镜像

  • 仓库的迁移和备份

现在我将这里面的镜像移除

## 移除镜像
[root@localhost v2]# mv repositories repositories.bak
[root@localhost v2]# ls
blobs  repositories.bak

一旦备份数据,再次访问仓库时镜像就不存在了

一旦数据恢复,又可以再次拉取镜像了

  • 分布式实现后台服务均衡(nginx代理)

创建两个私有仓库容器

[root@localhost v2]# docker run -itd --name=regitery  -v /data/registry:/var/lib/registry/ registry:latest

第三方机器上安装nginx

在docker仓库配置文件添加配置信息

现在即可拉取自己搭建私有仓库了

二、容器和镜像理论知识

Docker概念

Docker技术好比是一个一个庞大的工厂,在工厂里面集装箱好比是容器,里面每一个货物我们可以将它成为镜像

Docker是一个开源的应用容器引擎,让开发者可以打包他们的依赖包到一个可移植的容器,跨平台使用。

Dockerd的基础是基于LXC技术,在LXC基础上,docker进一步进行封装

Docker 虚拟化三大要点(镜像、容器、仓库)

镜像:Docker的进行其实就是模版,生活中好比一栋大厦的地基,通常情况可以将镜像中的文件,数据挂载到容器内部,相较于iso镜像文件,系统安装完成,镜像中的文件,数据会拷贝到系统中

容器(服务、轻量级容器):使用镜像常见的应用或系统

镜像类似于程序,容器类似于运行中的进程

Docker虚拟机 VS 传统虚拟机

优点:

  • 操作启动快:容器的启动、管理、开始、重启都是以毫秒为单位响应
  • 轻量级虚拟机:在一台服务器上可以部署100~1000个Containr容器
  • 开源免费:开源的、免费,低成本,由现代Linux内核支持并驱动公司 
  • 前景云服务:各大主流公司都在推动docker快速发展

缺点:

GO语言还未成熟、知道的人比较少

为什么使用docker ?

  • 更快速的交付和部署,开发人员可以快速构建一套开发容器,开发完成后,运维人员可以使用这个容器来部署代码
  • 可以高效实现资源的扩缩容(数量),提高资源利用率
  • 更简单的管理:所有的修改都以=增量的方式被分发和更新,只需小小的修改就可以替代大量的更新工作

Docker引擎是一个c/s架构的应用,其结构图如下:

Docker使用c/s结构,docker client 端和servre端,可以运行同一台集群,也可以跨主机远程通信

Docker镜像的原理

一个完整的镜像可以支撑一个docker容器的运行,在docker容器运行过程中,主要提供文件系统的支撑

Docker镜像

  • 镜像分层:每个镜像由一个或多个镜像层组成
  • 可以通过原基础镜像加上一定的镜像层得到一个新镜像
  • 每个镜像层拥有唯一的镜像ID
  • 镜像层在共享相同的镜像层时,在pull镜像时,已有的镜像会自动跳过下载
  • 每个镜像层都是只读的,即使启动成容器,也无法对其进行修改,修改只会作用于容器层

三、容器硬件资源配置(Cpu,内存、硬盘)

查看cpu、内存使用情况

## 创建容器,并分配资源
[root@localhost v2]# docker run -itd --name=vm03 --cpuset-cpus=0-1 -m 2048m --privileged  openeuler:latest
496f9081ea63fd38471b919cca8d675e187829438cb05f7d622176ce5d70c6b0## 查看分配资源
[root@localhost v2]# docker inspect vm03|grep -aiwE "cpusetcpus|memory""Memory": 2147483648,"CpusetCpus": "0-1",## 更新资源
[root@localhost v2]# docker update vm02 -m 2048m --cpuset-cpus=0-2
vm02## 获取CPU、MEM信息
[root@localhost v2]# docker stats vm02 --no-stream | awk 'NR>1{print "CPU:"$3"\n""MEM:"$4}'
CPU:0.00%
MEM:16.58MiB
[root@localhost v2]# docker stats vm02 --no-stream | awk 'NR>1{print "CPU:"$3"\n""MEM:"$4}'
CPU:0.00%
MEM:16.58MiB

容器硬盘的调整

添加一块硬盘

格式化为xfs格式

[root@localhost ~]# mkfs.xfs /dev/sdb
meta-data=/dev/sdb               isize=512    agcount=4, agsize=6553600 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=1, sparse=1, rmapbt=0=                       reflink=1    bigtime=1 inobtcount=0
data     =                       bsize=4096   blocks=26214400, imaxpct=25=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=12800, version=2=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# 

开启磁盘配额完成挂载


## 用户配额,目录配额
[root@localhost ~]# mount -o uquota,prjquota /dev/sdb /data/
[root@localhost ~]# 

## 指定容器挂载分区和资源分配

## 每次创建分配50G硬盘空间/usr/local/docker/dockerd --data-root=/data/docker --storage-opt overlay2.size=40G -H 0.0.0.0:2375 -H unix:///var/run/docker.sock 

硬盘资源设置成功

http://www.xdnf.cn/news/20355.html

相关文章:

  • 解决Vue Canvas组件在高DPR屏幕上的绘制偏移和区域缩放问题
  • Process Explorer 学习笔记(第三章3.2.1):主窗口与进程列表详解
  • 9.5C++作业
  • Ruoyi-vue-plus-5.x第五篇Spring框架核心技术:5.2 Spring Security集成
  • 使用PyTorch构建卷积神经网络(CNN)实现CIFAR-10图像分类
  • 1688 商品详情抓取 API 接口接入秘籍:轻松实现数据获取
  • LeetCode Hot 100 第11天
  • 微前端架构:解构前端巨石应用的艺术
  • 【Android】制造一个ANR并进行简单分析
  • Kotlin中抽象类和开放类
  • 《从报错到运行:STM32G4 工程在 Keil 中的头文件配置与调试实战》
  • CRYPT32!ASN1Dec_SignedDataWithBlobs函数分析之CRYPT32!ASN1Dec_AttributesNC的作用是得到三个证书
  • 垃圾回收算法详解
  • 《sklearn机器学习——回归指标2》
  • Java内部类
  • 再读强化学习(动态规划)
  • 时隔4年麒麟重新登场!华为这8.8英寸新「手机」给我看麻了
  • 《Ceph集群数据同步异常的根因突破与恢复实践》
  • 深入剖析RocketMQ分布式消息架构:从入门到精通的技术全景解析
  • Ubuntu 文件权限管理
  • 【正则表达式】选择(Alternation)和分支 (Branching)在正则表达式中的使用
  • MySQL InnoDB 的锁机制
  • Chrome 插件开发入门:打造个性化浏览器扩展
  • 神经网络|(十八)概率论基础知识-伽马函数·下
  • Follow 幂如何刷屏?拆解淘宝闪购×杨幂的情绪共振品牌营销
  • Doris 消费kafka消息
  • 通过PXE的方式实现Ubuntu 24.04 自动安装
  • 版本管理系统与平台(权威资料核对、深入解析、行业选型与国产平台补充)
  • 50.4k Star!我用这个神器,在五分钟内搭建了一个私有 Git 服务器!
  • 小程序的project.private.config.json是无依赖文件,那可以删除吗?