关于ubuntu:Ubuntu-上安装私有-Docker-镜像库

6次阅读

共计 4322 个字符,预计需要花费 11 分钟才能阅读完成。

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

为什么要公有 Docker Registry?

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

前提条件

  • User account with sudo privileges
  • A server for Docker registry
  • Nginx on the Docker Registry server
  • A client server
  • Docker 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 Networks
networks:
  mynet:
    driver: bridge

#Volumes
volumes:
  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 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                          http://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

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

设置根本身份验证

转到 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 https://registry.linuxtechi.com/v2/

应用本人的 registry url 替换 https://registry.linuxtechi.com

零碎将提醒输出用户名和明码,您将失去登录胜利的音讯

当初您能够将镜像推到公有 registry 中,应用如下命令

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

推送实现后,在浏览器中拜访 url

https://registry.linuxtechi.com/v2/_catalog

从公有 Registry 拉取镜像

您曾经将本地 docker 镜像推到公有 docker registry,用同样的办法,你能够把 docker 镜像从 docker 公有 registry 拉到本地服务器。

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

$ docker login https://registry.linuxtechi.com

运行以下命令,拉取镜像

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

我的开源我的项目

  • course-tencent-cloud(酷瓜云课堂 – gitee 仓库)
  • course-tencent-cloud(酷瓜云课堂 – github 仓库)
正文完
 0