docker阶段04 Docker仓库管理(Harbor), Docker 的资源限制

news/2024/12/26 11:25:07/文章来源:https://www.cnblogs.com/ludingchao/p/18424399

Docker 仓库管理

上传docker hub官方镜像仓库

#1.给本地镜像打标签
上传本地镜像前必须先给上传的镜像用docker tag 命令打标签
标签格式: docker.io/用户帐号/镜像名:TAG
#范例: 
[root@ubuntu1804 ~]#docker tag alpine:3.11 docker.io/wangxiaochun/alpine:3.11-v1#2.登录
docker login [OPTIONS] [SERVER]    #服务器地址不写默认官方地址
#例:
docker login -u lbtoxxx@qq.com
#输入密码#3.上传
docker push ...

阿里云进入容器镜像服务,实例列表,个人版

公有地址
专有地址    阿里云上服务使用地址,阿里云内网

 

私有云单机仓库 Docker Registry

官方的,不好用,纯命令行界面,很鸡肋

 

Docker 之分布式仓库 Harbor

生产使用这个软件,有图形界面

Harbor 组成

 安装 Harbor

下载地址: https://github.com/vmware/harbor/releases
安装文档: 
https://github.com/goharbor/harbor/blob/master/docs/install-config/_index.md
https://goharbor.io/docs/2.10.0/install-config/
环境要求:Harbor docs | Harbor Installation Prerequisites (goharbor.io)

 下载Harbor安装包并解压缩

https://github.com/goharbor/harbor/releases
#下载harbor-offline-installer-v2.10.0.tgz
[root@ubuntu ~]#tar xf harbor-offline-installer-v2.10.0.tgz -C /usr/local/

[root@ubuntu ~]#cd /usr/local/harbor/
[root@ubuntu harbor]#cp harbor.yml.tmpl harbor.yml

[root@ubuntu harbor]#vim harbor.yml
hostname: 10.0.0.151
#如果不使用https,还需要将下面行注释掉
#https:
# port: 443
# certificate: /your/certificate/path
# private_key: /your/private/key/path
harbor_admin_password: 123456
data_volume: /data/harbor    #会自动创建

[root@ubuntu harbor]#./install.sh
#查看服务 (nginx端口映射80端口,宿主机不要占用80)
[root@ubuntu harbor]#docker-compose ps#compose.yml文件中服务都是自启动的,所以Harbor可以自启动
#启动停止用docker-compose命令
docker-compose start    #启动
#这里停止,因为服务做了文件挂载持久化,用down也可以。stop也行#默认用户名admin 
密码: 123456#里面可以创建项目,每个项目下有自己的镜像
#创建用户,用于连接上传镜像,创建项目给该用户用
新建项目:访问级别  如果是公开,上传要输密码,下载不需要    #这里创建example项目
        项目配额限制: 默认不限制镜像代理:上传的镜像传到别的仓库,自己相当于nginx,这里不选
新建用户: 开发者能上传下载镜像        #这里创建wang用户#写service文件,调用更简单
[root@harbor ~]#vim /lib/systemd/system/harbor.service
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service
Documentation=http://github.com/vmware/harbor[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/docker-compose -f /usr/local/harbor/docker-compose.yml up
ExecStop=/usr/bin/docker-compose -f /usr/local/harbor/docker-compose.yml down[Install]
WantedBy=multi-user.target[root@harbor ~]#systemctl daemon-reload 
[root@harbor ~]#systemctl enable harbor#上传镜像操作
#打镜像标签
[root@harbor ~]#sdocker tag mynginx:v2.0 10.0.0.151/example/mynginx:v2.0
#修改docker配置文件,访问仓库走http,不走https
[root@ubuntu1804 ~]#vim /etc/docker/daemon.json
{"registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"],"insecure-registries": ["10.0.0.151:80"]  #说明: ":80"可省略
}
[root@ubuntu1804 ~]#systemctl restart docker.service
#可以验证是否生效
[root@ubuntu1804 ~]#docker info#登录
[root@harbor ~]#docker login 10.0.0.202 -u wang -p Magedu@123
#上传
[root@harbor ~]#docker push 10.0.0.151/example/mynginx:v2.0#网页example项目里就能看到该镜像了#另一台机器拉取镜像(也要修改docker配置insecure-registries,访问仓库走http)
[root@harbor ~]#docker pull 10.0.0.151/example/mynginx:v2.0

实现 Harbor 高可用

