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
硬盘资源设置成功