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

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

 

posted @ 2024-09-21 19:05  战斗小人  阅读(39)  评论(0编辑  收藏  举报