另一台机器上也部署harbor
创建一样的项目,用户系统管理添加仓库管理(要管理员账号),再点复制管理,触发模式选事件触发(镜像发生变化就触发)
第一次在复制管理里手动点击复制另一台机器同样添加仓库管理,再点复制管理#注意镜像仓库里显示的是文件夹,里面可以有对应各种版本的镜像。删除可以删镜像也可以删到文件夹
#删除这个文件夹时,另一个harbor会把里面的镜像都删了,但文件夹不删

配置 Nginx 做为反向代理

#配置Nginx反向代理
[root@ubuntu2004 ~]#cat /etc/nginx/conf.d/harbor.wang.org.conf
upstream harbor {ip_hash;        #harbor内部登录验证,保证登录是同一电脑server harbor1.wang.org:80;server harbor2.wang.org:80;
}
server {listen 80;server_name harbor.wang.org;client_max_body_size 10g;    #限制nginx传输数据大小location / {proxy_pass http://harbor;}
}#客户端docker配置
[root@rocky8 ~]#cat /etc/docker/daemon.json
{"registry-mirrors": ["https://si7y70hh.mirror.aliyuncs.com"],"insecure-registries": ["harbor.wang.org"]    
}
[root@rocky8 ~]#systemctl restart docker#客户端docker配置名称解析
[root@rocky8 ~]#vim /etc/hosts
10.0.0.100 harbor.wang.org
#如果harbor配置中的hostname: 指定harbor1.wang.org和harbor2.wang.org名称,还需要加下面解
10.0.0.101 harbor1.wang.org
10.0.0.102 harbor2.wang.org

harbor可以设置清理服务,定期对镜像进行清理

 

Harbor 安全 Https 配置 (了解,内网安全可用不用https)

harbor对于https需要配置

 

Docker 的资源限制

Stress-ng 压力测试工具

[root@ubuntu ~]#apt update && apt -y install stress-ng#查看cpu状态,top命令,然后输入1查看每个cpu情况
[root@ubuntu ~]#top#开1个进程,把1个cpu打满
[root@ubuntu ~]#stress-ng -c 1
#开2个进程,把2个cpu打满
[root@ubuntu ~]#stress-ng -c 2#查看内容
[root@ubuntu ~]#free -h#消耗内存,-m开几个进程,一个消耗256MB内存
[root@ubuntu ~]#stress-ng -m 1
#基于该工具做成容器
[root@ubuntu ~]#docker pull lorel/docker-stress-ng    #这里docker不兼容换一个
[root@ubuntu ~]#docker pull alexeiled/stress-ng# run for 60 seconds with 4 cpu stressors, 2 io stressors and 1 vm stressor using 1GB of virtual memory
docker run -it --rm alexeiled/stress-ng --cpu 4 --io 2 --vm 1 --vm-bytes 1G --timeout 60s --metrics-brief#启动测试 使用256m内存
[root@ubuntu ~]#docker run --rm --name demo1 alexeiled/stress-ng -m 1
#查看容器消耗
[root@ubuntu ~]#docker stats demo1
#查看容器消耗(--no-stream表示一次性)
[root@ubuntu ~]#docker stats --no-stream demo1#启动测试 docker容器限制1g
[root@ubuntu ~]#docker run --rm --name demo1 -m 1g alexeiled/stress-ng -m 10#禁用swap
#方式一
[root@ubuntu ~]#vim /etc/fstab    #把swap行注释
#/swap.img       none    swap    sw      0       0
[root@ubuntu ~]#swapoff /swap.img
#方式二
[root@ubuntu ~]#systemctl mask swap.target    #禁用
[root@ubuntu ~]#swapoff -a        #关闭
[root@ubuntu ~]#free -h        #这时候没有swap了
#重启也没有swap了
[root@ubuntu ~]#reboot

内存相关选项

选项:
-m    容器可以使用的最大物理内存量,硬限制,此选项最小允许值为 4m (4MB),此项较常用

容器的 CPU 限制

选项:
--cpus    可以写小数如1.5,使用率在多核可能分散到多核,比如1在4核下可能每核使用25%
--cpuset-cpus    指定容器运行CPU编号,也就是所谓的CPU绑定。如果多CPU,可用0,3或范围0-2
#绑定cpu用的较少,成本过高
--cpu-shares    设置容器之间使用cpu的比例权重,cpu-share的值越高的容器,分得更多cpu使用
#启动测试 使用256m内存
[root@ubuntu ~]#docker run --rm --name demo1 --cpus 0.5 alexeiled/stress-ng -c 1
#查看容器消耗
[root@ubuntu ~]#docker stats demo1#启动测试 使用第一个cpu
[root@ubuntu ~]#docker run --rm --name demo1 --cpus 0.5 --cpuset-cpus 0 alexeiled/stress-ng -c 1
#查看跑在哪个cpu上(会出现两个,一个父进程,实际工作的是子进程)
[root@ubuntu ~]#ps axo pid,cmd,psr |grep stress-ng

 

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

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

