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 触发自动构建:
- 创建 Hub 账号,关联 GitHub
- Create → Automated Build → 选仓库
- 指定 Dockerfile 路径
- 每次 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 维护成本。