亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

使用Nexus和SSL配置搭建安全的私有Docker倉庫指南

在当今的容器化环境中,Docker 已经改变了应用程序的开发、测试和部署方式。然而,当涉及到管理和分发 Docker 镜像的过程时,像 Docker Hub 这样的公共仓库可能并不总是适合那些需要隐私、安全性和对镜像管理控制的企业或组织。这时,建立一个私有 Docker 仓库通常是更好的选择。

本文将一步步教您使用Sonatype Nexus设置一个安全的私有Docker注册表,并配置SSL以确保Docker镜像推送和拉取的安全。

Nexus Repository Manager是什么?

Sonatype Nexus Repository Manager 是一个开源的仓库管理工具,支持多种工件类型,比如 Docker 镜像、Maven、npm 等。它帮助团队安全地存储、管理和分发他们在基础设施中的 Docker 镜像。使用 Nexus,你可以轻松地创建并管理托管的 Docker 仓库并通过 HTTP 或 HTTPS 协议访问它们。

将Nexus设置为私有Docker仓库,这样可以:

  • Docker镜像的控制:您可以安全地存储那些私有的镜像。
  • 更快的拉取:减少了对外部仓库的依赖,加速部署。
  • 自定义工作流程:实现了Docker镜像的版本控制和访问权限管理。
准备工作

要完成这个教程,你需要:

  • 一台 Linux 服务器 或虚拟机(VM)环境。
  • 您的机器上已经安装了 Docker
  • 已成功安装并运行 Nexus Repository Manager 软件。
  • Nexus 服务器的 域名或 IP 地址。
  • 具备基本的命令行工具使用经验。
第一步:安装 Nexus 仓库管理器

首先,你需要安装Nexus Repository Manager。你可以在物理服务器上运行Nexus,或者,使用Docker容器。

使用 Docker 的选项 1:

在 Docker 容器中运行 Nexus 是最快的方式。

    docker run -d -p 8081:8081 --name nexus sonatype/nexus3

运行一个Docker容器,将8081端口映射到主机的8081端口,并命名为nexus。这里,docker run 表示运行一个Docker容器,-d 表示后台运行容器,-p 将容器的8081端口映射到主机的8081端口,--name 指定容器的名称为nexus。

此命令将下载并启动Nexus,默认使用HTTP端口8081

选项 2:直接安装

如果你更喜欢本机安装Nexus,可以在Nexus官网下载最新版本。下载后,根据你的操作系统,按照相应的安装指南进行安装。

安装好之后,Nexus 应该可以在 http://<your-server-ip>:8081 访问。

步骤 2:进入 Nexus Web 界面

当Nexus启动后,你可以通过浏览器访问其网站。输入网址:

http://<你的服务器IP地址>:8081

请使用默认的凭证

  • 用户名:admin
  • 密码:admin123

首次登录时,你最好将密码改成更安全的密码。

第 3 步:配置 Nexus 作为 Docker 注册表

既然你已经把Nexus跑起来了,我们接下来就来配置它,让它可以托管Docker镜像文件。

  1. 登录到 Nexus:使用凭证登录。
  2. 新建一个 Docker 仓库
  • 在 Nexus 仪表板中,点击左侧的 “存储库” 选项卡。
  • 点击 “创建存储库” ,然后选择 “docker (托管)”
  • 输入存储库名称(例如,my-docker-repo)。
  • 设置 HTTP 端口(默认为 5000,但您可以使用其他端口)。
  • 如果您希望立即启用安全通信,请打开 SSL,不过我们将在下一步中介绍如何进行配置。

3. 保存仓库内容:点击 “保存” 以创建 Docker 仓库。

第 4 步:在 Nexus 上启用 SSL 以便进行安全的 Docker 操作

现在我们已经搭建好了Docker仓库,让我们用SSL来加强其安全性。

配置 Nexus 以使用 SSL:

  • 将生成的 nexus.keystore 文件复制到 /opt/nexus/ssl/ 目录(若 Nexus 安装在其他位置,请复制到相应的安装目录)。
  • /opt/nexus/etc/ 目录下编辑 nexus.properties 文件。然后,

请添加以下配置:

    application-https-port=8443  
    ssl.keystore.path=/opt/nexus/ssl/nexus.keystore  
    ssl.keystore.password=<keystore-password> #此处应填写实际的keystore密码

重启Nexus:

保存配置后,需要重启Nexus服务以应用SSL设置。

运行 `./bin/nexus restart` 重启命令

Nexus 现在可以通过 HTTPS 安全访问 https://<your-server-ip>:8443

