Skip to content

搭建私有 Docker 镜像仓库

官方 Docker 镜像

拉取镜像:

bash
docker pull registry:2.8.3

启动 Docker Compose:

yaml
services:
  registry:
    image: registry:2.8.3
    container_name: registry
    restart: unless-stopped
    ports:
      - 5000:5000
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./data/registry:/var/lib/registry

保存 docker-compose.yml 文件,然后执行以下命令启动 Docker 镜像仓库:

bash
docker-compose up -d

推送镜像:

bash
docker tag $IMAGE_NAME xxxxxx:5000/$IMAGE_NAME
docker push xxxxxx:5000/$IMAGE_NAME
docker rmi xxxxxx:5000/$IMAGE_NAME

拉取镜像:

bash
docker pull xxxxxx:5000/$IMAGE_NAME
docker tag xxxxxx:5000/$IMAGE_NAME $IMAGE_NAME
docker rmi xxxxxx:5000/$IMAGE_NAME

在局域网中,客户端可配置允许不安全的 HTTP 服务:

json
{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "insecure-registries": ["xxxxxx:5000"]
}

添加用户认证

yaml
services:
  registry:
    image: registry:2.8.3
    container_name: registry
    restart: unless-stopped
    ports:
      - 5000:5000
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./data/registry:/var/lib/registry
      - ./data/auth:/auth
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd

通过 htpasswd 命令生成密码:

bash
htpasswd -Bc ./data/auth/htpasswd $USER_NAME $PASSWORD

添加 SSL 证书

自签名证书生成

如果你使用公共 SSL 证书请跳过这一节。

请参考 自签名证书生成 来生成一张局域网内的 SSL 证书,需要客户端安装内网 CA 证书以便能够拉取/上传镜像。

  • Windows 系统下,请将证书安装到 受信任的根证书颁发机构 中,然后重启 Docker Desktop。
  • Linux 系统下,将证书放到 /etc/docker/certs.d/xxxxxx:5000/ca.crt 中,然后重启 Docker Daemon。
  • MacOS 系统下,将证书安装到 钥匙串访问 中,设置始终信任此证书,然后重启 Docker Desktop。

配置 Docker Registry

yaml
services:
  registry:
    image: registry:2.8.3
    container_name: registry
    restart: unless-stopped
    ports:
      - 5000:5000
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./data/registry:/var/lib/registry
      - ./data/certs:/certs
    environment:
      REGISTRY_HTTP_TLS_CERTIFICATE: /certs/xxxxxx.crt
      REGISTRY_HTTP_TLS_KEY: /certs/xxxxxx.key

Docker-Harbor

TODO 参考 Docker-Harbor 搭建私有 Docker 镜像仓库。