#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需要配置
[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