docker仓库

仓库分类:

为公有云仓库: 由互联网公司对外公开的仓库

  • 官方
  • 阿里云等第三方仓库

私有云仓库: 组织内部搭建的仓库,一般只为组织内部使用,常使用下面软件搭建仓库

  • docker registory
  • docker harbor

官方 docker 仓库:

https://hub.docker.com/

注册账户后,可命令行登录:

docker login [OPTIONS] [SERVER]
选项:
	-u		账号
	-p		密码 

注意

  • 第一次登录成功后,会在root目录下生成一个.docker目录,下面的config.json会自动记录账号信息,下次可直接登录

给本地镜像打标签:

上传本地镜像前必须先给上传的镜像用docker tag 命令打标签
标签名必须是自己的账号名称

标签格式:

docker.io/用户帐号/镜像名:TAG

例:

docker tag alpine:3.11 docker.io/suyanhj/alpine:3.11-v1

上传本地镜像到官网:

#如果tag省略,则上传所有版本
docker push suyanhj/alpine

下载镜像到本地:

docker pull suyanhj/alpine:3.11-v1

阿里云仓库:

http://cr.console.aliyun.com/

使用:

docker login -u 阿里云账号 -p 密码 registry.ap-south-1.aliyuncs.com

例:

docker tag suyanhj/alpine:v1 registry.ap-south-1.aliyuncs.com/suyanhj/alpine:v1
docker push registry.ap-south-1.aliyuncs.com/suyanhj/alpine:v1

私有云单机仓库(docker Distribution):

由新项目distribution(新的docker register被称为Distribution)代替registry
其本身运行起来就是一个容器,使用时直接运行Distribution容器,但本身只提供命令行界面,没有web界面

官方文档地址: https://docs.docker.com/registry/
官方github 地址: https://github.com/docker/distribution
官方部署:https://github.com/docker/docker.github.io/blob/master/registry/deploying.md

实现方法:

通过官方提供的docker registry 镜像来简单搭建本地私有仓库环境

  • A主机 2.2.2.14 registry仓库服务器
  • B主机 2.2.2.24 客户端
1)A主机拉取registry镜像
docker pull registry:latest
2)A主机创建授权连接registry的用户、密码
mkdir -p /etc/docker/auth
apt install -y apache2
htpasswd -Bbn hj 123456 > /etc/docker/auth/registry
3)A主机启动registry容器
docker run -d -p 5000:5000 --restart=always --name registry -v /etc/docker/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry registry
4)A主机登录仓库

由于仓库默认启用了https,所以需要修改配置文件,允许非安全登录

方法1:改docker.service文件
dockerd --insecure-registry 2.2.2.14:5000 ...
systemctl daemon-reload 
systemctl restart docker
docker login -u hj -p 123456 2.2.2.14:5000
方法2:改daemon.json文件
vim /etc/docker/daemon.json 
{
 ...
 "insecure-registries": ["2.2.2.14:5000"]
}
systemctl restart docker
docker login -u hj -p 123456 2.2.2.14:5000
5)A主机上传镜像到本地仓库
docker tag alpine:latest 2.2.2.14:5000/aline:latest-v1
docker push 2.2.2.14:5000/aline:latest-v1
6)B主机下载镜像
#先允许本地的非安全登录
vim /etc/docker/daemon.json 
 "insecure-registries": ["2.2.2.14:5000"]

systemctl restart docker

#登录仓库,拉取镜像
docker login -u hj -p 123456 2.2.2.14:5000
docker pull 2.2.2.14:5000/aline:latest-v1

分布式仓库 Harbor:

Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中,确保数据和知识产权在公司内部网络中管控,另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等

harbor 官方github 地址: https://github.com/vmware/harbor
harbor 官方网址: https://goharbor.io/
harbor 官方文档: https://goharbor.io/docs/
github文档:https://github.com/goharbor/harbor/tree/master/docs