相关文章

【EasyBlog】基于React+AntD+NextJS+NestJS+MySQL打造的开源博客系统

Easy-Blog 是一套集成文章发表、页面创建、知识库管理、博客后台管理等功能于一体的博客系统。Github项目地址:https://github.com/fecommunity/easy-blog, 欢迎Star。Github项目地址:https://github.com/fecommunity/easy-blog, 欢迎Star。Easy-Blog Easy-Blog 是一套集成…

为啥chrome查看到网页,只有5000多行,应该有1万多行才对

大家好,我是皮皮。 一、前言 前几天在Python白银交流群【磐奚鸟】问了一个Python网络爬虫处理的问题,这里拿出来给大家分享下。二、实现过程 这里【惜君】给了一个指导,可能网站有限制数据量。这里【瑜亮老师】发现了问题所在,如下图所示:数据方面确实存在,顺利地解决了粉…

Maven 使用方法

MavenMaven是一个项目管理工具,它包含了一个项目对象模型(POM:Project Object Model),其表现于一个XML文件(pom.xml),其中包含了项目的基本学习,依赖关系,插件配置,构建路径等等为什么使用Maven导入第三方jar包更便捷:之前我们在使用第三方框架时我们会把jar包复制粘贴到WEB-IN…

CIDR与ICMP

CIDR CIDP:无类域间路由/超网 将多个小的子网,用一个相对更大的地址范围进行概括,以此实现表项的优化 如何求cidr后的ip 1.将子网转换成2进制: 0000 1010.0000 0001.0000 0000.0000 0000——10.1.0.0 0000 1010.0000 0001.0000 0001.0000 0000——10.1.1.0 0000 1010.0000 …

lightgbm的输出到低是怎么来的

结论:假设有100棵树,总输出就是100棵树每个输入所对应的输出叶子结点之和1 可以打印出每个样本在每棵树上所属的叶子结点id2 可以打印每棵树每个叶子结点的输出 3 找到每棵树对应叶子结点,加起来 4 查看该样本的模型输出,发现是一致的 5 可以画图每棵树的结构图,方便理解

使用vscode和markdown写博客

博客创建事要Reason 最近因为在做学校的实训项目,真正接触到了实际开发,遇到了不少的问题,由于之前也有在scdn上写博客的习惯(实际写的很乱,而且个人不是很喜欢csdn哈QAQ),所以想要重新维护一个规整的个人博客,于是此博客应允而出。Condition 在了解之后,发现博客园的…

CSP-S 2024

CSP-S 2024 游记初赛 感觉没啥好写的,毕竟弱省不是保龄都能过吗? Day -1 周五,一天有 \(\frac{10}{13}\) 都是奥赛,遂打模拟赛。 传送门。 题都不是不可做题,改得挺快,觉得明天初赛了就看了看初赛题,但没啥动力,半颓状态过了一晚。 晚上做了个诡异的梦。梦里又做了个梦…

适用于 VitePress 的公告插件开发实记

开发了一个适用于 VitePress 站点的公告插件 vitepress-plugin-announcement前言 笔者维护的 VitePress 博客主题在近1年多的时间里集成了非常多功能,不少用户希望将里面的部分功能分离出来,方便在其它 VitePress 站点也可以独立使用。 其中分离的第一个组件类型的就是呼声较…

4 个

8 9 5 6 6 8 1 6

2024 CSP-S 游记

遗失星海超神摘要等放了假再补8.22 下午 \(huge\) 说要报名 \(CSP\) 的事情,把全网开了,光速上 \(w3\) 扒下照片然后又光速上 \(163\) 邮箱拿验证码然后就注册账号了,过了一会儿就看见教练给报好了 \(CSP-S\) 。拿 \(QQ\) 邮箱的需要验证码所以 \(huge\) 把手机发了下来,还…

基于 Qwen2.5-Coder 模型和 CrewAI 多智能体框架,实现智能编程系统的实战教程

Qwen2.5 开源的系列模型中,Qwen2.5-Coder 模型的推理能力技压群雄,本文集合 CrewAI 框架,让多智能体自己编写符合我们需求的程序……9 月 19 日,阿里开源了 Qwen2.5 系列大模型全家桶:除常规的语言模型 Qwen2.5 之外,还发布了专门针对编程的Qwen2.5-Coder模型和数学的 Qw…