R / Richie全部文章 ↑

Linux · 2 分钟阅读

09. 访问仓库

镜像仓库分两层:

  • Registry:服务(Docker Hub、Harbor、Quay)
  • Repository:仓库里的某个镜像集合

仓库名 = registry[:port]/[namespace/]name:

例子 含义
nginx Docker Hub 官方镜像
myorg/api 用户 myorg 下的镜像
registry.example.com/team/api:1.0 自建 Registry

Docker Hub

hub.docker.com 是默认公共仓库。镜像数量、下载量、官方支持都很完善。

# 登录
docker login
docker login registry.example.com

# 搜索
docker search nginx
docker search --filter=stars=100 nginx

# 拉取
docker pull nginx:1.27

推送

# 打标签
docker tag myapp:1.0 myorg/myapp:1.0

# 推送
docker push myorg/myapp:1.0

自动构建

Docker Hub 关联 GitHub 后,commit 触发自动构建:

  1. 创建 Hub 账号,关联 GitHub
  2. Create → Automated Build → 选仓库
  3. 指定 Dockerfile 路径
  4. 每次 push 触发一次构建

2026 视角:自动构建基本被 GitHub Actions / GitLab CI / Drone 取代。CI 自己打镜像更灵活,registry 只做存储。

私有 Registry

简单方式

# 跑官方 registry 镜像
docker run -d -p 5000:5000 --restart=always --name registry \
    -v /data/registry:/var/lib/registry \
    registry:2

# 推镜像
docker tag myapp:1.0 localhost:5000/myapp:1.0
docker push localhost:5000/myapp:1.0

# 看列表
curl http://localhost:5000/v2/_catalog

客户端信任

非 HTTPS 仓库要在 daemon 加白名单:

// /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.1.100:5000"]
}
systemctl restart docker

加认证

mkdir auth
docker run --rm --entrypoint htpasswd \
    registry:2 -Bbn admin 'secret' > auth/htpasswd

docker run -d -p 5000:5000 --restart=always --name registry \
    -v $(pwd)/auth:/auth \
    -v $(pwd)/certs:/certs \
    -e REGISTRY_AUTH=htpasswd \
    -e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
    -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
    -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
    registry:2

客户端加 CA:

mkdir -p /etc/docker/certs.d/myregistry:5000
cp ca.crt /etc/docker/certs.d/myregistry:5000/ca.crt

自签名证书

# CA 私钥 + 自签证书
openssl genrsa -out root-ca.key 4096
openssl req -new -key root-ca.key -out root-ca.csr -sha256 \
    -subj '/C=CN/ST=Beijing/L=BJ/O=MyOrg/CN=MyOrg CA'
openssl x509 -req -days 3650 -in root-ca.csr \
    -signkey root-ca.key -sha256 -out root-ca.crt

# 站点证书
openssl genrsa -out domain.key 4096
openssl req -new -key domain.key -out domain.csr -sha256 \
    -subj '/C=CN/ST=Beijing/L=BJ/O=MyOrg/CN=registry.example.com'
openssl x509 -req -days 750 -in domain.csr -sha256 \
    -CA root-ca.crt -CAkey root-ca.key -CAcreateserial \
    -out domain.crt -extfile <(printf "subjectAltName=DNS:registry.example.com")

2026 年主流方案:直接用 Harbor、Quay、阿里云 ACR,省去自建 registry 维护成本。

参考