配置 Docker 通过 HTTPS 从 Nexus 仓库进行上传和下载

相信SSL证书:

如果你使用自签证书,Docker 必须信任这个证书,你需要将证书 (nexus.crt) 添加到 Docker 客户端的信任证书库。

运行以下命令来复制证书并更新证书存储:

sudo cp nexus.crt /usr/local/share/ca-certificates/  
sudo update-ca-certificates

登录 Nexus Docker 注册表 (点击登录)

通过运行以下命令通过HTTPS登录Nexus:

docker login <your-server-ip>:8443

在你的服务器IP地址上登录Docker服务器

当需要时,请输入您的 Nexus 凭证。

将Docker镜像推送到Nexus:

使用 Nexus 注册表地址为你的 Docker 镜像打上标签并推送该镜像:

    docker tag myapp:v1 <your-server-ip>:8443/myapp:v1  # 将本地镜像标签重命名为远程仓库中的镜像标签
    docker push <your-server-ip>:8443/myapp:v1        # 将镜像推送到指定的远程仓库

从Nexus拉取Docker镜像

要从 Nexus 下载镜像,可以使用:

尝试运行以下命令来拉取镜像:

docker pull <your-server-ip>:8443/myapp:v1


# 可选:通过Nexus REST API修改密码

如果你更喜欢,你也可以通过**Nexus REST API**来更改密码。下面是通过简单的API调用进行更改的方法:

例如:
```plaintext
[API调用示例]

下面的 curl 命令用于修改 admin 用户的密码:

    curl -u admin:<当前密码> -X PATCH "http://<your-nexus-server>:8081/service/rest/v1/security/users/admin" \  
    -H "Content-Type: application/json" \  
    -d '{"password": "<新密码>"}'
  • <current-password> 替换为当前密码,例如 admin123

  • <your-nexus-server> 替换为您的 Nexus 服务器的 IP 或域名。

  • <new-password> 替换为您要为管理员设置的新密码。

执行完上述命令后,密码会被更新,可以用新密码登录了。

(可选)设置带有SSL终止功能的NGINX反向代理

你可以通过使用例如 NGINX 这样的反向代理来提高设置的安全性和灵活性,实现 SSL 终止。

安装nginx

    sudo apt install nginx

为 NGINX 配置 SSL

创建一个 NGINX 配置文件以将请求转发给 Nexus。例如:

    server {  
        listen 443 ssl;  
        server_name <your-server-ip>;  

        ssl_certificate /etc/nginx/ssl/nexus.crt;  
        ssl_certificate_key /etc/nginx/ssl/nexus.key;  

        location / {  
            proxy_pass http://localhost:8081;  
            proxy_set_header Host $host;  
            proxy_set_header X-Real-IP $remote_addr;  
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
            proxy_set_header X-Forwarded-Proto $scheme;  
        }  
    }  

    server {  
        listen 80;  
        server_name <your-server-ip>;  
        return 301 https://$host$request_uri;  
    }

重启一下 Nginx

配置完 NGINX 后,可以重启服务。

    sudo systemctl restart nginx

运行此命令以重启Nginx服务: sudo systemctl restart nginx

以下是为 Nexus Repository 配置 SSL 的 Docker 命令

首先,登录到你的服务器
docker login <your-server-ip-or-domain>:443  
(请将<your-server-ip-or-domain>:443替换为你的实际地址)

给你的本地镜像打上标签,以便上传到远程仓库
docker tag <local-image>:<tag> <your-server-ip-or-domain>:443/<repository-name>/<image-name>:<tag>  

将打过标签的镜像推送到远程仓库
docker push <your-server-ip-or-domain>:443/<repository-name>/<image-name>:<tag>  

从远程仓库拉取镜像
docker pull <your-server-ip-or-domain>:443/<repository-name>/<image-name>:<tag>
最后,我们来总结一下

通过上述步骤,你已经成功地使用 Sonatype Nexus 设置了 安全的私有 Docker 注册表,并配置了 SSL 以确保推送和拉取操作的安全。有了 SSL,你的 Docker 镜像将被安全传输,保护敏感数据的安全,并提高部署的速度和可靠性,确保更安全的环境。

无论你是使用自签名证书用于内部用途,还是使用来自CA的受信任SSL证书,这种设置都可以确保你的Docker注册表免受未加密通信带来的潜在漏洞的影响。

通过确保您的Docker注册表的安全,您不仅能够获得更强大的安全性,还能够获得以满足您组织的独特需求的灵活性和对Docker镜像的控制。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消