Harbor功能:

  • 基于角色的访问控制: 用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限
  • 镜像复制: 镜像可在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。上传一个镜像时,会同步到其他仓库
  • 图形化用户界面: 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间
  • AD/LDAP支持: Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理
  • 审计管理: 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理
  • 部署简单: 提供在线和离线两种安装工具,也可以安装到vSphere平台(OVA方式)虚拟设备

harbor组成:

当barbor启动时,会自动启动很多容器,这些容器都与仓库有关

Proxy:
  • 对应启动组件nginx。它是一个nginx反向代理,代理Notary client(镜像认证)、Docker client(镜像上传下载等) 和浏览器的访问请求(Core Service)给后端的各服务
UI(Core Service):
  • 对应启动组件harbor-ui。底层数据存储使用mysql数据库,主要提供了四个子功能:
    • UI: 一个web管理页面ui
    • API: Harbor暴露的API服务
    • Auth:用户认证服务,decode后的token中的用户信息在这里进行认证;auth后端可以接db、ldap、uaa三种认证实现
    • Token服务(上图中未体现):负责根据用户在每个project中的role来为每一个docker push/pull 命令发布一个token,如果从docker client发送给registry的请求没有带token,registry会重定向请求到token服务创建token
Registry:
  • 对应启动组件registry。负责存储镜像文件,和处理镜像的pull/push命令。Harbor对镜像进行强制的访问控制,Registry会将客户端的每个pull、push请求转发到token服务来获取有效的token
Admin Service:
  • 对应启动组件harbor-adminserver。是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候需要加载adminserver的配置
Job Sevice:
  • 对应启动组件harbor-jobservice。负责镜像复制工作的,他和registry通信,从一个registry pull 镜像然后push到另一个registry,并记录job_log
Log Collector:
  • 对应启动组件harbor-log。日志汇总组件,通过docker的log-driver把日志汇总到一起
DB:
  • 对应启动组件harbor-db,负责存储project、 user、 role、replication、image_scan、access等的metadata数据

搭建barbor仓库:

主机 ip地址 作用
A 2.2.2.14 仓库1
B 2.2.2.24 仓库2
C 2.2.2.34 客户端1
D 2.2.2.44 客户端2
1)所有主机安装docker

可使用博主写的脚本自动安装

2)安装docker compose

用来单机编排容器的工具,必须先在barbor前面安装,否则报错

方法1:
apt install -y python3-pip
python3 -m pip install --upgrade pip
pip3 install setupTools
pip3 install docker-compose
方法2:官网下载

下载:https://github.com/docker/compose/releases

wget https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Linux-x86_64 -o /bin/docker-compose
chmox +x /bin/docker-compose
3)下载barbor
wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.6.tgz
tar xf harbor-xxx.tgz -C /opt/
4)修改配置harbor配置文件

配置文件官方文档:https://github.com/goharbor/harbor/blob/master/docs/install-config/configure-yml-file.md

#centos系列需要
mv harbor.yml.tmpl harbor.yml

#修改配置
vim /opt/harbor/harbor.cfg
hostname = 2.2.2.14		监听地址
#管理员密码,默认admin/Harbor12345
harbor_admin_password = 123456		
#可选配置,web协议,默认http,如果修改为https,需要指定下面证书路径
ui_url_protocol = http 
#默认即可,https时,需指定下面证书文件路径
ssl_cert = /data/cert/server.crt 
#默认即可,https时,需指定下面私钥文件路径
ss_cert_key = /data/cert/server.key  
5)运行harbor安装脚本(基于pyhton)
apt install -y python
#需要保证80端口、registry容器名没有被占用(这是删除所有容器,是否需要自己判断)
docker rm -f `docker ps -aq`

/opt/harbor/install.sh
6)写一个barbor.service文件,开机自启
vim /etc/systemd/system/harbor.service 
[Unit]
Description=Harbor
After=docker.service systemd-networkd.service systemd-resolved.service
Requires=docker.service

