5.1 docker 镜像仓库
镜像存储路径
- linux: /var/lib/docker
- windows: ~/.docker/
镜像管理主要命令:
docker images # 查看本地镜像列表
docker search xx # 搜索某个镜像
docker pull xx # 下载某个镜像
# 以 python 为例 找能用的 python 版本 # 先找带有 python 名称的镜像 docker search python # 打印出 python 镜像的所有 layer curl https://registry.hub.docker.com/v1/repositories/python/tags| tr -d '[\[\]" ]' | tr '}' '\n' # 在上面语句基础上用 awk 提取:的第三段,组合成 python:[3] curl https://registry.hub.docker.com/v1/repositories/python/tags| tr -d '[\[\]" ]' | tr '}' '\n'| awk -F: -v image='python' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}' python:3.9.8 python:3.9.8-alpine python:3.9.8-alpine3.13 python:3.9.8-alpine3.14 python:3.9.8-bullseye python:3.9.8-buster python:3.9.8-slim python:3.9.8-slim-bullseye python:3.9.8-slim-buster python:3.9.8-windowsservercore python:3.9.8-windowsservercore-1809 python:3.9.8-windowsservercore-ltsc2016 python:3.9.8-windowsservercore-ltsc2022 ...
镜像仓库常用命令:
登陆:
docker login [OPTIONS] [SERVER]
#若未指定 SERVER,则默认连接 Daemon 指定的服务器退出:
docker logout [SERVER]
5.1.1 官方 docker Hub
Docker Hub ( http://hub.docker.com ) 是缺省的官方仓库。pull 拉取镜像默认是从官仓拉取的。
登陆 docker Hub, 推送镜像,配置文件 ~/.docker/config.json
$ cat ~/.docker/config.json
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "a2VlZmV3dTp3cWYzNjN3cWYzNjM=",
"email": ""
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.03.0-ce (windows)"
}
}
$ docker login
$ docker push [image:tag]
5.1.2 私有 Registry2
docker 官方开源的私有镜像仓库 registry,分为二个版本。
- registry1:python 语言开发,要求 docker1.6 以下版本。
- registry2:即 docker distribution,go 语言开发,更加安全和快速。要求 docker 版本高于 1.6。harbor 是基于 registry2 开发的。
Registry 2 不包含界面、用户管理、权限控制等功能,如果想使用这些功能,可使用 Docker Trusted Registry 或者 企业级镜像仓库 harbor。
docker 配置文件 daemon.json 里增加私仓
{
"insecure-registries": [
"http://localhost:5000",
]
}
服务启动:
$ docker run -d -p 5000:5000 --restart=always --name registry2 registry:2
修改 tag,如果 tag 前不加 host:port/,缺省将推送到官仓相应的镜像里(如果有权限)
$ docker tag [old_image:tag] [localhost:5000/new_image:tag]
$ docker push [localhost:5000/new_image:tag]
5.1.3 企业级 Harbor
开源项目地址: https://github.com/goharbor/harbor/releases
VMware 开源的企业级 Registry 项目 Harbor,以 Docker 公司开源的 registry 为基础,提供了管理 UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP 集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文,主要特点:
基于角色的访问控制 - 用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
镜像复制 - 镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
图形化用户界面 - 用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
AD/LDAP 支持 - Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
RESTful API - RESTful API 提供给管理员对于 Harbor 更多的操控,使得与其它管理软件集成变得更容易。
部署简单 - 提供在线和离线两种安装工具, 也可以安装到 vSphere 平台(OVA 方式) 虚拟设备
1)下载安装
[root@otrs004097 opt]# wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.2.tgz
[root@otrs004097 opt]# tar xf harbor-offline-installer-v1.8.2.tgz
[root@otrs004097 opt]# cd harbor/
[root@otrs004097 harbor]# ls
harbor.v1.8.2.tar.gz harbor.yml install.sh LICENSE prepare
2) 配置文件 harbor.yml
可根据实际情况修改 hostname, port, harbor_admin_password, database.password,
必须参数
hostname: 目标主机的主机名。它应该是目标计算机的 IP 地址或完全限定的域名(FQDN),例如:172.16.1.30 或 reg.yourdomain.com 。不要使用 localhost 或 127.0.0.1 作为主机名。
data_volume: Harbor 数据的存储位置
harbor_admin_password: 管理员的初始密码。此密码仅在 Harbor 首次启动时生效。请注意,默认用户 名/密码为 admin / Harbor12345
database: 与本地数据库相关的配置。
password: 默认数据库密码为 root123,应该改为一个安全的生产环境密码。
可选参数
port: https 的端口号。
certificate: SSL 证书的路径,仅在协议设置为 https 时应用。
private_key: SSL 密钥的路径,仅在协议设置为 https 时应用。
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: 121.36.106.72
# http related config: 如果修改了 port,也要同步修改 docker-compose.yml 相应内容
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 1180
# https related config
# https:
# # https port for harbor, default is 443
# port: 443
# # The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# Uncomment external_url if you want to enable external proxy
# And when it enabled the hostname will no longer used
# external_url: https://reg.mydomain.com:8433
# The initial password of Harbor admin
# It only works in first time to install harbor
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: xxxx
# Harbor DB configuration
database:
# The password for the root user of Harbor DB. Change this before any production use.
password: xxxx
# The default data volume
data_volume: /data
# Harbor Storage settings by default is using /data dir on local filesystem
# Uncomment storage_service setting If you want to using external storage
# storage_service:
# # ca_bundle is the path to the custom root ca certificate, which will be injected into the truststore
# # of registry's and chart repository's containers. This is usually needed when the user hosts a internal storage with self signed certificate.
# ca_bundle:
# # storage backend, default is filesystem, options include filesystem, azure, gcs, s3, swift and oss
# # for more info about this configuration please refer https://docs.docker.com/registry/configuration/
# filesystem:
# maxthreads: 100
# # set disable to true when you want to disable registry redirect
# redirect:
# disabled: false
# Clair configuration
clair:
# The interval of clair updaters, the unit is hour, set to 0 to disable the updaters.
updaters_interval: 12
# Config http proxy for Clair, e.g. http://my.proxy.com:3128
# Clair doesn't need to connect to harbor internal components via http proxy.
http_proxy:
https_proxy:
no_proxy: 127.0.0.1,localhost,core,registry
jobservice:
# Maximum number of job workers in job service
max_job_workers: 10
chart:
# Change the value of absolute_url to enabled can enable absolute url in chart
absolute_url: disabled
# Log configurations
log:
# options are debug, info, warning, error, fatal
level: info
# Log files are rotated log_rotate_count times before being removed. If count is 0, old versions are removed rather than rotated.
rotate_count: 50
# Log files are rotated only if they grow bigger than log_rotate_size bytes. If size is followed by k, the size is assumed to be in kilobytes.
# If the M is used, the size is in megabytes, and if G is used, the size is in gigabytes. So size 100, size 100k, size 100M and size 100G
# are all valid.
rotate_size: 200M
# The directory on your host that store log
location: /var/log/harbor
#This attribute is for migrator to detect the version of the .cfg file, DO NOT MODIFY!
_version: 1.8.0
# Uncomment external_database if using external database.
# external_database:
# harbor:
# host: harbor_db_host
# port: harbor_db_port
# db_name: harbor_db_name
# username: harbor_db_username
# password: harbor_db_password
# ssl_mode: disable
# clair:
# host: clair_db_host
# port: clair_db_port
# db_name: clair_db_name
# username: clair_db_username
# password: clair_db_password
# ssl_mode: disable
# notary_signer:
# host: notary_signer_db_host
# port: notary_signer_db_port
# db_name: notary_signer_db_name
# username: notary_signer_db_username
# password: notary_signer_db_password
# ssl_mode: disable
# notary_server:
# host: notary_server_db_host
# port: notary_server_db_port
# db_name: notary_server_db_name
# username: notary_server_db_username
# password: notary_server_db_password
# ssl_mode: disable
# Uncomment external_redis if using external Redis server
# external_redis:
# host: redis
# port: 6379
# password:
# # db_index 0 is for core, it's unchangeable
# registry_db_index: 1
# jobservice_db_index: 2
# chartmuseum_db_index: 3
# Uncomment uaa for trusting the certificate of uaa instance that is hosted via self-signed cert.
# uaa:
# ca_file: /path/to/ca
3)运行安装脚本
[root@registory harbor]# ./install.sh
4)使用 ADMIN 账号登陆
5)Harbor 服务操作
如果想要停止,或者是服务器重启了,需要手动重启,在 harbor 的安装目录,里执行命令
$ docker-compose stop|start|restart
技术原理
Harbor 由 6 个大的模块所组成:
Proxy : Harbor 的 registry、UI、token services 等组件,都处在一个反向代理后边。该代理将来自浏览器、docker clients 的请求转发到后端服务上。
Registry : 负责存储 Docker 镜像,以及处理 Docker push/pull 请求。因为 Harbor 强制要求对镜像的访问做权限控制, 在每一次 push/pull 请求时,Registry 会强制要求客户端从 token service 那里获得一个有效的 token。
Core services : Harbor 的核心功能,主要包括如下 3 个服务:
UI: 作为 Registry Webhook, 以图像用户界面的方式辅助用户管理镜像。
WebHook:WebHook 是在 registry 中配置的一种机制, 当 registry 中镜像发生改变时,就可以通知到 Harbor 的 webhook endpoint。Harbor 使用 webhook 来更新日志、初始化同步 job 等。
Token 服务:负责根据用户权限给每个 docker push/pull 命令签发 token. Docker 客户端向 Regiøstry 服务发起的请求,如果不包含 token,会被重定向到这里,获得 token 后再重新向 Registry 进行请求。
Database :为 core services 提供数据库服务,负责储存用户权限、审计日志、Docker image 分组信息等数据。
Job services : 主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。
Log collector : 负责收集其他组件的日志到一个地方
这里我们与上面运行的 7 个容器对比,对 harbor-adminserver
感觉有些疑虑。其实这里 harbor-adminserver
主要是作为一个后端的配置数据管理,并没有太多的其他功能。 harbor-ui
所要操作的所有数据都通过 harbor-adminserver 这样一个数据配置管理中心来完成。
harbor 运行时有 7 个容器: nginx
、 harbor-jobservice
、 harbor-ui
、 harbor-db
、 harbor-adminserver
、 registry
以及 harbor-log
。
Harbor 的每一个组件都被包装成一个 docker 容器。自然,Harbor 是通过 docker compose 来部署的。在 Harbor 源代码 的 make 目录下的 docker-compose 模板会被用于部署 Harbor。打开该模板文件,可以看到 Harbor 由 7 个容器组件所组成:
proxy
: 通过 nginx 服务器来做反向代理registry
: docker 官方发布的一个仓库镜像组件ui
: 整个架构的核心服务。该容器是 Harbor 工程的主要部分adminserver
: 作为 Harbor 工程的配置数据管理器使用mysql
: 通过官方 Mysql 镜像创建的数据库容器job services
: 通过状态机的形式将镜像复制到远程 Harbor 实例。镜像删除同样也可以被同步到远程 Harbor 实例中。log
: 运行 rsyslogd 的容器,主要用于收集其他容器的日志
这些容器之间都通过 Docker 内的 DNS 服务发现来连接通信。通过这种方式,每一个容器都可以通过相应的容器来进行访问。对于终端用户来说,只有反向代理(Nginx) 服务的端口需要对外暴露。
Harbor 由 6 个大的模块所组成:
Proxy : Harbor 的 registry、UI、token services 等组件,都处在一个反向代理后边。该代理将来自浏览器、docker clients 的请求转发到后端服务上。
Registry : 负责存储 Docker 镜像,以及处理 Docker push/pull 请求。因为 Harbor 强制要求对镜像的访问做权限控制, 在每一次 push/pull 请求时,Registry 会强制要求客户端从 token service 那里获得一个有效的 token。
Core services : Harbor 的核心功能,主要包括如下 3 个服务:
UI: 作为 Registry Webhook, 以图像用户界面的方式辅助用户管理镜像。
WebHook:WebHook 是在 registry 中配置的一种机制, 当 registry 中镜像发生改变时,就可以通知到 Harbor 的 webhook endpoint。Harbor 使用 webhook 来更新日志、初始化同步 job 等。
Token 服务:负责根据用户权限给每个 docker push/pull 命令签发 token. Docker 客户端向 Regiøstry 服务发起的请求,如果不包含 token,会被重定向到这里,获得 token 后再重新向 Registry 进行请求。
Database :为 core services 提供数据库服务,负责储存用户权限、审计日志、Docker image 分组信息等数据。
Job services : 主要用于镜像复制,本地镜像可以被同步到远程 Harbor 实例上。
Log collector : 负责收集其他组件的日志到一个地方
这里我们与上面运行的 7 个容器对比,对 harbor-adminserver
感觉有些疑虑。其实这里 harbor-adminserver
主要是作为一个后端的配置数据管理,并没有太多的其他功能。 harbor-ui
所要操作的所有数据都通过 harbor-adminserver 这样一个数据配置管理中心来完成。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论