Linux之Docker虚拟化技术(四)

发布于:2025-09-07 ⋅ 阅读:(17) ⋅ 点赞:(0)

一、基于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 

硬盘资源设置成功


网站公告

今日签到

点亮在社区的每一天
去签到