[Service]
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=docker-compose -f /opt/harbor/docker-compose.yml up
ExecStop=docker-compose -f /opt/harbor/docker-compose.yml down

[Install]
WantedBy=multi-user.target


systemctl daemon-reload
systemctl enable --now harbor.service
或者:
vim /etc/rc.local 
#!/bin/bash
cd /apps/harbor
/usr/bin/docker-compose up 

使用barbor仓库:

命令行登录:

由于barbor也是默认采用https,需要改为http协议

vim /etc/docker/daemon.json
 "insecure-registries": ["2.2.2.14","2.2.2.24"]

命令行上传下载:

C主机上传
docker run -it --name a1 alpine
touch file1
docker commit -a 'hj.com' a1 2.2.2.14/test/hj-alpine:v1
docker login -u admin -p 123456 2.2.2.14
docker push 2.2.2.14/test/hj-alpine:v1
D主机下载
docker pull 2.2.2.14/test/hj-alpine:v1

自动打标签脚本

对Dockerfile构建的镜像自动打标签,上传到harbor仓库

vim build.sh
#!/bin/bash

[ "$1" = "" ] && echo "必须给定镜像名" && exit 1
docker build -t $1
docker tag $1 2.2.2.14/test/$1
docker push 2.2.2.14/test/$1

后期修改harbor配置文件:

方法1:手动按步骤来

1)先停harbor服务,关掉所有相关容器
docker-compose stop
2)修改配置文件
vim /opt/harbor/harbor.cfg
3)更新服务的配置文件
/opt/harbor/prepare
4)启动harbor服务
docker-compose up

方法2: 直接运行安装脚本

1)修改配置文件
2)运行安装时的脚本,会自动重新安装
/opt/harbor/install.sh

harbor仓库的高可用:

  • 基于共享存储实现
    • nfs、cifs等
  • 基于镜像复制实现
    • web界面操作,两台主机都要配置

harbor使用https通信:

1)生成私钥和证书

可使用博主写的一键生成脚本

touch /root/.rnd
mkdir /opt/harbor/certs
cd /opt/harbor/certs
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -subj "/CN=ca.hj.org" -days 365 -out ca.crt
openssl req -newkey rsa:4096 -nodes -sha256 -subj "/CN=harbor.hj.org" -keyout harbor.hj.org.key -out harbor.hj.org.csr
openssl x509 -req -in harbor.hj.org.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.hj.org.crt
2)关闭容器,修改配置harbor配置文件
docker-compose stop

vim barbor.cfg
hostname = harbor.hj.org
ui_url_protocol = https
ssl_cert = /opt/harbor/certs/harbor.hj.org.crt 
ssl_cert_key = /opt/harbor/certs/harbor.hj.org.key

/opt/harbor/prepare
docker-compose up
3)配置docker不验证harbor(可选)

配置后不验证证书

配置docker信任harbor方法1
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry harbor.hj.com

systemctl daemon-reload
systemctl restart docker
配置docker信任harbor方法2
#配置内容如下
vim /etc/docker/daemon.json
{
  "insecure-registries": [
    "harbor.hj.com"
  ]
}
4)客户端访问、下载上传

配置后验证证书,docker登录必须要有harbor证书才能访问
参考官方文档:https://docs.docker.com/engine/reference/commandline/dockerd/#insecure-registries

vim /etc/hosts
2.2.2.14	harbor.hj.org

docker login -u admin -p 123456 harbor.hj.org

#下载harbor证书,目录必须是证书的名称,否则报错
mkdir -pv /etc/docker/certs.d/harbor.hj.org/
cp /opt/harbor/certs/ca.key /etc/docker/certs.d/harbor.hj.org/
posted @ 2022-02-24 16:54  suyanhj  阅读(128)  评论(0)    收藏  举报