新闻详情
新闻搜索
在 SUSE Linux Enterprise Server 15Sp2 上设置安全的私有 Docker 注册表 科汇科技-四川 SUSE 官方授权分销代理商
容器化应用程序交付已成为当今 IT 环境下的最新趋势。这些容器镜像由各自的组织/社区通过其在线托管的官方 Docker 容器注册表分发。Docker 容器注册表是管理容器镜像存储和交付的应用程序。
容器镜像可以从任何可访问的在线注册表中提取,也可以推送到在线注册表中。这些在线注册表是公共的,除非您为在线空间付费,否则任何人都可以访问。设置离线/私有 Docker 注册表很重要,这样镜像就可以进行安全的离线存储。私有 Docker 注册表可以让您在组织内共享自定义镜像,从而保持体系结构构建块的一致、私有和集中来源。私有 Docker 注册表为大型集群和高频部署提供了更好的性能,并增加了访问身份验证等附加功能。
让我们看看如何在 SUSE Linux Enterprise Server 15Sp2 上设置安全的私有 Docker 注册表。在设置私有注册表之前,请确保服务器上所有补丁程序和更新可用,并且本地硬盘驱动器上有足够的空间。我是使用 RMT 服务器离线下载所有补丁和更新。因为 RMT 服务器有足够的空间,所以我在该服务器上设置了私有注册表。您可以通过以下 URL 设置 RMT 服务器:https://documentation.suse.com/sles/15-SP2/single-html/SLES-rmt/#book-rmt

主机服务器应最低配置 4GB RAM、2个 VCPU、40 GB 磁盘空间来托管私有 Docker 注册表。如果您想要下载较大的镜像(如 SUSE Application Delivery Platform),则需要超过 100 GB 的磁盘空间。
基本操作系统(即 SLES 15Sp2)设置完成后,请对服务器应用最新的补丁。请确保服务器上已启用 SUSE Package Hub 15Sp2 软件包存储库,并刷新存储库 # zypper refresh
刷新存储库后,您应该能够搜索 docker-distribution-registry 软件包
# zypper se docker-distribution-registry
Loading repository data…
Reading installed packages…
S | Name | Summary | Type
–+——————————+—————————-+——-
| docker-distribution-registry | Registry server for Docker | package
现在开始安装 Docker 和 docker-distribution-registry 软件包# zypper install docker docker-distribution-registry
安装软件包后,必须编辑注册表配置文件对数值进行调整。默认的注册表路径是 /var/lib/docker-registry,您也可以将其更改为其他路径。在我们的示例中,该路径是 /var/lib/registry(必须预先创建注册表目录)。在 /var/lib/registry 上挂载逻辑卷是一个好习惯,以便将来可以对其进行扩展。请确保 tls 部分已启用,并指向 RMT 服务器的服务器证书和服务器密钥。因为我在 RMT 服务器上安装了私有注册表,所以我使用了 /etc/rmt/ssl/rmt-server.crt 和 /etc/rmt/ssl/rmt-server.key 中的默认证书和服务器密钥。
rmt:~ # cat /etc/registry/config.yml
version: 0.1
log:
level: info
storage:
filesystem:
rootdirectory: /var/lib/registry
http:
addr: 0.0.0.0:5000
headers:
X-Content-Type-Options: [nosniff]
tls:
certificate: /etc/rmt/ssl/rmt-server.crt
key: /etc/rmt/ssl/rmt-server.key
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
***********************************************************************************************************************************************************************
Note : If your registry is insecure disable, registry security verification by editing
/etc/docker/daemon.json to ,
{
“insecure-registries” : [“rmt.example.com:5000”]
}
***********************************************************************************************************************************************************************
请确保 CA 证书在系统范围内可用,这样我们就可以在本地服务器上测试注册表。必须在所有其他试图将镜像推送到私有注册表的服务器上进行更新,
# cp /etc/rmt/ssl/rmt-ca.crt /etc/pki/trust/anchors/
# update-ca-certificates
在启动时启用并启动 Docker 注册表
# systemctl enable –now registry
在启动时启用并启动 Docker 服务
# systemctl enable –now docker
现在离线注册表已经设置完成,让我们使用 docker pull、tag 和 push 命令来测试一下注册表是否正常工作,首先从 SUSE 的官方注册表 registry.suse.com 中提取一个基本的 SLES15sp1 容器镜像,
# docker pull registry.suse.com/suse/sle15:15.1
将镜像标记为您选择的名称,这样就可以将其推送到本地注册表,
# docker tag registry.suse.com/suse/sle15:15.1 rmt.example.com:5000/suse/sle15:15.1
注意:上面的命令应在推送状态下产生。
现在,我们已经成功地将镜像推送到本地注册表。为了能够通过浏览器使用 API 访问注册表,我们必须使用 Nginx 设置反向代理和虚拟主机
为注册表创建反向代理和虚拟主机配置文件
登录到注册表服务器并创建 /etc/nginx/vhosts.d/registry-server-https.conf。将mymirror.local 替换为为其创建 SSL 证书的镜像服务器的主机名。
# vim /etc/nginx/vhosts.d/registry-server-https.conf
*********************************************************************
upstream docker-registry {
server 127.0.0.1:5000;
}
map $upstream_http_docker_distribution_api_version $docker_distribution_api_version {
” ‘registry/2.0’;
}
server {
listen 443 ssl;
server_name registry.example.com;
access_log /var/log/nginx/registry_https_access.log;
error_log /var/log/nginx/registry_https_error.log;
root /usr/share/rmt/public;
ssl_certificate /etc/rmt/ssl/rmt-server.crt;
ssl_certificate_key /etc/rmt/ssl/rmt-server.key;
ssl_protocols TLSv1.2 TLSv1.3;
# disable any limits to avoid HTTP 413 for large image uploads
client_max_body_size 0;
location /v2/ {
# Do not allow connections from docker 1.5 and earlier
# docker pre-1.6.0 did not properly set the user agent on ping, catch “Go *” user agents
if ($http_user_agent ~ “^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$” ) {
return 404;
}
## If $docker_distribution_api_version is empty, the header is not added.
## See the map directive above where this variable is defined.
add_header ‘Docker-Distribution-Api-Version’ $docker_distribution_api_version always;
proxy_pass http://docker-registry;
proxy_set_header Host $http_host; # required for docker client’s sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client’s IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
}
}
******************************************************************************
保存文件并重新启动 nginx
# systemctl restart nginx
在文档根目录的文件夹中创建注册表文件夹的链接
# ln -s /var/lib/registry/docker/registry/v2 /usr/share/rmt/public/
现在查看文件权限
# ls -la /usr/share/rmt/public/
total 12
drwxr-xr-x 3 _rmt nginx 4096 Apr 27 02:44 .
drwxr-xr-x 12 _rmt nginx 4096 Apr 26 15:41 ..
lrwxrwxrwx 1 _rmt nginx 24 Apr 3 18:48 repo -> /var/lib/rmt/public/repo
lrwxrwxrwx 1 _rmt nginx 24 Apr 3 18:48 suma -> /var/lib/rmt/public/suma
drwxr-xr-x 2 _rmt nginx 4096 Apr 26 15:41 tools
lrwxrwxrwx 1 root root 36 Apr 27 02:44 v2 -> /var/lib/registry/docker/registry/v2
现在在 /usr/share/rmt/public 下面为注册表创建软链接。您必须将此链接的所有权从 root:root 更改为 _rmt:nginx
# chown -R _rmt:nginx /usr/share/rmt/public/v2
rmt:~ #
total 12
drwxr-xr-x 3 _rmt nginx 4096 Apr 27 02:44 .
drwxr-xr-x 12 _rmt nginx 4096 Apr 26 15:41 ..
lrwxrwxrwx 1 _rmt nginx 24 Apr 3 18:48 repo -> /var/lib/rmt/public/repo
lrwxrwxrwx 1 _rmt nginx 24 Apr 3 18:48 suma -> /var/lib/rmt/public/suma
drwxr-xr-x 2 _rmt nginx 4096 Apr 26 15:41 tools
lrwxrwxrwx 1 _rmt nginx 36 Apr 27 02:44 v2 -> /var/lib/registry/docker/registry/v2
您可以重新启动 nginx 服务
# systemctl restart nginx 确认所有权是否已更改。
在浏览器上,转到下面的 URL 并验证是否列出了注册表目录,
https://registry.example.com:5000/v2/_catalog

