Linux中如何搭建Docker私有仓库

发布时间:2022-02-10 15:20:43 作者:iii
来源:亿速云 阅读:119
# Linux中如何搭建Docker私有仓库

## 前言

在容器化技术日益普及的今天,Docker已成为开发者和运维人员的必备工具。虽然Docker Hub提供了丰富的公共镜像资源,但在企业级场景中,出于安全性、网络性能和定制化需求,搭建私有Docker仓库(Registry)显得尤为重要。本文将详细介绍在Linux系统上搭建Docker私有仓库的全过程。

---

## 一、私有仓库概述

### 1.1 什么是Docker私有仓库
Docker私有仓库是一个存储和分发Docker镜像的专用服务器,类似于Docker Hub但完全由用户自主控制。它允许您:
- 存储专有镜像
- 控制访问权限
- 减少对公共网络的依赖
- 加速CI/CD流程

### 1.2 核心组件
- **Registry**: Docker官方提供的开源仓库软件
- **Docker客户端**: 用于与仓库交互的工具
- **存储后端**: 通常使用本地文件系统或云存储

---

## 二、环境准备

### 2.1 系统要求
- Linux服务器(本文以Ubuntu 22.04为例)
- Docker CE 20.10.0+
- 至少2GB可用磁盘空间
- 开放5000端口(或自定义端口)

### 2.2 安装Docker
```bash
# 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# 添加Docker官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 设置仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 验证安装
sudo docker run hello-world

三、基础私有仓库搭建

3.1 快速启动Registry容器

docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /var/lib/registry:/var/lib/registry \
  registry:2

3.2 测试私有仓库

# 拉取测试镜像
docker pull ubuntu:20.04

# 标记镜像指向私有仓库
docker tag ubuntu:20.04 localhost:5000/my-ubuntu

# 推送镜像
docker push localhost:5000/my-ubuntu

# 删除本地镜像后重新拉取
docker image rm localhost:5000/my-ubuntu
docker pull localhost:5000/my-ubuntu

四、高级配置

4.1 启用HTTPS安全连接

生成自签名证书

mkdir -p certs
openssl req \
  -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
  -x509 -days 365 -out certs/domain.crt \
  -subj "/CN=myregistry.example.com"

启动带HTTPS的Registry

docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v $(pwd)/certs:/certs \
  -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
  -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
  -v /var/lib/registry:/var/lib/registry \
  registry:2

4.2 添加用户认证

创建认证文件

mkdir auth
docker run --entrypoint htpasswd \
  httpd:2 -Bbn username password > auth/htpasswd

启动带认证的Registry

docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v $(pwd)/auth:/auth \
  -e "REGISTRY_AUTH=htpasswd" \
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
  -v /var/lib/registry:/var/lib/registry \
  registry:2

客户端登录

docker login myregistry.example.com:5000

五、使用Docker Compose部署

5.1 创建docker-compose.yml

version: '3'

services:
  registry:
    image: registry:2
    ports:
      - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
      REGISTRY_HTTP_TLS_KEY: /certs/domain.key
    volumes:
      - ./data:/var/lib/registry
      - ./auth:/auth
      - ./certs:/certs

5.2 启动服务

docker-compose up -d

六、仓库管理与维护

6.1 查看仓库内容

curl -X GET https://myregistry.example.com:5000/v2/_catalog

6.2 删除镜像(需启用删除功能)

# 修改配置启用删除
environment:
  REGISTRY_STORAGE_DELETE_ENABLED: "true"

# 获取镜像digest
DIGEST=$(curl -I -H "Accept: application/vnd.docker.distribution.manifest.v2+json" \
  http://localhost:5000/v2/my-ubuntu/manifests/latest | grep Digest | awk '{print $2}')

# 删除镜像
curl -X DELETE http://localhost:5000/v2/my-ubuntu/manifests/$DIGEST

6.3 垃圾回收

docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml

七、企业级解决方案

7.1 Harbor介绍

Harbor是VMware开源的企业级Registry服务,提供: - 基于角色的访问控制 - 镜像漏洞扫描 - 图形化管理界面 - 日志审计

7.2 Harbor安装示例

# 下载安装包
wget https://github.com/goharbor/harbor/releases/download/v2.6.0/harbor-offline-installer-v2.6.0.tgz

# 解压并配置
tar xvf harbor-offline-installer-v2.6.0.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml  # 修改hostname和admin密码

# 安装
./install.sh

八、常见问题排查

8.1 客户端报错”http: server gave HTTP response to HTTPS client”

解决方法:

# 对于Linux客户端
sudo mkdir -p /etc/docker/certs.d/myregistry.example.com:5000
sudo cp certs/domain.crt /etc/docker/certs.d/myregistry.example.com:5000/ca.crt
sudo systemctl restart docker

8.2 存储空间不足

建议方案: - 定期清理无用镜像 - 配置外部存储(如S3、Azure Blob等) - 设置存储配额


结语

搭建Docker私有仓库是企业容器化实践的重要一步。通过本文介绍的基础搭建到高级配置,您可以根据实际需求构建安全可靠的镜像分发体系。随着业务规模扩大,建议考虑Harbor等企业级解决方案以获得更完善的功能支持。

”`

(注:实际字数约2800字,可根据需要调整具体章节的详细程度)

推荐阅读:
  1. docker私有仓库的搭建
  2. docker私有仓库搭建

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux docker

上一篇:Linux的partprobe命令有什么用

下一篇:Linux中ifup命令有什么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》