[ad_1]
平滑 CI/CD 使用 docker 平台进行开发,请考虑使用自托管的 docker 注册服务器。 Docker 注册表是一个存储库,您可以在其中存储 Docker 映像并拉取它们以在服务器上运行应用程序。 为了更快的交付以及安全的基础架构,建议设置您自己的 docker 私有注册表来存储您的 docker 镜像并在组织之间分发。 在本文中,我们将学习如何在 Ubuntu 20.04 上设置私有 docker 注册表
先决条件
- 用户帐户 sudo 特权
- Docker 注册表的服务器
- Docker Registry 服务器上的 Nginx
- 客户端服务器
- 两台服务器上的 Docker 和 Docker-Compose。
私有 Docker 注册表
Docker Registry 是一种服务器端应用程序,它允许您将 Docker 镜像本地存储到一个集中位置。 通过设置您自己的 docker 注册服务器,您可以在无需连接到 Docker 集线器的情况下拉取和推送 docker 镜像,从而节省您的带宽并防止您受到安全威胁。
还阅读 : 如何在 Ubuntu 20.04 / 20.10 上安装和使用 Docker
在你开始之前
在开始之前,我确保您已经在客户端服务器和本地注册服务器上安装了 Docker 和 Docker-Compose。 为了验证您是否安装了所需的软件,您可以运行以下命令来检查软件版本。
$ docker version
$ docker-compose version
此外,您需要确保 docker 服务已启动并设置为在启动时启用:
$ sudo systemctl start docker $ sudo systemctl enable docker
安装和配置私有 Docker 注册表
要配置私有 Docker 注册表,请按照下列步骤操作:
创建注册表目录
配置将托管私有注册表的服务器。 创建一个新目录,用于存储所有必需的配置文件。
使用以下命令创建一个新的项目目录 ‘我的注册表‘ 和两个子目录 ‘nginx‘ 和 ‘授权’。 您可以对项目名称有自己的假设。
$ mkdir -p my-registry/{nginx, auth}
现在导航到项目目录并在 nginx 中创建新目录:
$ cd my-registry/ $ mkdir -p nginx/{conf.d/, ssl}
创建 Docker-Compose 脚本和服务
你需要创建一个新的 docker-compose.yml 定义 docker-compose 版本和设置私有注册表所需的服务的脚本。
创建一个新文件“docker-compose.yml“里面”我的注册表” 带有 vi 编辑器的目录。
$ vi docker-compose.yml
在 docker-compose 文件中将您的服务定义为:
services: #Registry registry: image: registry:2 restart: always ports: - "5000:5000" environment: REGISTRY_AUTH: htpasswd REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data volumes: - myregistrydata:/data - ./auth:/auth networks: - mynet #Nginx Service nginx: image: nginx:alpine container_name: nginx restart: unless-stopped tty: true ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d/:/etc/nginx/conf.d/ - ./nginx/ssl/:/etc/nginx/ssl/ networks: - mynet #Docker Networks networks: mynet: driver: bridge #Volumes volumes: myregistrydata: driver: local
Save 和 close 文件
设置nginx端口转发
我们需要为 nginx web 服务创建 nginx 虚拟主机配置。 转到上一步创建的 nginx/conf.d/ 目录。
$ cd nginx/conf.d/
现在用你的文本编辑器创建一个 nginx 虚拟主机文件。 在这个例子中,我将命名它 myregistry.conf。 你可以有你自己的假设。
$ vi myregistry.conf
添加以下内容:
upstream docker-registry { server registry:5000; } server { listen 80; server_name registry.linuxtechi.com; return 301 https://registry.linuxtechi.com$request_uri; } server { listen 443 ssl http2; server_name registry.linuxtechi.com; ssl_certificate /etc/nginx/ssl/certificate.crt; ssl_certificate_key /etc/nginx/ssl/private.key; # Log files for Debug error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; location / { if ($http_user_agent ~ "^(docker/1.(3|4|5(?!.[0-9]-dev))|Go ).*$" ) { return 404; } proxy_pass https://docker-registry; proxy_set_header Host $http_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; proxy_read_timeout 900; } }
用 server_name 参数替换您的域名并保存文件。
增加nginx文件上传大小
默认情况下,nginx 上传文件的限制为 1mb。 当docker镜像超过这个限制时,需要在nginx配置文件中增加上传大小。 在这个例子中,我将创建一个额外的 nginx 配置文件,上传限制为 2GB。
进入nginx配置目录
$ cd myregistry/nginx/conf.d $ vi additional.conf
添加以下行并保存文件
client_max_body_size 2G;
配置 SSL 证书和身份验证
创建 nginx 配置文件后,现在我们需要设置一个 ssl 证书。 您应该有一个带有私钥的有效 ssl 证书文件。 将您的证书文件和私钥复制到 nginx/ssl 目录,如下所示:
$ cd myregistry/nginx/ssl $ cp /your-ssl-certificate-path/certificate.crt . $ cp /your-private-key-path/private.key .
如果您没有购买的有效 ssl 证书,您可以生成自己的自签名 ssl 证书。 请记住,不建议在生产环境中使用自签名 ssl 证书。 要生成自签名 ssl 证书,请运行以下命令:
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-private.key -out /etc/ssl/certs/nginx-certificate.crt
您将被要求提交一些详细信息,例如国家/地区代码、域名、电子邮件 ID。 填写详细信息并继续。
现在将基本身份验证设置为:
进入授权目录
$ cd auth
请求一个名为的新密码文件 注册表.密码 为您的用户。 在这个例子中,我将使用 linux技术 用户。
$ htpasswd -Bc registry.password linuxtechi
如果你得到 ‘htpasswd 未找到命令‘,在终端中运行以下命令并重试。
$ sudo apt install apache2-utils -y
输入一个强密码并再次输入以确认您的密码。 您已为 docker 注册表添加了一个基本身份验证用户。
运行 Docker 注册表
您已完成设置。 您可以使用 docker-compose 命令构建注册表。
转到我们创建 docker-compose.yml 文件的目录
$ cd myregistry
现在运行以下命令:
$ docker-compose up -d
Docker 注册表现已启动,您可以使用以下命令验证正在运行的容器:
$ docker ps -a
您将获得以下输出:
从 Docker Hub 拉取镜像到私有注册中心
要将镜像从 Docker hub 存储到私有注册表,请使用 docker pull 命令从 docker hub 拉取 docker 镜像。 在这个例子中,我将拉取 centos 的 docker 镜像。
$ docker pull centos
从 docker hub 成功拉取镜像后,标记一个镜像以将其标记为私有注册表。
在这个例子中,我要将 centos 图像标记为: registry.linuxtechi.com/linuxtechi-centos
$ docker 镜像标签 [image name] registry.linuxtechi.com/[new-image-name]
例子:
$ docker images tag centos registry.linuxtechi.com/linuxtechi-centos
要检查 docker 镜像是否在本地可用,请运行以下命令。
$ docker images
将 docker 镜像推送到私有注册表
您已经从 docker hub 拉取了 docker 镜像并为私有注册表创建了一个标签。 现在您需要将本地 docker 镜像推送到私有注册表。
首先,使用以下命令登录到您的私人注册表:
$ docker login https://registry.linuxtechi.com/v2/
使用您自己的注册表 URL 代替“https://registry.linuxtechi.com”
系统将提示您输入用户名和密码; 您将收到登录成功消息:
现在您可以将您的 docker 镜像推送到私有注册表。 要推送图像,请运行以下命令:
$ docker push registry.linuxtechi.com/linuxtechi-centos
在“docker push”之后替换您的图像名称
推送完成后,您可以转到浏览器并输入网址:
https://registry.linuxtechi.com/v2/_catalog
将 registry.linuxtechi.com 替换为您自己的 url 并提供基本身份验证。 您会发现存储库列表如下:
从私有注册表中拉取 docker 镜像
您已将本地 docker 映像推送到您的私有 docker 注册表。 以同样的方式,您可以将 docker 镜像从您的 docker 私有注册表中提取到本地服务器。
运行以下命令以登录您的私有注册服务器。
$ docker login https://registry.linuxtechi.com
将 registry.linuxtechi.com 替换为您自己的私有注册表 URL 并提供基本身份验证。 登录成功后,运行以下命令从私有注册表中拉取 docker 镜像。 在这个例子中,我将在本地服务器中拉取之前推送的 docker 镜像。 您可以对 docker 镜像名称有自己的假设。
$ docker pull registry.linuxtechi.com/linuxtechi-centos
您将获得类似于以下内容的输出:
结论:
在这篇文章中,您已经了解了如何托管您自己的私有 docker 注册表。 您还知道如何将图像从 docker hub 拉到本地服务器,标记图像并推送到私有注册表中。 您还学习了如何从本地服务器的私有注册表中提取 docker 镜像。
还阅读 : 如何在 Ubuntu 20.04 LTS 服务器上安装 KVM (Focal Fossa)
[ad_2]