现在,私有 docker 注册表已经设置完毕,可为容器镜像提供服务。您可以从 SUSE 的官方文档中找到更多关于创建和存储基于 SLES 的容器镜像的说明,
https://documentation.suse.com/sles/15-SP2/html/SLES-all/cha-registry-installation.html
IT解决方案
产品品类:
SUSE Linux企业服务器、Z系统和LinuxONE的SUSE Linux企业服务器、用于POWER的SUSE Linux企业服务器、用于ARM的SUSE Linux企业服务器、用于SAP应用程序的SUSE Linux企业服务器、SUSE Linux企业高性能计算、SUSE Linux企业实时、支持扩展的SUSE Linux企业服务器、SUSE Linux企业级服务点、SUSE Linux企业桌面、用于AmazonEC 2的SUSE Linux企业服务器、用于Azure的SUSE Linux企业服务器、SUSE Linux企业高可用性扩展、基于Geo集群的SUSE Linux企业高可用性扩展、SUSE Linux企业服务器工作站扩展、SUSE Linux企业虚拟机驱动程序包、SUSE LinuxEnterpriseLive修补、SUSE企业存储、SUSE容器作为服务平台、SUSE经理、零售经理、SUSE LinuxEnterpriseforARM、用于IBMZ和LinuxONE的SUSE Linux企业服务器、用于POWER的SUSE Linux企业服务器、SUSE嵌入式系统
运行SAP:用于SAP应用程序的SUSE Linux企业服务器、用于高可用性扩展的SUSE Linux企业服务器、、容器和应用平台、SUSE CaaS平台、SUSE云应用平台、SUSE DevOps
高可用性:用于高可用性扩展的SUSE Linux企业服务器、面向高可用性Geo集群的SUSE Linux企业、SUSE Linux企业实时、SUSE LinuxEnterpriseLive修补、SUSE Linux企业高性能计算
品牌:
SUSE Linux操作系统
解决方案:
SUSE12修改密码、suse linux 安装软件、suse系统、suse和redhat区别、opensuse使用教程、技术资源、核极限、KVM限制、Xen极限、文件系统、支持Java版本
不间断的IT、Running SAP Solutions、运行SAP解决方案、Adopting Containers、容器比例尺、Managing Hybrid Clouds、混合云解决方案、Government Solutions、Deliver Applications Faster、Harness the Data Explosion、引导数据热潮、Powering AI Advanced Analytics、幂AI与分析、Innovate at the Edge
更多品类和方案、价格 请咨询:
成都科汇科技有限公司
地址:成都市人民南路四段1号时代数码大厦18F
电话:400-028-1235
QQ: 2231749852
手机:180 8195 0517(微信同号)
