龙空技术网

Ubuntu 上搭建私有 Docker 镜像库,Docker 技能进阶

鸠摩智首席音效师 144

前言:

现在我们对“ubuntu安bdocker”大概比较关心,大家都需要学习一些“ubuntu安bdocker”的相关知识。那么小编同时在网络上收集了一些有关“ubuntu安bdocker””的相关知识,希望朋友们能喜欢,朋友们快快来了解一下吧!

本文中,我们将学习如何在 Ubuntu 20.04 上设置私有 docker 镜像库。

为什么要私有 Docker Registry?

要使用 Docker 平台平滑 CI/CD 开发,请考虑使用自托管 Docker 镜像库。为了更快的交付以及安全的基础架构,建议您设置自己的 Docker 私人镜像库以存储您的 Docker 镜像并在组织中分发。

前提条件User account with sudo privilegesA server for Docker registryNginx on the Docker Registry serverA client serverDocker and Docker-Compose on both servers.什么是私有 Docker Registry?

Docker Registry 是一个服务器端应用程序,允许您将 Docker 镜像本地存储到一个集中的位置。通过设置自己的 Docker Registry 服务器,您可以在不连接到 Docker Hub 的情况下拉出和推送 docker 镜像,节省带宽并防止安全威胁。

在开始之前,确保您已经在客户端服务器和本地镜像服务器上安装了 Docker 和 Docker- Compose,如果需要验证是否安装了所需的软件,可以执行以下命令查看软件版本。

$ docker version
$ docker-compose version

此外,您需要确保 docker 服务已启动,并在启动时设置为启用

$ sudo systemctl start docker$ sudo systemctl enable docker
安装和配置 Docker Registry

要配置私有 Docker Registry,请执行以下步骤

创建 Registry 目录

创建一个新目录,该目录将存储所有必需的配置文件

使用以下命令创建一个新的项目目录 myregistry 和两个子目录 nginx 和 auth

$ mkdir -p myregistry/{nginx, auth}

在 nginx 目录下创建两个子目录 conf.d 和 ssl

$ cd my-registry/$ mkdir -p nginx/{conf.d/, ssl}
创建 Docker-Compose 脚本和服务

在 myregistry 目录下创建一个 docker-compose.yml 文件

$ vi docker-compose.yml

在 docker-compose.yml 文件中定义服务

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 Networksnetworks:  mynet:    driver: bridge#Volumesvolumes:  myregistrydata:    driver: local

保存并且关闭文件

设置 nginx 端口转发

为 nginx 服务创建虚拟主机配置,转到上述步骤中创建的 nginx/conf.d 目录

$ cd nginx/conf.d/

创建一个 nginx 虚拟主机文件

$ vi myregistry.conf

添加以下内容

upstream docker-registry {    server registry:5000;}server {    listen 80;    server_name registry.linuxtechi.com;    return 301 ;}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                          ;        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

您将被要求提交一些详细信息,如国家代码,域名,电子邮件,填写详细信息并继续。

设置基本身份验证

转到 auth 目录

$ cd auth

执行如下命令,创建密码文件,用户名为:linuxtechi

$ htpasswd -Bc registry.password linuxtechi

如果系统提示 htpasswd command not found ,请在终端执行以下命令,然后重试

$  sudo apt install apache2-utils -y

输入强密码并再次输入以确认密码

运行 Docker Registry

您已经完成了安装,现在可以使用 docker-compose 命令构建 Registry

转到 myregistry 目录

$ cd myregistry

运行如下命令,构建镜像

$ docker-compose up -d

Docker Registry 已经启动,使用以下命令验证

$ docker ps -a
从 Docker Hub 拉镜像到私有 Registry

要从 Docker hub 存储镜像到私有 Registry,使用 Docker pull 命令从 Docker hub 拉取 Docker 镜像。在这个例子中,我将拉出 centos 的 docker 镜像。

$ docker pull centos

成功地从 docker hub 提取镜像后,将其标记为私有 registry

标记语法:

$ docker image tag [image name] registry.linuxtechi.com/[new-image-name]

示例如下:

$ docker images tag centos registry.linuxtechi.com/linuxtechi-centos

验证 docker 镜像在本地是否可用

$ docker images
推镜像到私有 registry

现在您需要将本地镜像推到私有 registry,首先使用以下命令登录到私有 registry

$ docker login 

使用自己的 registry url 替换

系统将提示输入用户名和密码,您将得到登录成功的消息

现在您可以将镜像推到私有 registry 中,使用如下命令

$ docker push registry.linuxtechi.com/linuxtechi-centos

推送完成后,在浏览器中访问 url

从私有 Registry 拉取镜像

您已经将本地 docker 镜像推到私有 docker registry,用同样的方法,你可以把 docker 镜像从 docker 私有 registry 拉到本地服务器。

运行以下命令,登录您的私有 registry 服务器

$ docker login 

运行以下命令,拉取镜像

$ docker pull registry.linuxtechi.com/linuxtechi-centos
我的开源项目

酷瓜云课堂 - 开源在线教育解决方案

course-tencent-cloud(酷瓜云课堂 - gitee 仓库)course-tencent-cloud(酷瓜云课堂 - github 仓库)

标签: #ubuntu安bdocker